btrfs: switch write_buf to kernel_write
authorChristoph Hellwig <hch@lst.de>
Fri, 1 Sep 2017 15:39:19 +0000 (17:39 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 4 Sep 2017 23:05:16 +0000 (19:05 -0400)
Instead of playing with the addressing limits.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/btrfs/send.c

index b082210df9c8b44d822dcb20ae07fb56a76fdde3..24b989fd130cc7389b99e94d261eb4adab013074 100644 (file)
@@ -539,33 +539,23 @@ static struct btrfs_path *alloc_path_for_send(void)
 static int write_buf(struct file *filp, const void *buf, u32 len, loff_t *off)
 {
        int ret;
-       mm_segment_t old_fs;
        u32 pos = 0;
 
-       old_fs = get_fs();
-       set_fs(KERNEL_DS);
-
        while (pos < len) {
-               ret = vfs_write(filp, (__force const char __user *)buf + pos,
-                               len - pos, off);
+               ret = kernel_write(filp, buf + pos, len - pos, off);
                /* TODO handle that correctly */
                /*if (ret == -ERESTARTSYS) {
                        continue;
                }*/
                if (ret < 0)
-                       goto out;
+                       return ret;
                if (ret == 0) {
-                       ret = -EIO;
-                       goto out;
+                       return -EIO;
                }
                pos += ret;
        }
 
-       ret = 0;
-
-out:
-       set_fs(old_fs);
-       return ret;
+       return 0;
 }
 
 static int tlv_put(struct send_ctx *sctx, u16 attr, const void *data, int len)