gfs2: Explain some direct I/O oddities
authorAndreas Gruenbacher <agruenba@redhat.com>
Tue, 26 Apr 2022 21:31:06 +0000 (23:31 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Tue, 24 May 2022 19:29:14 +0000 (21:29 +0200)
Add some comments explaining the oddities of partial direct I/O reads
and writes.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/file.c

index 2556ae1..f1d2f4d 100644 (file)
@@ -840,6 +840,7 @@ retry:
        pagefault_enable();
        if (ret <= 0 && ret != -EFAULT)
                goto out_unlock;
+       /* No increment (+=) because iomap_dio_rw returns a cumulative value. */
        if (ret > 0)
                read = ret;
 
@@ -854,6 +855,7 @@ out_unlock:
                gfs2_glock_dq(gh);
 out_uninit:
        gfs2_holder_uninit(gh);
+       /* User space doesn't expect partial success. */
        if (ret < 0)
                return ret;
        return read;
@@ -906,6 +908,7 @@ retry:
                if (ret != -EFAULT)
                        goto out_unlock;
        }
+       /* No increment (+=) because iomap_dio_rw returns a cumulative value. */
        if (ret > 0)
                written = ret;
 
@@ -920,6 +923,7 @@ out_unlock:
                gfs2_glock_dq(gh);
 out_uninit:
        gfs2_holder_uninit(gh);
+       /* User space doesn't expect partial success. */
        if (ret < 0)
                return ret;
        return written;