Btrfs: fix direct-io vs nodatacow
PATCH 1/1 Btrfs: fix direct-io vs nodatacow
To reproduce the bug:
# mount -o nodatacow /dev/sda7 /mnt/ # dd if=/dev/zero of=/mnt/tmp bs=4K count=1 1+0 records in 1+0 records out 4096 bytes (4.1 kB) copied, 0.000136115 s, 30.1 MB/s # dd if=/dev/zero of=/mnt/tmp bs=4K count=1 conv=notrunc oflag=direct dd: writing `/mnt/tmp': Input/output error 1+0 records in 0+0 records out
btrfs_ordered_update_i_size() may return 1, but btrfs_endio_direct_write() mistakenly takes it as an error.
Signed-off-by Li Zefan <[email protected]>
--- fs/btrfs/inode.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-)
fs/btrfs/inode.c +1 -2
@@ -5785,8 +5785,7 @@ again:if (test_bit (BTRFS_ORDERED_NOCOW , &ordered->flags)) { ret =btrfs_ordered_update_i_size (inode,0 , ordered);if (!ret) - ret =btrfs_update_inode (trans, root, inode); - err = ret; + err =btrfs_update_inode (trans, root, inode); goto out; }
-- 1.7.3.1
Quoted 12 lines · Li Zefan
To reproduce the bug:
# mount -o nodatacow /dev/sda7 /mnt/ # dd if=/dev/zero of=/mnt/tmp bs=4K count=1 1+0 records in 1+0 records out 4096 bytes (4.1 kB) copied, 0.000136115 s, 30.1 MB/s # dd if=/dev/zero of=/mnt/tmp bs=4K count=1 conv=notrunc oflag=direct dd: writing `/mnt/tmp': Input/output error 1+0 records in 0+0 records out
Quoted 4 lines
btrfs_ordered_update_i_size()may return 1, butbtrfs_endio_direct_write()mistakenly takes it as an error.Signed-off-by Li Zefan <[email protected]>
Reviewed-by David Sterba <[email protected]>
Quoted 23 lines
--- fs/btrfs/inode.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-)fs/btrfs/inode.c +1
-4@@ -5785,8 +5785,7 @@ again:if (test_bit (BTRFS_ORDERED_NOCOW , &ordered->flags)) { ret =btrfs_ordered_update_i_size (inode,0 , ordered);if (!ret) - ret =btrfs_update_inode (trans, root, inode); - err = ret; + err =btrfs_update_inode (trans, root, inode); goto out; } -- 1.7.3.1 --To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html