diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/adfs/adfs.h | 2 | ||||
-rw-r--r-- | fs/adfs/map.c | 10 | ||||
-rw-r--r-- | fs/adfs/super.c | 7 |
3 files changed, 10 insertions, 9 deletions
diff --git a/fs/adfs/adfs.h b/fs/adfs/adfs.h index d23c84aeb6dd..45fd48fbd5e0 100644 --- a/fs/adfs/adfs.h +++ b/fs/adfs/adfs.h @@ -145,7 +145,7 @@ int adfs_notify_change(struct dentry *dentry, struct iattr *attr); /* map.c */ int adfs_map_lookup(struct super_block *sb, u32 frag_id, unsigned int offset); -extern unsigned int adfs_map_free(struct super_block *sb); +void adfs_map_statfs(struct super_block *sb, struct kstatfs *buf); struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_discrecord *dr); /* Misc */ diff --git a/fs/adfs/map.c b/fs/adfs/map.c index 120e01451e75..c322d37e8f91 100644 --- a/fs/adfs/map.c +++ b/fs/adfs/map.c @@ -5,6 +5,7 @@ * Copyright (C) 1997-2002 Russell King */ #include <linux/slab.h> +#include <linux/statfs.h> #include <asm/unaligned.h> #include "adfs.h" @@ -221,10 +222,10 @@ found: * total_free = E(free_in_zone_n) * nzones */ -unsigned int -adfs_map_free(struct super_block *sb) +void adfs_map_statfs(struct super_block *sb, struct kstatfs *buf) { struct adfs_sb_info *asb = ADFS_SB(sb); + struct adfs_discrecord *dr = adfs_map_discrecord(asb->s_map); struct adfs_discmap *dm; unsigned int total = 0; unsigned int zone; @@ -236,7 +237,10 @@ adfs_map_free(struct super_block *sb) total += scan_free_map(asb, dm++); } while (--zone > 0); - return signed_asl(total, asb->s_map2blk); + buf->f_blocks = adfs_disc_size(dr) >> sb->s_blocksize_bits; + buf->f_files = asb->s_ids_per_zone * asb->s_map_size; + buf->f_bavail = + buf->f_bfree = signed_asl(total, asb->s_map2blk); } int adfs_map_lookup(struct super_block *sb, u32 frag_id, unsigned int offset) diff --git a/fs/adfs/super.c b/fs/adfs/super.c index 4091adb2c7ff..458824e0ca83 100644 --- a/fs/adfs/super.c +++ b/fs/adfs/super.c @@ -204,16 +204,13 @@ static int adfs_statfs(struct dentry *dentry, struct kstatfs *buf) { struct super_block *sb = dentry->d_sb; struct adfs_sb_info *sbi = ADFS_SB(sb); - struct adfs_discrecord *dr = adfs_map_discrecord(sbi->s_map); u64 id = huge_encode_dev(sb->s_bdev->bd_dev); + adfs_map_statfs(sb, buf); + buf->f_type = ADFS_SUPER_MAGIC; buf->f_namelen = sbi->s_namelen; buf->f_bsize = sb->s_blocksize; - buf->f_blocks = adfs_disc_size(dr) >> sb->s_blocksize_bits; - buf->f_files = sbi->s_ids_per_zone * sbi->s_map_size; - buf->f_bavail = - buf->f_bfree = adfs_map_free(sb); buf->f_ffree = (long)(buf->f_bfree * buf->f_files) / (long)buf->f_blocks; buf->f_fsid.val[0] = (u32)id; buf->f_fsid.val[1] = (u32)(id >> 32); |