[XFS] stop using xfs_itobp in xfs_bulkstat
xfs_bulkstat only wants the dinode, offset and buffer from a given inode number. Instead of using xfs_itobp on a fake inode which is complicated and currently leads to leaks of the security data just use xfs_inotobp which is designed to do exactly the kind of lookup xfs_bulkstat wants. The only thing that's missing in xfs_inotobp is a flags paramter that let's us pass down XFS_IMAP_BULKSTAT, but that can easily added. SGI-PV: 987246 SGI-Modid: xfs-linux-melb:xfs-kern:32397a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com> Signed-off-by: David Chinner <david@fromorbit.com>
This commit is contained in:
committed by
Lachlan McIlroy
parent
455486b9cc
commit
c679eef052
+8
-13
@@ -359,7 +359,6 @@ xfs_bulkstat(
|
||||
int ubused; /* bytes used by formatter */
|
||||
xfs_buf_t *bp; /* ptr to on-disk inode cluster buf */
|
||||
xfs_dinode_t *dip; /* ptr into bp for specific inode */
|
||||
xfs_inode_t *ip; /* ptr to in-core inode struct */
|
||||
|
||||
/*
|
||||
* Get the last inode value, see if there's nothing to do.
|
||||
@@ -585,6 +584,8 @@ xfs_bulkstat(
|
||||
|
||||
if (flags & (BULKSTAT_FG_QUICK |
|
||||
BULKSTAT_FG_INLINE)) {
|
||||
int offset;
|
||||
|
||||
ino = XFS_AGINO_TO_INO(mp, agno,
|
||||
agino);
|
||||
bno = XFS_AGB_TO_DADDR(mp, agno,
|
||||
@@ -595,19 +596,13 @@ xfs_bulkstat(
|
||||
*/
|
||||
if (bp)
|
||||
xfs_buf_relse(bp);
|
||||
ip = xfs_inode_alloc(mp, ino);
|
||||
if (!ip) {
|
||||
bp = NULL;
|
||||
rval = ENOMEM;
|
||||
break;
|
||||
}
|
||||
error = xfs_itobp(mp, NULL, ip,
|
||||
&dip, &bp, bno,
|
||||
XFS_IMAP_BULKSTAT,
|
||||
XFS_BUF_LOCK);
|
||||
|
||||
error = xfs_inotobp(mp, NULL, ino, &dip,
|
||||
&bp, &offset,
|
||||
XFS_IMAP_BULKSTAT);
|
||||
|
||||
if (!error)
|
||||
clustidx = ip->i_boffset / mp->m_sb.sb_inodesize;
|
||||
xfs_idestroy(ip);
|
||||
clustidx = offset / mp->m_sb.sb_inodesize;
|
||||
if (XFS_TEST_ERROR(error != 0,
|
||||
mp, XFS_ERRTAG_BULKSTAT_READ_CHUNK,
|
||||
XFS_RANDOM_BULKSTAT_READ_CHUNK)) {
|
||||
|
||||
Reference in New Issue
Block a user