kill xfs_statvfs
PATCH 2/2 kill xfs_statvfs
Kill 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.
fs/xfs/linux-2.6/xfs_super.c +41 -10
@@ -664,8 +664,44 @@ xfs_fs_statfs(struct dentry *dentry, struct kstatfs *statp) { - return -xfs_statvfs(XFS_M(dentry->d_sb), statp, - vn_from_inode(dentry->d_inode)); + struct xfs_mount *mp = XFS_M(dentry->d_sb); +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_vtoi (dentry->d_inode), statp); +return 0 ; }STATIC int
@@ -768,7 +804,6 @@ xfs_fs_fill_super(struct inode *rootvp;struct xfs_mount *mp =NULL ;struct xfs_mount_args *args =xfs_args_allocate (sb, silent); -struct kstatfs statvfs;int error; mp =xfs_mount_init ();
@@ -796,14 +831,10 @@ xfs_fs_fill_super(if (error) goto fail_vfsop; - error =xfs_statvfs (mp, &statvfs,NULL ); -if (error) - goto fail_unmount; - sb->s_dirt =1 ; - sb->s_magic = statvfs.f_type; - sb->s_blocksize = statvfs.f_bsize; - sb->s_blocksize_bits =ffs (statvfs.f_bsize) -1 ; + sb->s_magic =XFS_SB_MAGIC ; + sb->s_blocksize = mp->m_sb.sb_blocksize; + sb->s_blocksize_bits =ffs (sb->s_blocksize) -1 ; sb->s_maxbytes =xfs_max_file_offset (sb->s_blocksize_bits); sb->s_time_gran =1 ;set_posix_acl_flag (sb);
fs/xfs/xfs_vfsops.c +0 -53
59 lines not on this page · raw message
fs/xfs/xfs_vfsops.h +0 -2
@@ -14,8 +14,6 @@ int xfs_unmount(struct xfs_mount *mp, inint xfs_mntupdate (struct xfs_mount *mp,int *flags,struct xfs_mount_args *args);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_vget (struct xfs_mount *mp,bhv_vnode_t **vpp,struct xfs_fid *xfid); int xfs_parseargs(struct xfs_mount *mp, char *options,
fs/xfs/linux-2.6/xfs_linux.h +0 -4
@@ -212,10 +212,6 @@#define xfs_stack_trace () dump_stack()#define xfs_itruncate_data (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 */
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 6 lines · Timothy Shimmin
I think I'd prefer:
Review
Quoted 1 line
(quoted diff) +1
-0+ XFS_QM_DQSTATVFS(XFS_I(dentry->d_inode), statp);instead of:
Review
Quoted 1 line
(quoted diff) +1
-0+ XFS_QM_DQSTATVFS(xfs_vtoi(dentry->d_inode), statp);which I found confusing.
I agree, here's an updated version:
fs/xfs/linux-2.6/xfs_super.c +41 -10
@@ -664,8 +664,44 @@ xfs_fs_statfs(struct dentry *dentry, struct kstatfs *statp) { - return -xfs_statvfs(XFS_M(dentry->d_sb), statp, - vn_from_inode(dentry->d_inode)); + struct xfs_mount *mp = XFS_M(dentry->d_sb); +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
@@ -768,7 +804,6 @@ xfs_fs_fill_super(struct inode *rootvp;struct xfs_mount *mp =NULL ;struct xfs_mount_args *args =xfs_args_allocate (sb, silent); -struct kstatfs statvfs;int error; mp =xfs_mount_init ();
@@ -796,14 +831,10 @@ xfs_fs_fill_super(if (error) goto fail_vfsop; - error =xfs_statvfs (mp, &statvfs,NULL ); -if (error) - goto fail_unmount; - sb->s_dirt =1 ; - sb->s_magic = statvfs.f_type; - sb->s_blocksize = statvfs.f_bsize; - sb->s_blocksize_bits =ffs (statvfs.f_bsize) -1 ; + sb->s_magic =XFS_SB_MAGIC ; + sb->s_blocksize = mp->m_sb.sb_blocksize; + sb->s_blocksize_bits =ffs (sb->s_blocksize) -1 ; sb->s_maxbytes =xfs_max_file_offset (sb->s_blocksize_bits); sb->s_time_gran =1 ;set_posix_acl_flag (sb);
fs/xfs/xfs_vfsops.c +0 -53
59 lines not on this page · raw message
fs/xfs/xfs_vfsops.h +0 -2
@@ -14,8 +14,6 @@ int xfs_unmount(struct xfs_mount *mp, inint xfs_mntupdate (struct xfs_mount *mp,int *flags,struct xfs_mount_args *args);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_vget (struct xfs_mount *mp,bhv_vnode_t **vpp,struct xfs_fid *xfid); int xfs_parseargs(struct xfs_mount *mp, char *options,
fs/xfs/linux-2.6/xfs_linux.h +0 -4
@@ -212,10 +212,6 @@#define xfs_stack_trace () dump_stack()#define xfs_itruncate_data (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 */