Commit 85787090 authored by Christoph Hellwig's avatar Christoph Hellwig

fs: switch ->s_uuid to uuid_t

For some file systems we still memcpy into it, but in various places this
already allows us to use the proper uuid helpers.  More to come..
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarAmir Goldstein <amir73il@gmail.com>
Acked-by: Mimi Zohar <zohar@linux.vnet.ibm.com> (Changes to IMA/EVM)
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
parent 787d8c53
...@@ -233,12 +233,12 @@ static int tmem_cleancache_init_fs(size_t pagesize) ...@@ -233,12 +233,12 @@ static int tmem_cleancache_init_fs(size_t pagesize)
return xen_tmem_new_pool(uuid_private, 0, pagesize); return xen_tmem_new_pool(uuid_private, 0, pagesize);
} }
static int tmem_cleancache_init_shared_fs(char *uuid, size_t pagesize) static int tmem_cleancache_init_shared_fs(uuid_t *uuid, size_t pagesize)
{ {
struct tmem_pool_uuid shared_uuid; struct tmem_pool_uuid shared_uuid;
shared_uuid.uuid_lo = *(u64 *)uuid; shared_uuid.uuid_lo = *(u64 *)&uuid->b[0];
shared_uuid.uuid_hi = *(u64 *)(&uuid[8]); shared_uuid.uuid_hi = *(u64 *)&uuid->b[8];
return xen_tmem_new_pool(shared_uuid, TMEM_POOL_SHARED, pagesize); return xen_tmem_new_pool(shared_uuid, TMEM_POOL_SHARED, pagesize);
} }
......
...@@ -3952,7 +3952,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) ...@@ -3952,7 +3952,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
sb->s_qcop = &ext4_qctl_operations; sb->s_qcop = &ext4_qctl_operations;
sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ; sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
#endif #endif
memcpy(sb->s_uuid, es->s_uuid, sizeof(es->s_uuid)); memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid));
INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */ INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
mutex_init(&sbi->s_orphan_lock); mutex_init(&sbi->s_orphan_lock);
......
...@@ -1937,7 +1937,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1937,7 +1937,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
sb->s_time_gran = 1; sb->s_time_gran = 1;
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
(test_opt(sbi, POSIX_ACL) ? MS_POSIXACL : 0); (test_opt(sbi, POSIX_ACL) ? MS_POSIXACL : 0);
memcpy(sb->s_uuid, raw_super->uuid, sizeof(raw_super->uuid)); memcpy(&sb->s_uuid, raw_super->uuid, sizeof(raw_super->uuid));
/* init f2fs-specific super block info */ /* init f2fs-specific super block info */
sbi->valid_super_block = valid_super_block; sbi->valid_super_block = valid_super_block;
......
...@@ -203,7 +203,7 @@ static void gfs2_sb_in(struct gfs2_sbd *sdp, const void *buf) ...@@ -203,7 +203,7 @@ static void gfs2_sb_in(struct gfs2_sbd *sdp, const void *buf)
memcpy(sb->sb_lockproto, str->sb_lockproto, GFS2_LOCKNAME_LEN); memcpy(sb->sb_lockproto, str->sb_lockproto, GFS2_LOCKNAME_LEN);
memcpy(sb->sb_locktable, str->sb_locktable, GFS2_LOCKNAME_LEN); memcpy(sb->sb_locktable, str->sb_locktable, GFS2_LOCKNAME_LEN);
memcpy(s->s_uuid, str->sb_uuid, 16); memcpy(&s->s_uuid, str->sb_uuid, 16);
} }
/** /**
......
...@@ -71,25 +71,14 @@ static ssize_t fsname_show(struct gfs2_sbd *sdp, char *buf) ...@@ -71,25 +71,14 @@ static ssize_t fsname_show(struct gfs2_sbd *sdp, char *buf)
return snprintf(buf, PAGE_SIZE, "%s\n", sdp->sd_fsname); return snprintf(buf, PAGE_SIZE, "%s\n", sdp->sd_fsname);
} }
static int gfs2_uuid_valid(const u8 *uuid)
{
int i;
for (i = 0; i < 16; i++) {
if (uuid[i])
return 1;
}
return 0;
}
static ssize_t uuid_show(struct gfs2_sbd *sdp, char *buf) static ssize_t uuid_show(struct gfs2_sbd *sdp, char *buf)
{ {
struct super_block *s = sdp->sd_vfs; struct super_block *s = sdp->sd_vfs;
const u8 *uuid = s->s_uuid;
buf[0] = '\0'; buf[0] = '\0';
if (!gfs2_uuid_valid(uuid)) if (uuid_is_null(&s->s_uuid))
return 0; return 0;
return snprintf(buf, PAGE_SIZE, "%pUB\n", uuid); return snprintf(buf, PAGE_SIZE, "%pUB\n", &s->s_uuid);
} }
static ssize_t freeze_show(struct gfs2_sbd *sdp, char *buf) static ssize_t freeze_show(struct gfs2_sbd *sdp, char *buf)
...@@ -712,14 +701,13 @@ static int gfs2_uevent(struct kset *kset, struct kobject *kobj, ...@@ -712,14 +701,13 @@ static int gfs2_uevent(struct kset *kset, struct kobject *kobj,
{ {
struct gfs2_sbd *sdp = container_of(kobj, struct gfs2_sbd, sd_kobj); struct gfs2_sbd *sdp = container_of(kobj, struct gfs2_sbd, sd_kobj);
struct super_block *s = sdp->sd_vfs; struct super_block *s = sdp->sd_vfs;
const u8 *uuid = s->s_uuid;
add_uevent_var(env, "LOCKTABLE=%s", sdp->sd_table_name); add_uevent_var(env, "LOCKTABLE=%s", sdp->sd_table_name);
add_uevent_var(env, "LOCKPROTO=%s", sdp->sd_proto_name); add_uevent_var(env, "LOCKPROTO=%s", sdp->sd_proto_name);
if (!test_bit(SDF_NOJOURNALID, &sdp->sd_flags)) if (!test_bit(SDF_NOJOURNALID, &sdp->sd_flags))
add_uevent_var(env, "JOURNALID=%d", sdp->sd_lockstruct.ls_jid); add_uevent_var(env, "JOURNALID=%d", sdp->sd_lockstruct.ls_jid);
if (gfs2_uuid_valid(uuid)) if (!uuid_is_null(&s->s_uuid))
add_uevent_var(env, "UUID=%pUB", uuid); add_uevent_var(env, "UUID=%pUB", &s->s_uuid);
return 0; return 0;
} }
......
...@@ -2062,7 +2062,7 @@ static int ocfs2_initialize_super(struct super_block *sb, ...@@ -2062,7 +2062,7 @@ static int ocfs2_initialize_super(struct super_block *sb,
cbits = le32_to_cpu(di->id2.i_super.s_clustersize_bits); cbits = le32_to_cpu(di->id2.i_super.s_clustersize_bits);
bbits = le32_to_cpu(di->id2.i_super.s_blocksize_bits); bbits = le32_to_cpu(di->id2.i_super.s_blocksize_bits);
sb->s_maxbytes = ocfs2_max_file_offset(bbits, cbits); sb->s_maxbytes = ocfs2_max_file_offset(bbits, cbits);
memcpy(sb->s_uuid, di->id2.i_super.s_uuid, memcpy(&sb->s_uuid, di->id2.i_super.s_uuid,
sizeof(di->id2.i_super.s_uuid)); sizeof(di->id2.i_super.s_uuid));
osb->osb_dx_mask = (1 << (cbits - bbits)) - 1; osb->osb_dx_mask = (1 << (cbits - bbits)) - 1;
......
...@@ -284,7 +284,6 @@ static int ovl_set_origin(struct dentry *dentry, struct dentry *lower, ...@@ -284,7 +284,6 @@ static int ovl_set_origin(struct dentry *dentry, struct dentry *lower,
struct dentry *upper) struct dentry *upper)
{ {
struct super_block *sb = lower->d_sb; struct super_block *sb = lower->d_sb;
uuid_be *uuid = (uuid_be *) &sb->s_uuid;
const struct ovl_fh *fh = NULL; const struct ovl_fh *fh = NULL;
int err; int err;
...@@ -294,8 +293,8 @@ static int ovl_set_origin(struct dentry *dentry, struct dentry *lower, ...@@ -294,8 +293,8 @@ static int ovl_set_origin(struct dentry *dentry, struct dentry *lower,
* up and a pure upper inode. * up and a pure upper inode.
*/ */
if (sb->s_export_op && sb->s_export_op->fh_to_dentry && if (sb->s_export_op && sb->s_export_op->fh_to_dentry &&
uuid_be_cmp(*uuid, NULL_UUID_BE)) { !uuid_is_null(&sb->s_uuid)) {
fh = ovl_encode_fh(lower, uuid); fh = ovl_encode_fh(lower, &sb->s_uuid);
if (IS_ERR(fh)) if (IS_ERR(fh))
return PTR_ERR(fh); return PTR_ERR(fh);
} }
......
...@@ -135,7 +135,7 @@ static struct dentry *ovl_get_origin(struct dentry *dentry, ...@@ -135,7 +135,7 @@ static struct dentry *ovl_get_origin(struct dentry *dentry,
* Make sure that the stored uuid matches the uuid of the lower * Make sure that the stored uuid matches the uuid of the lower
* layer where file handle will be decoded. * layer where file handle will be decoded.
*/ */
if (uuid_be_cmp(fh->uuid, *(uuid_be *) &mnt->mnt_sb->s_uuid)) if (!uuid_equal(&fh->uuid, &mnt->mnt_sb->s_uuid))
goto out; goto out;
origin = exportfs_decode_fh(mnt, (struct fid *)fh->fid, origin = exportfs_decode_fh(mnt, (struct fid *)fh->fid,
......
...@@ -74,8 +74,7 @@ xfs_uuid_mount( ...@@ -74,8 +74,7 @@ xfs_uuid_mount(
int hole, i; int hole, i;
/* Publish UUID in struct super_block */ /* Publish UUID in struct super_block */
BUILD_BUG_ON(sizeof(mp->m_super->s_uuid) != sizeof(uuid_t)); uuid_copy(&mp->m_super->s_uuid, uuid);
memcpy(&mp->m_super->s_uuid, uuid, sizeof(uuid_t));
if (mp->m_flags & XFS_MOUNT_NOUUID) if (mp->m_flags & XFS_MOUNT_NOUUID)
return 0; return 0;
......
...@@ -27,7 +27,7 @@ struct cleancache_filekey { ...@@ -27,7 +27,7 @@ struct cleancache_filekey {
struct cleancache_ops { struct cleancache_ops {
int (*init_fs)(size_t); int (*init_fs)(size_t);
int (*init_shared_fs)(char *uuid, size_t); int (*init_shared_fs)(uuid_t *uuid, size_t);
int (*get_page)(int, struct cleancache_filekey, int (*get_page)(int, struct cleancache_filekey,
pgoff_t, struct page *); pgoff_t, struct page *);
void (*put_page)(int, struct cleancache_filekey, void (*put_page)(int, struct cleancache_filekey,
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/percpu-rwsem.h> #include <linux/percpu-rwsem.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/delayed_call.h> #include <linux/delayed_call.h>
#include <linux/uuid.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <uapi/linux/fs.h> #include <uapi/linux/fs.h>
...@@ -1328,8 +1329,8 @@ struct super_block { ...@@ -1328,8 +1329,8 @@ struct super_block {
struct sb_writers s_writers; struct sb_writers s_writers;
char s_id[32]; /* Informational name */ char s_id[32]; /* Informational name */
u8 s_uuid[16]; /* UUID */ uuid_t s_uuid; /* UUID */
void *s_fs_info; /* Filesystem private info */ void *s_fs_info; /* Filesystem private info */
unsigned int s_max_links; unsigned int s_max_links;
......
...@@ -130,7 +130,7 @@ void __cleancache_init_shared_fs(struct super_block *sb) ...@@ -130,7 +130,7 @@ void __cleancache_init_shared_fs(struct super_block *sb)
int pool_id = CLEANCACHE_NO_BACKEND_SHARED; int pool_id = CLEANCACHE_NO_BACKEND_SHARED;
if (cleancache_ops) { if (cleancache_ops) {
pool_id = cleancache_ops->init_shared_fs(sb->s_uuid, PAGE_SIZE); pool_id = cleancache_ops->init_shared_fs(&sb->s_uuid, PAGE_SIZE);
if (pool_id < 0) if (pool_id < 0)
pool_id = CLEANCACHE_NO_POOL; pool_id = CLEANCACHE_NO_POOL;
} }
......
...@@ -164,7 +164,7 @@ static void hmac_add_misc(struct shash_desc *desc, struct inode *inode, ...@@ -164,7 +164,7 @@ static void hmac_add_misc(struct shash_desc *desc, struct inode *inode,
hmac_misc.mode = inode->i_mode; hmac_misc.mode = inode->i_mode;
crypto_shash_update(desc, (const u8 *)&hmac_misc, sizeof(hmac_misc)); crypto_shash_update(desc, (const u8 *)&hmac_misc, sizeof(hmac_misc));
if (evm_hmac_attrs & EVM_ATTR_FSUUID) if (evm_hmac_attrs & EVM_ATTR_FSUUID)
crypto_shash_update(desc, inode->i_sb->s_uuid, crypto_shash_update(desc, &inode->i_sb->s_uuid.b[0],
sizeof(inode->i_sb->s_uuid)); sizeof(inode->i_sb->s_uuid));
crypto_shash_final(desc, digest); crypto_shash_final(desc, digest);
} }
......
...@@ -244,7 +244,7 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode, ...@@ -244,7 +244,7 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode,
&& rule->fsmagic != inode->i_sb->s_magic) && rule->fsmagic != inode->i_sb->s_magic)
return false; return false;
if ((rule->flags & IMA_FSUUID) && if ((rule->flags & IMA_FSUUID) &&
memcmp(&rule->fsuuid, inode->i_sb->s_uuid, sizeof(rule->fsuuid))) !uuid_equal(&rule->fsuuid, &inode->i_sb->s_uuid))
return false; return false;
if ((rule->flags & IMA_UID) && !rule->uid_op(cred->uid, rule->uid)) if ((rule->flags & IMA_UID) && !rule->uid_op(cred->uid, rule->uid))
return false; return false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment