mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 18:39:59 +00:00
fs/adfs: add helper to get filesystem size
Add a helper to get the filesystem size from the disc record and eliminate the "s_size" member of the adfs superblock structure. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
1dfdfc9473
commit
275f5b99d6
2 changed files with 9 additions and 15 deletions
|
@ -58,7 +58,6 @@ struct adfs_sb_info {
|
|||
__u32 s_ids_per_zone; /* max. no ids in one zone */
|
||||
__u32 s_idlen; /* length of ID in map */
|
||||
__u32 s_map_size; /* sector size of a map */
|
||||
unsigned long s_size; /* total size (in blocks) of this fs */
|
||||
signed int s_map2blk; /* shift left by this for map->sector*/
|
||||
unsigned int s_log2sharesize;/* log2 share size */
|
||||
__le32 s_version; /* disc format version */
|
||||
|
@ -201,3 +200,9 @@ struct adfs_discrecord *adfs_map_discrecord(struct adfs_discmap *dm)
|
|||
{
|
||||
return (void *)(dm[0].dm_bh->b_data + 4);
|
||||
}
|
||||
|
||||
static inline u64 adfs_disc_size(const struct adfs_discrecord *dr)
|
||||
{
|
||||
return (u64)le32_to_cpu(dr->disc_size_high) << 32 |
|
||||
le32_to_cpu(dr->disc_size);
|
||||
}
|
||||
|
|
|
@ -220,12 +220,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);
|
||||
|
||||
buf->f_type = ADFS_SUPER_MAGIC;
|
||||
buf->f_namelen = sbi->s_namelen;
|
||||
buf->f_bsize = sb->s_blocksize;
|
||||
buf->f_blocks = sbi->s_size;
|
||||
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);
|
||||
|
@ -329,8 +330,7 @@ static struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_di
|
|||
i = zone - 1;
|
||||
dm[0].dm_startblk = 0;
|
||||
dm[0].dm_startbit = ADFS_DR_SIZE_BITS;
|
||||
dm[i].dm_endbit = (le32_to_cpu(dr->disc_size_high) << (32 - dr->log2bpmb)) +
|
||||
(le32_to_cpu(dr->disc_size) >> dr->log2bpmb) +
|
||||
dm[i].dm_endbit = (adfs_disc_size(dr) >> dr->log2bpmb) +
|
||||
(ADFS_DR_SIZE_BITS - i * zone_size);
|
||||
|
||||
if (adfs_checkmap(sb, dm))
|
||||
|
@ -346,16 +346,6 @@ static struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_di
|
|||
return ERR_PTR(-EIO);
|
||||
}
|
||||
|
||||
static inline unsigned long adfs_discsize(struct adfs_discrecord *dr, int block_bits)
|
||||
{
|
||||
unsigned long discsize;
|
||||
|
||||
discsize = le32_to_cpu(dr->disc_size_high) << (32 - block_bits);
|
||||
discsize |= le32_to_cpu(dr->disc_size) >> block_bits;
|
||||
|
||||
return discsize;
|
||||
}
|
||||
|
||||
static int adfs_fill_super(struct super_block *sb, void *data, int silent)
|
||||
{
|
||||
struct adfs_discrecord *dr;
|
||||
|
@ -445,7 +435,6 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
|
|||
asb->s_idlen = dr->idlen;
|
||||
asb->s_map_size = dr->nzones | (dr->nzones_high << 8);
|
||||
asb->s_map2blk = dr->log2bpmb - dr->log2secsize;
|
||||
asb->s_size = adfs_discsize(dr, sb->s_blocksize_bits);
|
||||
asb->s_version = dr->format_version;
|
||||
asb->s_log2sharesize = dr->log2sharesize;
|
||||
|
||||
|
|
Loading…
Reference in a new issue