]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
vfs: clean up generic_remap_file_range_prep return value
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 29 Oct 2018 23:42:24 +0000 (10:42 +1100)
committerDave Chinner <david@fromorbit.com>
Mon, 29 Oct 2018 23:42:24 +0000 (10:42 +1100)
Since the remap prep function can update the length of the remap
request, we can change this function to return the usual return status
instead of the odd behavior it has now.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/ocfs2/refcounttree.c
fs/read_write.c
fs/xfs/xfs_reflink.c

index 6a42c04ac0ab0e11f8dd3ddb90292dc30c93707e..46bbd315c39f4876f0bb01cf94a7cf15e822a7c4 100644 (file)
@@ -4852,7 +4852,7 @@ int ocfs2_reflink_remap_range(struct file *file_in,
 
        ret = generic_remap_file_range_prep(file_in, pos_in, file_out, pos_out,
                        &len, remap_flags);
-       if (ret <= 0)
+       if (ret < 0 || len == 0)
                goto out_unlock;
 
        /* Lock out changes to the allocation maps and remap. */
index e4d295d0d23616b29d2d846902531f0749adf2fe..6b40a43edf18cfc012d0ff4f37db4751a482a36b 100644 (file)
@@ -1848,8 +1848,8 @@ static int vfs_dedupe_file_range_compare(struct inode *src, loff_t srcoff,
  * sense, and then flush all dirty data.  Caller must ensure that the
  * inodes have been locked against any other modifications.
  *
- * Returns: 0 for "nothing to clone", 1 for "something to clone", or
- * the usual negative error code.
+ * If there's an error, then the usual negative error code is returned.
+ * Otherwise returns 0 with *len set to the request length.
  */
 int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in,
                                  struct file *file_out, loff_t pos_out,
@@ -1945,7 +1945,7 @@ int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in,
                        return ret;
        }
 
-       return 1;
+       return 0;
 }
 EXPORT_SYMBOL(generic_remap_file_range_prep);
 
index 3dbe5fb7e9c06fbf67ed31bb542343d894a47f36..9b1ea42c81d13625f7cd967766466cda14e55189 100644 (file)
@@ -1329,7 +1329,7 @@ xfs_reflink_remap_prep(
 
        ret = generic_remap_file_range_prep(file_in, pos_in, file_out, pos_out,
                        len, remap_flags);
-       if (ret <= 0)
+       if (ret < 0 || *len == 0)
                goto out_unlock;
 
        /*
@@ -1409,7 +1409,7 @@ xfs_reflink_remap_range(
        /* Prepare and then clone file data. */
        ret = xfs_reflink_remap_prep(file_in, pos_in, file_out, pos_out,
                        &len, remap_flags);
-       if (ret <= 0)
+       if (ret < 0 || len == 0)
                return ret;
 
        trace_xfs_reflink_remap_range(src, pos_in, len, dest, pos_out);