aboutsummaryrefslogtreecommitdiff
path: root/fs/btrfs/file-item.c
diff options
context:
space:
mode:
authorGravatar Christoph Hellwig <hch@lst.de> 2023-05-31 09:54:02 +0200
committerGravatar David Sterba <dsterba@suse.com> 2023-06-19 13:59:36 +0200
commitec63b84d4611b2f07e9242080f3e8de4a011820b (patch)
treeba976b7b5152286a0cd47381692580a3e214e931 /fs/btrfs/file-item.c
parentbtrfs: open code btrfs_bio_end_io in btrfs_dio_submit_io (diff)
downloadlinux-ec63b84d4611b2f07e9242080f3e8de4a011820b.tar.gz
linux-ec63b84d4611b2f07e9242080f3e8de4a011820b.tar.bz2
linux-ec63b84d4611b2f07e9242080f3e8de4a011820b.zip
btrfs: add an ordered_extent pointer to struct btrfs_bio
Add a pointer to the ordered_extent to the existing union in struct btrfs_bio, so all code dealing with data write bios can just use a pointer dereference to retrieve the ordered_extent instead of doing multiple rbtree lookups per I/O. The reference to this ordered_extent is dropped at end I/O time, which implies that an extra one must be acquired when the bio is split. This also requires moving the btrfs_extract_ordered_extent call into btrfs_split_bio so that the invariant of always having a valid ordered_extent reference for the btrfs_bio is kept. Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/file-item.c')
-rw-r--r--fs/btrfs/file-item.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
index 782bbf081c26..cbacaa80526c 100644
--- a/fs/btrfs/file-item.c
+++ b/fs/btrfs/file-item.c
@@ -799,19 +799,12 @@ blk_status_t btrfs_csum_one_bio(struct btrfs_bio *bbio)
*/
blk_status_t btrfs_alloc_dummy_sum(struct btrfs_bio *bbio)
{
- struct btrfs_ordered_extent *ordered =
- btrfs_lookup_ordered_extent(bbio->inode, bbio->file_offset);
-
- if (WARN_ON_ONCE(!ordered))
- return BLK_STS_IOERR;
-
bbio->sums = kmalloc(sizeof(*bbio->sums), GFP_NOFS);
if (!bbio->sums)
return BLK_STS_RESOURCE;
bbio->sums->len = bbio->bio.bi_iter.bi_size;
bbio->sums->logical = bbio->bio.bi_iter.bi_sector << SECTOR_SHIFT;
- btrfs_add_ordered_sum(ordered, bbio->sums);
- btrfs_put_ordered_extent(ordered);
+ btrfs_add_ordered_sum(bbio->ordered, bbio->sums);
return 0;
}