summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2011-11-17 15:01:17 -0800
committerSage Weil <sage@newdream.net>2011-11-17 15:01:25 -0800
commitef5ca293a7eee6fd37c1ea8e8027a5f6d83b66da (patch)
tree4c948e3b2e41003b28b3850f18b47f340ebfbcfa
parentd61ba6441b375f9849714305808a761bee5db14c (diff)
downloadceph-ef5ca293a7eee6fd37c1ea8e8027a5f6d83b66da.tar.gz
fuse: fix readdir return code
Ignore ENOSPC generated by our own callback, as it is only used to terminate the loop. Broken by commit cd90061239a598f6fca94326b6d2c32f325c96eb. Fixes: #1728 Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r--src/client/fuse_ll.cc9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/client/fuse_ll.cc b/src/client/fuse_ll.cc
index bbfab9d04b9..cd2e4ae9ec4 100644
--- a/src/client/fuse_ll.cc
+++ b/src/client/fuse_ll.cc
@@ -420,14 +420,11 @@ static void ceph_ll_readdir(fuse_req_t req, fuse_ino_t ino, size_t size,
rc.pos = 0;
rc.snap = fino_snap(ino);
- int r;
- r = client->readdir_r_cb(dirp, ceph_ll_add_dirent, &rc);
-
- if (r == 0) {
+ int r = client->readdir_r_cb(dirp, ceph_ll_add_dirent, &rc);
+ if (r == 0 || r == -ENOSPC) /* ignore ENOSPC from our callback */
fuse_reply_buf(req, rc.buf, rc.pos);
- } else {
+ else
fuse_reply_err(req, -r);
- }
delete[] rc.buf;
}