path: root/fs/btrfs/volumes.h
diff options
authorDavid Sterba <dsterba@suse.com>2018-11-22 17:16:49 +0100
committerDavid Sterba <dsterba@suse.com>2018-12-17 14:51:40 +0100
commitb3a0dd50c3951ec1b9a12ec39034194022fd8693 (patch)
tree10898fe39a7737103169898b38a753db0b92aded /fs/btrfs/volumes.h
parentbtrfs: remove redundant csum buffer in btrfs_io_bio (diff)
btrfs: replace btrfs_io_bio::end_io with a simple helper
The end_io callback implemented as btrfs_io_bio_endio_readpage only calls kfree. Also the callback is set only in case the csum buffer is allocated and not pointing to the inline buffer. We can use that information to drop the indirection and call a helper that will free the csums only in the right case. This shrinks struct btrfs_io_bio by 8 bytes. Reviewed-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/volumes.h')
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
index 702c78cf2b4d..48e8bb546780 100644
--- a/fs/btrfs/volumes.h
+++ b/fs/btrfs/volumes.h
@@ -267,14 +267,12 @@ struct btrfs_fs_devices {
* we allocate are actually btrfs_io_bios. We'll cram as much of
* struct btrfs_bio as we can into this over time.
-typedef void (btrfs_io_bio_end_io_t) (struct btrfs_io_bio *bio, int err);
struct btrfs_io_bio {
unsigned int mirror_num;
unsigned int stripe_index;
u64 logical;
u8 *csum;
- btrfs_io_bio_end_io_t *end_io;
struct bvec_iter iter;
* This member must come last, bio_alloc_bioset will allocate enough
@@ -288,6 +286,14 @@ static inline struct btrfs_io_bio *btrfs_io_bio(struct bio *bio)
return container_of(bio, struct btrfs_io_bio, bio);
+static inline void btrfs_io_bio_free_csum(struct btrfs_io_bio *io_bio)
+ if (io_bio->csum != io_bio->csum_inline) {
+ kfree(io_bio->csum);
+ io_bio->csum = NULL;
+ }
struct btrfs_bio_stripe {
struct btrfs_device *dev;
u64 physical;