Use the incore inode size in xfs_file_readdir()
PATCH 1/1 Use the incore inode size in xfs_file_readdir()
We should be using the incore inode size here not the linux inode size. The incore inode size is always up to date for directories whereas the linux inode size is not updated for directories.
We've hit assertions in xfs_bmap() and traced it back to the linux inode size being zero here but the incore size being correct.
fs/xfs/linux-2.6/xfs_file.c +1 -1
@@ -254,7 +254,7 @@ xfs_file_readdir(* point we can change the ->readdir prototype to include the * buffer size. */ - bufsize = (size_t )min_t (loff_t,PAGE_SIZE , inode->i_size); + bufsize = (size_t )min_t (loff_t,PAGE_SIZE , ip->i_d.di_size); error =xfs_readdir (ip, dirent, bufsize, (xfs_off_t *)&filp->f_pos, filldir);
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 6 lines · Lachlan McIlroy
We should be using the incore inode size here not the linux inode size. The incore inode size is always up to date for directories whereas the linux inode size is not updated for directories.
We've hit assertions in
xfs_bmap()and traced it back to the linux inode size being zero here but the incore size being correct.
Heh. Looks good, but you can still call ->readdir with a 0 inode size, so you might want to check for that (actualyl I think other pathes are goign to take care of it, but..)
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 11 lines · Christoph Hellwig
Quoted 6 lines · Lachlan McIlroy
We should be using the incore inode size here not the linux inode size. The incore inode size is always up to date for directories whereas the linux inode size is not updated for directories.
We've hit assertions in
xfs_bmap()and traced it back to the linux inode size being zero here but the incore size being correct.Heh. Looks good, but you can still call ->readdir with a 0 inode size, so you might want to check for that (actualyl I think other pathes are goign to take care of it, but..)
What if we remove bufsize and pass PAGE_SIZE into xfs_readdir()? No need to worry about a 0 inode size.
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 9 lines · Lachlan McIlroy
Quoted 8 lines · Christoph Hellwig
Quoted 6 lines · Lachlan McIlroy
We should be using the incore inode size here not the linux inode size. The incore inode size is always up to date for directories whereas the linux inode size is not updated for directories.
We've hit assertions in
xfs_bmap()and traced it back to the linux inode size being zero here but the incore size being correct.
Quoted 6 lines
Quoted 3 lines
Heh. Looks good, but you can still call ->readdir with a 0 inode size, so you might want to check for that (actualyl I think other pathes are goign to take care of it, but..)
What if we remove bufsize and pass
PAGE_SIZEintoxfs_readdir()? No need to worry about a 0 inode size.
It is used for sizing a memory allocation in xfs_dir2_leaf_getdents, and avoiding over-allocations for small directories seems like a good idea.
So please go ahead with your original patch.
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs