+ if (unlikely(prev_ent != NULL &&
+ le64_to_cpu(prev_ent->lde_hash) == hash)) {
+ struct lu_fid prev_fid;
+ struct lu_fid fid;
+ int namelen =
+ le16_to_cpu(ent->lde_namelen);
+
+ fid_le_to_cpu(&prev_fid,
+ &prev_ent->lde_fid);
+ fid_le_to_cpu(&fid,
+ &ent->lde_fid);
+ /* This should replace D_WARNING with
+ * D_VFSTRACE after bug 20581 fixed. */
+ CDEBUG(D_WARNING, "Hash collision for "
+ "inode=%lu/%u(%p) with the "
+ "same hash value ["LPU64"] to "
+ "be returned to user space "
+ "through multiple readdir: "
+ "entry1 [%p], name1 [%.*s], "
+ "FID1 ["DFID"], "
+ "entry2 [%p], name2 [%.*s], "
+ "FID2 ["DFID"]\n",
+ inode->i_ino,
+ inode->i_generation,
+ inode, hash, prev_ent,
+ le16_to_cpu(
+ prev_ent->lde_namelen),
+ prev_ent->lde_name,
+ PFID(&prev_fid),
+ ent, namelen,
+ ent->lde_name,
+ PFID(&fid));
+ LASSERT(ent != prev_ent);
+ fd->fd_dir.lfd_fid = fid;
+ fd->fd_dir.lfd_hash = hash;
+ fd->fd_dir.lfd_namelen = namelen;
+ memcpy(fd->fd_dir.lfd_name,
+ ent->lde_name, namelen);
+ fd->fd_dir.lfd_valid = 1;
+ }
+
+ if (prev_page != NULL)
+ ll_put_page(prev_page);
+ prev_page = page;
+ }