Re: [PATCH 03/40] btrfs: fix direct I/O writes for split bios on zoned devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 2022/3/22 23:55, Christoph Hellwig wrote:
When a bio is split in btrfs_submit_direct, dip->file_offset contains
the file offset for the first bio.  But this means the start value used
in btrfs_end_dio_bio to record the write location for zone devices is
icorrect for subsequent bios.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Maybe better to be folded with previous patch?

It looks good to me though.

Reviewed-by: Qu Wenruo <wqu@xxxxxxxx>

Thanks,
Qu
---
  fs/btrfs/inode.c | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 93f00e9150ed0..325e773c6e880 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -7829,6 +7829,7 @@ static blk_status_t btrfs_submit_bio_start_direct_io(struct inode *inode,
  static void btrfs_end_dio_bio(struct bio *bio)
  {
  	struct btrfs_dio_private *dip = bio->bi_private;
+	struct btrfs_bio *bbio = btrfs_bio(bio);
  	blk_status_t err = bio->bi_status;

  	if (err)
@@ -7839,12 +7840,12 @@ static void btrfs_end_dio_bio(struct bio *bio)
  			   bio->bi_iter.bi_size, err);

  	if (bio_op(bio) == REQ_OP_READ)
-		err = btrfs_check_read_dio_bio(dip, btrfs_bio(bio), !err);
+		err = btrfs_check_read_dio_bio(dip, bbio, !err);

  	if (err)
  		dip->dio_bio->bi_status = err;

-	btrfs_record_physical_zoned(dip->inode, dip->file_offset, bio);
+	btrfs_record_physical_zoned(dip->inode, bbio->file_offset, bio);

  	bio_put(bio);
  	btrfs_dio_private_put(dip);




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux