]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: pass write-hint for buffered IO
authorJing Xia <j.xia@samsung.com>
Tue, 3 Sep 2024 05:40:12 +0000 (13:40 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 13 Jan 2025 13:53:21 +0000 (14:53 +0100)
Commit 449813515d3e ("block, fs: Restore the per-bio/request data
lifetime fields") restored write-hint support in btrfs. But that is
applicable only for direct IO. This patch supports passing
write-hint for buffered IO from btrfs file system to block layer
by filling bi_write_hint of struct bio in alloc_new_bio().

There's an ongoing discussion which devices can use that,
https://lore.kernel.org/all/20240910150200.6589-6-joshi.k@samsung.com,
in SCSI there's support using sd_group_number() and
sd_setup_rw32_cmnd().

The hint goes from the application directly to the block device so it's
up to the application to set up everything properly to utilize the
different hint classes.

Link: https://lore.kernel.org/all/20240910150200.6589-6-joshi.k@samsung.com
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Jing Xia <j.xia@samsung.com>
[ Add more context and use case. ]
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index 9725ff7f274ded907577f93181a9f9dff1fa4b15..74f2775db51ee8e0676caaac4d731ccae7b08de9 100644 (file)
@@ -710,6 +710,7 @@ static void alloc_new_bio(struct btrfs_inode *inode,
        bbio = btrfs_bio_alloc(BIO_MAX_VECS, bio_ctrl->opf, fs_info,
                               bio_ctrl->end_io_func, NULL);
        bbio->bio.bi_iter.bi_sector = disk_bytenr >> SECTOR_SHIFT;
+       bbio->bio.bi_write_hint = inode->vfs_inode.i_write_hint;
        bbio->inode = inode;
        bbio->file_offset = file_offset;
        bio_ctrl->bbio = bbio;