diff options
author | Miao Xie <miaox@cn.fujitsu.com> | 2010-06-07 05:38:51 +0200 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2010-06-11 17:46:11 +0200 |
commit | 4a001071d3549f596c7c3736c5dda8a3a4aba9ed (patch) | |
tree | f835cbd0779a8912aa65669bbd44ce3f756c919f | |
parent | Btrfs: add more error checking to btrfs_dirty_inode (diff) | |
download | linux-4a001071d3549f596c7c3736c5dda8a3a4aba9ed.tar.xz linux-4a001071d3549f596c7c3736c5dda8a3a4aba9ed.zip |
Btrfs: fix loop device on top of btrfs
We cannot use the loop device which has been connected to a file in the btrf
The reproduce steps is following:
# dd if=/dev/zero of=vdev0 bs=1M count=1024
# losetup /dev/loop0 vdev0
# mkfs.btrfs /dev/loop0
...
failed to zero device start -5
The reason is that the btrfs don't implement either ->write_begin or ->write
the VFS API, so we fix it by setting ->write to do_sync_write().
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r-- | fs/btrfs/file.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 79437c5eeb1e..abcb91867b56 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1197,6 +1197,7 @@ static int btrfs_file_mmap(struct file *filp, struct vm_area_struct *vma) const struct file_operations btrfs_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, + .write = do_sync_write, .aio_read = generic_file_aio_read, .splice_read = generic_file_splice_read, .aio_write = btrfs_file_aio_write, |