提交 6f1f2168 编写于 作者: V Vlad Apostolov 提交者: Tim Shimmin

[XFS] pv 956241, author: nathans, rv: vapo - make ino validation checks

consistent in bulkstat

SGI-PV: 956241
SGI-Modid: xfs-linux-melb:xfs-kern:26984a
Signed-off-by: NVlad Apostolov <vapo@sgi.com>
Signed-off-by: NTim Shimmin <tes@sgi.com>
上级 6216ff18
...@@ -39,6 +39,16 @@ ...@@ -39,6 +39,16 @@
#include "xfs_error.h" #include "xfs_error.h"
#include "xfs_btree.h" #include "xfs_btree.h"
int
xfs_internal_inum(
xfs_mount_t *mp,
xfs_ino_t ino)
{
return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino ||
(XFS_SB_VERSION_HASQUOTA(&mp->m_sb) &&
(ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino)));
}
STATIC int STATIC int
xfs_bulkstat_one_iget( xfs_bulkstat_one_iget(
xfs_mount_t *mp, /* mount point for filesystem */ xfs_mount_t *mp, /* mount point for filesystem */
...@@ -213,17 +223,12 @@ xfs_bulkstat_one( ...@@ -213,17 +223,12 @@ xfs_bulkstat_one(
xfs_dinode_t *dip; /* dinode inode pointer */ xfs_dinode_t *dip; /* dinode inode pointer */
dip = (xfs_dinode_t *)dibuff; dip = (xfs_dinode_t *)dibuff;
*stat = BULKSTAT_RV_NOTHING;
if (!buffer || ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || if (!buffer || xfs_internal_inum(mp, ino))
(XFS_SB_VERSION_HASQUOTA(&mp->m_sb) &&
(ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))) {
*stat = BULKSTAT_RV_NOTHING;
return XFS_ERROR(EINVAL); return XFS_ERROR(EINVAL);
} if (ubsize < sizeof(*buf))
if (ubsize < sizeof(*buf)) {
*stat = BULKSTAT_RV_NOTHING;
return XFS_ERROR(ENOMEM); return XFS_ERROR(ENOMEM);
}
buf = kmem_alloc(sizeof(*buf), KM_SLEEP); buf = kmem_alloc(sizeof(*buf), KM_SLEEP);
...@@ -239,8 +244,7 @@ xfs_bulkstat_one( ...@@ -239,8 +244,7 @@ xfs_bulkstat_one(
} }
if (copy_to_user(buffer, buf, sizeof(*buf))) { if (copy_to_user(buffer, buf, sizeof(*buf))) {
*stat = BULKSTAT_RV_NOTHING; error = EFAULT;
error = EFAULT;
goto out_free; goto out_free;
} }
......
...@@ -81,6 +81,11 @@ xfs_bulkstat_one( ...@@ -81,6 +81,11 @@ xfs_bulkstat_one(
void *dibuff, void *dibuff,
int *stat); int *stat);
int
xfs_internal_inum(
xfs_mount_t *mp,
xfs_ino_t ino);
int /* error status */ int /* error status */
xfs_inumbers( xfs_inumbers(
xfs_mount_t *mp, /* mount point for filesystem */ xfs_mount_t *mp, /* mount point for filesystem */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册