In btrfs_discard_extent() we were only discarding half of a RAID1 or RAID10 extent.
We should be telling btrfs_map_block() that we want to write, so it tells us about _all_ mirrors. If we tell it we're going to read, it'll only tell us about a single mirror at a time. Signed-off-by: David Woodhouse <david.woodho...@intel.com> --- Untested. Does anyone have any real devices that do TRIM yet, or do I need to hack up an FTL to do it again? diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index a5aca39..1496925 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -1421,7 +1421,7 @@ static int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr, struct btrfs_multi_bio *multi = NULL; /* Tell the block device(s) that the sectors can be discarded */ - ret = btrfs_map_block(&root->fs_info->mapping_tree, READ, + ret = btrfs_map_block(&root->fs_info->mapping_tree, WRITE, bytenr, &map_length, &multi, 0); if (!ret) { struct btrfs_bio_stripe *stripe = multi->stripes; -- David Woodhouse Open Source Technology Centre david.woodho...@intel.com Intel Corporation -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html