diff options
Diffstat (limited to 'fs/xfs/xfs_itable.c')
| -rw-r--r-- | fs/xfs/xfs_itable.c | 24 | 
1 files changed, 14 insertions, 10 deletions
| diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index 136c6b06f1c9..80e5b96f5027 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c | |||
| @@ -39,6 +39,16 @@ | |||
| 39 | #include "xfs_error.h" | 39 | #include "xfs_error.h" | 
| 40 | #include "xfs_btree.h" | 40 | #include "xfs_btree.h" | 
| 41 | 41 | ||
| 42 | int | ||
| 43 | xfs_internal_inum( | ||
| 44 | xfs_mount_t *mp, | ||
| 45 | xfs_ino_t ino) | ||
| 46 | { | ||
| 47 | return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || | ||
| 48 | (XFS_SB_VERSION_HASQUOTA(&mp->m_sb) && | ||
| 49 | (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))); | ||
| 50 | } | ||
| 51 | |||
| 42 | STATIC int | 52 | STATIC int | 
| 43 | xfs_bulkstat_one_iget( | 53 | xfs_bulkstat_one_iget( | 
| 44 | xfs_mount_t *mp, /* mount point for filesystem */ | 54 | xfs_mount_t *mp, /* mount point for filesystem */ | 
| @@ -213,17 +223,12 @@ xfs_bulkstat_one( | |||
| 213 | xfs_dinode_t *dip; /* dinode inode pointer */ | 223 | xfs_dinode_t *dip; /* dinode inode pointer */ | 
| 214 | 224 | ||
| 215 | dip = (xfs_dinode_t *)dibuff; | 225 | dip = (xfs_dinode_t *)dibuff; | 
| 226 | *stat = BULKSTAT_RV_NOTHING; | ||
| 216 | 227 | ||
| 217 | if (!buffer || ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || | 228 | if (!buffer || xfs_internal_inum(mp, ino)) | 
| 218 | (XFS_SB_VERSION_HASQUOTA(&mp->m_sb) && | ||
| 219 | (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))) { | ||
| 220 | *stat = BULKSTAT_RV_NOTHING; | ||
| 221 | return XFS_ERROR(EINVAL); | 229 | return XFS_ERROR(EINVAL); | 
| 222 | } | 230 | if (ubsize < sizeof(*buf)) | 
| 223 | if (ubsize < sizeof(*buf)) { | ||
| 224 | *stat = BULKSTAT_RV_NOTHING; | ||
| 225 | return XFS_ERROR(ENOMEM); | 231 | return XFS_ERROR(ENOMEM); | 
| 226 | } | ||
| 227 | 232 | ||
| 228 | buf = kmem_alloc(sizeof(*buf), KM_SLEEP); | 233 | buf = kmem_alloc(sizeof(*buf), KM_SLEEP); | 
| 229 | 234 | ||
| @@ -239,8 +244,7 @@ xfs_bulkstat_one( | |||
| 239 | } | 244 | } | 
| 240 | 245 | ||
| 241 | if (copy_to_user(buffer, buf, sizeof(*buf))) { | 246 | if (copy_to_user(buffer, buf, sizeof(*buf))) { | 
| 242 | *stat = BULKSTAT_RV_NOTHING; | 247 | error = EFAULT; | 
| 243 | error = EFAULT; | ||
| 244 | goto out_free; | 248 | goto out_free; | 
| 245 | } | 249 | } | 
| 246 | 250 | ||
