diff options
author | Christoph Hellwig <hch@infradead.org> | 2007-10-11 04:09:40 -0400 |
---|---|---|
committer | Lachlan McIlroy <lachlan@redback.melbourne.sgi.com> | 2008-02-07 00:53:27 -0500 |
commit | 4ca488eb45692520f745f96abc00ea4e268a87d4 (patch) | |
tree | 525662017ca7cfdc45b9d62f01e045d1da999e4a /fs/xfs/linux-2.6/xfs_super.c | |
parent | c43f408795c3210c9f5c925e4a49dbb93d41bb57 (diff) |
[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>
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_super.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_super.c | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 400ed2f20717..c0549737f7ea 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
@@ -681,8 +681,44 @@ xfs_fs_statfs( | |||
681 | struct dentry *dentry, | 681 | struct dentry *dentry, |
682 | struct kstatfs *statp) | 682 | struct kstatfs *statp) |
683 | { | 683 | { |
684 | return -xfs_statvfs(XFS_M(dentry->d_sb), statp, | 684 | struct xfs_mount *mp = XFS_M(dentry->d_sb); |
685 | vn_from_inode(dentry->d_inode)); | 685 | xfs_sb_t *sbp = &mp->m_sb; |
686 | __uint64_t fakeinos, id; | ||
687 | xfs_extlen_t lsize; | ||
688 | |||
689 | statp->f_type = XFS_SB_MAGIC; | ||
690 | statp->f_namelen = MAXNAMELEN - 1; | ||
691 | |||
692 | id = huge_encode_dev(mp->m_ddev_targp->bt_dev); | ||
693 | statp->f_fsid.val[0] = (u32)id; | ||
694 | statp->f_fsid.val[1] = (u32)(id >> 32); | ||
695 | |||
696 | xfs_icsb_sync_counters_flags(mp, XFS_ICSB_LAZY_COUNT); | ||
697 | |||
698 | spin_lock(&mp->m_sb_lock); | ||
699 | statp->f_bsize = sbp->sb_blocksize; | ||
700 | lsize = sbp->sb_logstart ? sbp->sb_logblocks : 0; | ||
701 | statp->f_blocks = sbp->sb_dblocks - lsize; | ||
702 | statp->f_bfree = statp->f_bavail = | ||
703 | sbp->sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp); | ||
704 | fakeinos = statp->f_bfree << sbp->sb_inopblog; | ||
705 | #if XFS_BIG_INUMS | ||
706 | fakeinos += mp->m_inoadd; | ||
707 | #endif | ||
708 | statp->f_files = | ||
709 | MIN(sbp->sb_icount + fakeinos, (__uint64_t)XFS_MAXINUMBER); | ||
710 | if (mp->m_maxicount) | ||
711 | #if XFS_BIG_INUMS | ||
712 | if (!mp->m_inoadd) | ||
713 | #endif | ||
714 | statp->f_files = min_t(typeof(statp->f_files), | ||
715 | statp->f_files, | ||
716 | mp->m_maxicount); | ||
717 | statp->f_ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree); | ||
718 | spin_unlock(&mp->m_sb_lock); | ||
719 | |||
720 | XFS_QM_DQSTATVFS(XFS_I(dentry->d_inode), statp); | ||
721 | return 0; | ||
686 | } | 722 | } |
687 | 723 | ||
688 | STATIC int | 724 | STATIC int |
@@ -777,7 +813,6 @@ xfs_fs_fill_super( | |||
777 | struct inode *rootvp; | 813 | struct inode *rootvp; |
778 | struct xfs_mount *mp = NULL; | 814 | struct xfs_mount *mp = NULL; |
779 | struct xfs_mount_args *args = xfs_args_allocate(sb, silent); | 815 | struct xfs_mount_args *args = xfs_args_allocate(sb, silent); |
780 | struct kstatfs statvfs; | ||
781 | int error; | 816 | int error; |
782 | 817 | ||
783 | mp = xfs_mount_init(); | 818 | mp = xfs_mount_init(); |
@@ -805,14 +840,10 @@ xfs_fs_fill_super( | |||
805 | if (error) | 840 | if (error) |
806 | goto fail_vfsop; | 841 | goto fail_vfsop; |
807 | 842 | ||
808 | error = xfs_statvfs(mp, &statvfs, NULL); | ||
809 | if (error) | ||
810 | goto fail_unmount; | ||
811 | |||
812 | sb->s_dirt = 1; | 843 | sb->s_dirt = 1; |
813 | sb->s_magic = statvfs.f_type; | 844 | sb->s_magic = XFS_SB_MAGIC; |
814 | sb->s_blocksize = statvfs.f_bsize; | 845 | sb->s_blocksize = mp->m_sb.sb_blocksize; |
815 | sb->s_blocksize_bits = ffs(statvfs.f_bsize) - 1; | 846 | sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1; |
816 | sb->s_maxbytes = xfs_max_file_offset(sb->s_blocksize_bits); | 847 | sb->s_maxbytes = xfs_max_file_offset(sb->s_blocksize_bits); |
817 | sb->s_time_gran = 1; | 848 | sb->s_time_gran = 1; |
818 | set_posix_acl_flag(sb); | 849 | set_posix_acl_flag(sb); |