diff options
author | Sage Weil <sage@newdream.net> | 2010-11-11 16:48:59 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-11-11 16:48:59 -0800 |
commit | 7b88dadc13e0004947de52df128dbd5b0754ed0a (patch) | |
tree | 9a2fd203b382b5922dfd1be5cb3adf055ff50c2d | |
parent | a1629c3b24f26ec1b0f534874af674a6b4c1540b (diff) | |
download | op-kernel-dev-7b88dadc13e0004947de52df128dbd5b0754ed0a.zip op-kernel-dev-7b88dadc13e0004947de52df128dbd5b0754ed0a.tar.gz |
ceph: fix frag offset for non-leftmost frags
We start at offset 2 for the leftmost frag, and 0 for subsequent frags.
When we reach the end (rightmost), we go back to 2. This fixes readdir on
fragmented (large) directories.
Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r-- | fs/ceph/dir.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c index 1e11ed7..5f67728 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c @@ -336,7 +336,10 @@ more: if (req->r_reply_info.dir_end) { kfree(fi->last_name); fi->last_name = NULL; - fi->next_offset = 2; + if (ceph_frag_is_rightmost(frag)) + fi->next_offset = 2; + else + fi->next_offset = 0; } else { rinfo = &req->r_reply_info; err = note_last_dentry(fi, |