fs: return -EOPNOTSUPP if clone is not supported
authorChristoph Hellwig <hch@lst.de>
Fri, 26 Feb 2016 17:53:12 +0000 (18:53 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 28 Feb 2016 00:15:51 +0000 (19:15 -0500)
-EBADF is a rather confusing error if an operations is not supported,
and nfsd gets rather upset about it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/read_write.c

index 0c8782aa3d71364927b7e66f0237efb3c3aed772..dadf24e5c95bb7004d105f0773430576bfc57cf5 100644 (file)
@@ -1533,10 +1533,12 @@ int vfs_clone_file_range(struct file *file_in, loff_t pos_in,
 
        if (!(file_in->f_mode & FMODE_READ) ||
            !(file_out->f_mode & FMODE_WRITE) ||
-           (file_out->f_flags & O_APPEND) ||
-           !file_in->f_op->clone_file_range)
+           (file_out->f_flags & O_APPEND))
                return -EBADF;
 
+       if (!file_in->f_op->clone_file_range)
+               return -EOPNOTSUPP;
+
        ret = clone_verify_area(file_in, pos_in, len, false);
        if (ret)
                return ret;