]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/splice.c
net: ethernet: cpsw: fix erroneous condition in error check
[karo-tx-linux.git] / fs / splice.c
index 6909d89d0da56ffd929a2114b0228a03d1f35589..718bd0056384688af6ead056156574638c0be6e9 100644 (file)
@@ -569,7 +569,7 @@ static ssize_t kernel_readv(struct file *file, const struct iovec *vec,
        return res;
 }
 
-static ssize_t kernel_write(struct file *file, const char *buf, size_t count,
+ssize_t kernel_write(struct file *file, const char *buf, size_t count,
                            loff_t pos)
 {
        mm_segment_t old_fs;
@@ -578,11 +578,12 @@ static ssize_t kernel_write(struct file *file, const char *buf, size_t count,
        old_fs = get_fs();
        set_fs(get_ds());
        /* The cast to a user pointer is valid due to the set_fs() */
-       res = vfs_write(file, (const char __user *)buf, count, &pos);
+       res = vfs_write(file, (__force const char __user *)buf, count, &pos);
        set_fs(old_fs);
 
        return res;
 }
+EXPORT_SYMBOL(kernel_write);
 
 ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
                                 struct pipe_inode_info *pipe, size_t len,
@@ -1170,7 +1171,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
         * randomly drop data for eg socket -> socket splicing. Use the
         * piped splicing for that!
         */
-       i_mode = in->f_path.dentry->d_inode->i_mode;
+       i_mode = file_inode(in)->i_mode;
        if (unlikely(!S_ISREG(i_mode) && !S_ISBLK(i_mode)))
                return -EINVAL;