Skip to content

Commit

Permalink
btrfs: make btrfs_issue_discard return bytes discarded
Browse files Browse the repository at this point in the history
Initially this will just be the length argument passed to it,
but the following patches will adjust that to reflect re-alignment
and skipped blocks.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Tested-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
  • Loading branch information
Jeff Mahoney authored and Chris Mason committed Jul 29, 2015
1 parent 00d80e3 commit d04c6b8
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions fs/btrfs/extent-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -1883,10 +1883,17 @@ static int remove_extent_backref(struct btrfs_trans_handle *trans,
return ret;
}

static int btrfs_issue_discard(struct block_device *bdev,
u64 start, u64 len)
static int btrfs_issue_discard(struct block_device *bdev, u64 start, u64 len,
u64 *discarded_bytes)
{
return blkdev_issue_discard(bdev, start >> 9, len >> 9, GFP_NOFS, 0);
int ret = 0;

*discarded_bytes = 0;
ret = blkdev_issue_discard(bdev, start >> 9, len >> 9, GFP_NOFS, 0);
if (!ret)
*discarded_bytes = len;

return ret;
}

int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr,
Expand All @@ -1907,14 +1914,16 @@ int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr,


for (i = 0; i < bbio->num_stripes; i++, stripe++) {
u64 bytes;
if (!stripe->dev->can_discard)
continue;

ret = btrfs_issue_discard(stripe->dev->bdev,
stripe->physical,
stripe->length);
stripe->length,
&bytes);
if (!ret)
discarded_bytes += stripe->length;
discarded_bytes += bytes;
else if (ret != -EOPNOTSUPP)
break; /* Logic errors or -ENOMEM, or -EIO but I don't know how that could happen JDM */

Expand Down

0 comments on commit d04c6b8

Please sign in to comment.