From 650b5c33fa07ac66ed32b1b9d307bd7c6800d821 Mon Sep 17 00:00:00 2001 From: green Date: Thu, 11 Aug 2005 16:41:17 +0000 Subject: [PATCH] b=6455 r=adilger Correctly fill struct dirent, d_off there should hold offset to NEXT dir entry, not current one. --- lustre/ChangeLog | 6 ++++++ lustre/liblustre/dir.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 73e759e..d67f4f9 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -39,6 +39,12 @@ Description: O_CREAT|O_EXCL open flags in liblustre always return -EEXIST Details : Make libsysio to not enforce O_EXCL by clearing the flag, for liblustre O_EXCL is enforced by MDS. +Severity : minor +Bugzilla : 6455 +Description: readdir never returns NULL in liblustre. +Details : Corrected llu_iop_getdirentries logic, to return offset of next + dentry in struct dirent. + 2005-08-08 Cluster File Systems, Inc. * version 1.4.4 * bug fixes diff --git a/lustre/liblustre/dir.c b/lustre/liblustre/dir.c index ec33ac3..4c1917a 100644 --- a/lustre/liblustre/dir.c +++ b/lustre/liblustre/dir.c @@ -180,7 +180,7 @@ static int filldir(char *buf, int buflen, return 1; dirent->d_ino = ino; - dirent->d_off = offset, + dirent->d_off = offset; dirent->d_reclen = reclen; dirent->d_type = (unsigned short) d_type; memcpy(dirent->d_name, name, namelen); @@ -241,7 +241,7 @@ ssize_t llu_iop_getdirentries(struct inode *ino, char *buf, size_t nbytes, offset = (char*) de - addr; over = filldir(buf, nbytes, de->name, de->name_len, - (pgidx << PAGE_SHIFT) | offset, + ((pgidx << PAGE_SHIFT) | offset) + le16_to_cpu(de->rec_len), le32_to_cpu(de->inode), d_type, &filled); if (over) { free_page(page); -- 1.8.3.1