forked from Minki/linux
[XFS] Kill off xfs_statvfs.
We were already filling the Linux struct statfs anyway, and doing this trivial task directly in xfs_fs_statfs makes the code quite a bit cleaner. While I was at it I also moved copying attributes that don't change over the lifetime of the filesystem outside the superblock lock. xfs_fs_fill_super used to get the magic number and blocksize through xfs_statvfs, but assigning them directly is a lot cleaner and will save some stack space during mount. SGI-PV: 971186 SGI-Modid: xfs-linux-melb:xfs-kern:29802a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Tim Shimmin <tes@sgi.com>
This commit is contained in:
parent
c43f408795
commit
4ca488eb45
@ -207,10 +207,6 @@
|
|||||||
#define xfs_stack_trace() dump_stack()
|
#define xfs_stack_trace() dump_stack()
|
||||||
#define xfs_itruncate_data(ip, off) \
|
#define xfs_itruncate_data(ip, off) \
|
||||||
(-vmtruncate(vn_to_inode(XFS_ITOV(ip)), (off)))
|
(-vmtruncate(vn_to_inode(XFS_ITOV(ip)), (off)))
|
||||||
#define xfs_statvfs_fsid(statp, mp) \
|
|
||||||
({ u64 id = huge_encode_dev((mp)->m_ddev_targp->bt_dev); \
|
|
||||||
__kernel_fsid_t *fsid = &(statp)->f_fsid; \
|
|
||||||
(fsid->val[0] = (u32)id, fsid->val[1] = (u32)(id >> 32)); })
|
|
||||||
|
|
||||||
|
|
||||||
/* Move the kernel do_div definition off to one side */
|
/* Move the kernel do_div definition off to one side */
|
||||||
|
@ -681,8 +681,44 @@ xfs_fs_statfs(
|
|||||||
struct dentry *dentry,
|
struct dentry *dentry,
|
||||||
struct kstatfs *statp)
|
struct kstatfs *statp)
|
||||||
{
|
{
|
||||||
return -xfs_statvfs(XFS_M(dentry->d_sb), statp,
|
struct xfs_mount *mp = XFS_M(dentry->d_sb);
|
||||||
vn_from_inode(dentry->d_inode));
|
xfs_sb_t *sbp = &mp->m_sb;
|
||||||
|
__uint64_t fakeinos, id;
|
||||||
|
xfs_extlen_t lsize;
|
||||||
|
|
||||||
|
statp->f_type = XFS_SB_MAGIC;
|
||||||
|
statp->f_namelen = MAXNAMELEN - 1;
|
||||||
|
|
||||||
|
id = huge_encode_dev(mp->m_ddev_targp->bt_dev);
|
||||||
|
statp->f_fsid.val[0] = (u32)id;
|
||||||
|
statp->f_fsid.val[1] = (u32)(id >> 32);
|
||||||
|
|
||||||
|
xfs_icsb_sync_counters_flags(mp, XFS_ICSB_LAZY_COUNT);
|
||||||
|
|
||||||
|
spin_lock(&mp->m_sb_lock);
|
||||||
|
statp->f_bsize = sbp->sb_blocksize;
|
||||||
|
lsize = sbp->sb_logstart ? sbp->sb_logblocks : 0;
|
||||||
|
statp->f_blocks = sbp->sb_dblocks - lsize;
|
||||||
|
statp->f_bfree = statp->f_bavail =
|
||||||
|
sbp->sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp);
|
||||||
|
fakeinos = statp->f_bfree << sbp->sb_inopblog;
|
||||||
|
#if XFS_BIG_INUMS
|
||||||
|
fakeinos += mp->m_inoadd;
|
||||||
|
#endif
|
||||||
|
statp->f_files =
|
||||||
|
MIN(sbp->sb_icount + fakeinos, (__uint64_t)XFS_MAXINUMBER);
|
||||||
|
if (mp->m_maxicount)
|
||||||
|
#if XFS_BIG_INUMS
|
||||||
|
if (!mp->m_inoadd)
|
||||||
|
#endif
|
||||||
|
statp->f_files = min_t(typeof(statp->f_files),
|
||||||
|
statp->f_files,
|
||||||
|
mp->m_maxicount);
|
||||||
|
statp->f_ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree);
|
||||||
|
spin_unlock(&mp->m_sb_lock);
|
||||||
|
|
||||||
|
XFS_QM_DQSTATVFS(XFS_I(dentry->d_inode), statp);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC int
|
STATIC int
|
||||||
@ -777,7 +813,6 @@ xfs_fs_fill_super(
|
|||||||
struct inode *rootvp;
|
struct inode *rootvp;
|
||||||
struct xfs_mount *mp = NULL;
|
struct xfs_mount *mp = NULL;
|
||||||
struct xfs_mount_args *args = xfs_args_allocate(sb, silent);
|
struct xfs_mount_args *args = xfs_args_allocate(sb, silent);
|
||||||
struct kstatfs statvfs;
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
mp = xfs_mount_init();
|
mp = xfs_mount_init();
|
||||||
@ -805,14 +840,10 @@ xfs_fs_fill_super(
|
|||||||
if (error)
|
if (error)
|
||||||
goto fail_vfsop;
|
goto fail_vfsop;
|
||||||
|
|
||||||
error = xfs_statvfs(mp, &statvfs, NULL);
|
|
||||||
if (error)
|
|
||||||
goto fail_unmount;
|
|
||||||
|
|
||||||
sb->s_dirt = 1;
|
sb->s_dirt = 1;
|
||||||
sb->s_magic = statvfs.f_type;
|
sb->s_magic = XFS_SB_MAGIC;
|
||||||
sb->s_blocksize = statvfs.f_bsize;
|
sb->s_blocksize = mp->m_sb.sb_blocksize;
|
||||||
sb->s_blocksize_bits = ffs(statvfs.f_bsize) - 1;
|
sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1;
|
||||||
sb->s_maxbytes = xfs_max_file_offset(sb->s_blocksize_bits);
|
sb->s_maxbytes = xfs_max_file_offset(sb->s_blocksize_bits);
|
||||||
sb->s_time_gran = 1;
|
sb->s_time_gran = 1;
|
||||||
set_posix_acl_flag(sb);
|
set_posix_acl_flag(sb);
|
||||||
|
@ -838,59 +838,6 @@ xfs_root(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* xfs_statvfs
|
|
||||||
*
|
|
||||||
* Fill in the statvfs structure for the given file system. We use
|
|
||||||
* the superblock lock in the mount structure to ensure a consistent
|
|
||||||
* snapshot of the counters returned.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
xfs_statvfs(
|
|
||||||
xfs_mount_t *mp,
|
|
||||||
bhv_statvfs_t *statp,
|
|
||||||
bhv_vnode_t *vp)
|
|
||||||
{
|
|
||||||
__uint64_t fakeinos;
|
|
||||||
xfs_extlen_t lsize;
|
|
||||||
xfs_sb_t *sbp;
|
|
||||||
|
|
||||||
sbp = &(mp->m_sb);
|
|
||||||
|
|
||||||
statp->f_type = XFS_SB_MAGIC;
|
|
||||||
|
|
||||||
xfs_icsb_sync_counters_flags(mp, XFS_ICSB_LAZY_COUNT);
|
|
||||||
spin_lock(&mp->m_sb_lock);
|
|
||||||
statp->f_bsize = sbp->sb_blocksize;
|
|
||||||
lsize = sbp->sb_logstart ? sbp->sb_logblocks : 0;
|
|
||||||
statp->f_blocks = sbp->sb_dblocks - lsize;
|
|
||||||
statp->f_bfree = statp->f_bavail =
|
|
||||||
sbp->sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp);
|
|
||||||
fakeinos = statp->f_bfree << sbp->sb_inopblog;
|
|
||||||
#if XFS_BIG_INUMS
|
|
||||||
fakeinos += mp->m_inoadd;
|
|
||||||
#endif
|
|
||||||
statp->f_files =
|
|
||||||
MIN(sbp->sb_icount + fakeinos, (__uint64_t)XFS_MAXINUMBER);
|
|
||||||
if (mp->m_maxicount)
|
|
||||||
#if XFS_BIG_INUMS
|
|
||||||
if (!mp->m_inoadd)
|
|
||||||
#endif
|
|
||||||
statp->f_files = min_t(typeof(statp->f_files),
|
|
||||||
statp->f_files,
|
|
||||||
mp->m_maxicount);
|
|
||||||
statp->f_ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree);
|
|
||||||
spin_unlock(&mp->m_sb_lock);
|
|
||||||
|
|
||||||
xfs_statvfs_fsid(statp, mp);
|
|
||||||
statp->f_namelen = MAXNAMELEN - 1;
|
|
||||||
|
|
||||||
if (vp)
|
|
||||||
XFS_QM_DQSTATVFS(xfs_vtoi(vp), statp);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* xfs_sync flushes any pending I/O to file system vfsp.
|
* xfs_sync flushes any pending I/O to file system vfsp.
|
||||||
*
|
*
|
||||||
|
@ -14,8 +14,6 @@ int xfs_unmount(struct xfs_mount *mp, int flags, struct cred *credp);
|
|||||||
int xfs_mntupdate(struct xfs_mount *mp, int *flags,
|
int xfs_mntupdate(struct xfs_mount *mp, int *flags,
|
||||||
struct xfs_mount_args *args);
|
struct xfs_mount_args *args);
|
||||||
int xfs_root(struct xfs_mount *mp, bhv_vnode_t **vpp);
|
int xfs_root(struct xfs_mount *mp, bhv_vnode_t **vpp);
|
||||||
int xfs_statvfs(struct xfs_mount *mp, struct kstatfs *statp,
|
|
||||||
bhv_vnode_t *vp);
|
|
||||||
int xfs_sync(struct xfs_mount *mp, int flags);
|
int xfs_sync(struct xfs_mount *mp, int flags);
|
||||||
int xfs_vget(struct xfs_mount *mp, bhv_vnode_t **vpp, struct xfs_fid *xfid);
|
int xfs_vget(struct xfs_mount *mp, bhv_vnode_t **vpp, struct xfs_fid *xfid);
|
||||||
int xfs_parseargs(struct xfs_mount *mp, char *options,
|
int xfs_parseargs(struct xfs_mount *mp, char *options,
|
||||||
|
Loading…
Reference in New Issue
Block a user