]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix sync_read return value
authorSage Weil <sage@newdream.net>
Tue, 11 Aug 2009 19:18:44 +0000 (12:18 -0700)
committerSage Weil <sage@newdream.net>
Tue, 11 Aug 2009 19:18:44 +0000 (12:18 -0700)
Return total number of bytes read from ceph_sync_read.

src/kernel/file.c

index 2aefcda342879dc003fe987a6779bed228538097..1ffa67afd1c70c3a631fa0100bc74c4973057a41 100644 (file)
@@ -450,16 +450,20 @@ more:
                        pages_left -= didpages;
                        goto more;
                }
-
+       }
+       if (ret >= 0) {
                ret = copy_page_vector_to_user(pages, data, start_off, read);
-               if (ret == 0)
+               if (ret >= 0) {
                        *offset = start_off + read;
+                       ret = read;
+               }
        }
 
        if (file->f_flags & O_DIRECT)
                put_page_vector(pages, num_pages);
        else
                ceph_release_page_vector(pages, num_pages);
+       dout("sync_read read %d result %d\n", read, ret);
        return ret;
 }
 
@@ -653,8 +657,8 @@ static ssize_t ceph_aio_read(struct kiocb *iocb, const struct iovec *iov,
                ret = generic_file_aio_read(iocb, iov, nr_segs, pos);
 
 out:
-       dout("aio_read %p %llx.%llx dropping cap refs on %s\n",
-            inode, ceph_vinop(inode), ceph_cap_string(got));
+       dout("aio_read %p %llx.%llx dropping cap refs on %s = %d\n",
+            inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret);
        ceph_put_cap_refs(ci, got);
        return ret;
 }