Whamcloud - gitweb
b=6455
authorgreen <green>
Thu, 11 Aug 2005 16:41:17 +0000 (16:41 +0000)
committergreen <green>
Thu, 11 Aug 2005 16:41:17 +0000 (16:41 +0000)
r=adilger

Correctly fill struct dirent, d_off there should hold offset to NEXT dir entry,
not current one.

lustre/ChangeLog
lustre/liblustre/dir.c

index 73e759e..d67f4f9 100644 (file)
@@ -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. <info@clusterfs.com>
        * version 1.4.4
        * bug fixes
index ec33ac3..4c1917a 100644 (file)
@@ -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);