fs: introduce a wrapper uuid_to_fsid()
ANBZ: #9244
commit 9591c3a34f
upstream
Some filesystem's use a digest of their uuid for f_fsid.
Create a simple wrapper for this open coded folding.
Filesystems that have a non null uuid but use the block device
number for f_fsid may also consider using this helper.
[JK: Added missing asm/byteorder.h include]
Link: https://lore.kernel.org/r/20210322173944.449469-2-amir73il@gmail.com
Acked-by: Damien Le Moal <damien.lemoal@wdc.com>
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com>
Link: https://gitee.com/anolis/cloud-kernel/pulls/3285
This commit is contained in:
parent
8ccf41c65e
commit
90a49ee0d1
|
@ -1403,7 +1403,6 @@ static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf)
|
|||
struct super_block *sb = dentry->d_sb;
|
||||
struct ext2_sb_info *sbi = EXT2_SB(sb);
|
||||
struct ext2_super_block *es = sbi->s_es;
|
||||
u64 fsid;
|
||||
|
||||
spin_lock(&sbi->s_lock);
|
||||
|
||||
|
@ -1457,9 +1456,7 @@ static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf)
|
|||
buf->f_ffree = ext2_count_free_inodes(sb);
|
||||
es->s_free_inodes_count = cpu_to_le32(buf->f_ffree);
|
||||
buf->f_namelen = EXT2_NAME_LEN;
|
||||
fsid = le64_to_cpup((void *)es->s_uuid) ^
|
||||
le64_to_cpup((void *)es->s_uuid + sizeof(u64));
|
||||
buf->f_fsid = u64_to_fsid(fsid);
|
||||
buf->f_fsid = uuid_to_fsid(es->s_uuid);
|
||||
spin_unlock(&sbi->s_lock);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -6190,7 +6190,6 @@ static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|||
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
||||
struct ext4_super_block *es = sbi->s_es;
|
||||
ext4_fsblk_t overhead = 0, resv_blocks;
|
||||
u64 fsid;
|
||||
s64 bfree;
|
||||
resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters));
|
||||
|
||||
|
@ -6211,9 +6210,7 @@ static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|||
buf->f_files = le32_to_cpu(es->s_inodes_count);
|
||||
buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter);
|
||||
buf->f_namelen = EXT4_NAME_LEN;
|
||||
fsid = le64_to_cpup((void *)es->s_uuid) ^
|
||||
le64_to_cpup((void *)es->s_uuid + sizeof(u64));
|
||||
buf->f_fsid = u64_to_fsid(fsid);
|
||||
buf->f_fsid = uuid_to_fsid(es->s_uuid);
|
||||
|
||||
#ifdef CONFIG_QUOTA
|
||||
if (ext4_test_inode_flag(dentry->d_inode, EXT4_INODE_PROJINHERIT) &&
|
||||
|
|
|
@ -1213,7 +1213,6 @@ static int zonefs_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|||
struct super_block *sb = dentry->d_sb;
|
||||
struct zonefs_sb_info *sbi = ZONEFS_SB(sb);
|
||||
enum zonefs_ztype t;
|
||||
u64 fsid;
|
||||
|
||||
buf->f_type = ZONEFS_MAGIC;
|
||||
buf->f_bsize = sb->s_blocksize;
|
||||
|
@ -1236,9 +1235,7 @@ static int zonefs_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|||
|
||||
spin_unlock(&sbi->s_lock);
|
||||
|
||||
fsid = le64_to_cpup((void *)sbi->s_uuid.b) ^
|
||||
le64_to_cpup((void *)sbi->s_uuid.b + sizeof(u64));
|
||||
buf->f_fsid = u64_to_fsid(fsid);
|
||||
buf->f_fsid = uuid_to_fsid(sbi->s_uuid.b);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
#include <asm/statfs.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
struct kstatfs {
|
||||
long f_type;
|
||||
|
@ -50,4 +51,11 @@ static inline __kernel_fsid_t u64_to_fsid(u64 v)
|
|||
return (__kernel_fsid_t){.val = {(u32)v, (u32)(v>>32)}};
|
||||
}
|
||||
|
||||
/* Fold 16 bytes uuid to 64 bit fsid */
|
||||
static inline __kernel_fsid_t uuid_to_fsid(__u8 *uuid)
|
||||
{
|
||||
return u64_to_fsid(le64_to_cpup((void *)uuid) ^
|
||||
le64_to_cpup((void *)(uuid + sizeof(u64))));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue