[XFS] Put the correct offset in dirent d_off
The recent filldir regression fix was not putting the correct d_off in each dirent. This was resulting in incorrect cookies being passed to dmapi ioctls and the wrong offset appearing in the dirents. readdir was unaffected as the filp->f_pos was being updated with the correct offset and this was being written into the last dirent in each buffer. Fix the XFS code to do the right thing. SGI-PV: 973746 SGI-Modid: xfs-linux-melb:xfs-kern:30240a Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
@@ -508,7 +508,7 @@ xfs_dir2_block_getdents(
|
||||
continue;
|
||||
|
||||
cook = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk,
|
||||
ptr - (char *)block);
|
||||
(char *)dep - (char *)block);
|
||||
ino = be64_to_cpu(dep->inumber);
|
||||
#if XFS_BIG_INUMS
|
||||
ino += mp->m_inoadd;
|
||||
@@ -519,9 +519,7 @@ xfs_dir2_block_getdents(
|
||||
*/
|
||||
if (filldir(dirent, dep->name, dep->namelen, cook,
|
||||
ino, DT_UNKNOWN)) {
|
||||
*offset = xfs_dir2_db_off_to_dataptr(mp,
|
||||
mp->m_dirdatablk,
|
||||
(char *)dep - (char *)block);
|
||||
*offset = cook;
|
||||
xfs_da_brelse(NULL, bp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user