diff --git a/kmod/src/block.c b/kmod/src/block.c index 786bcc2d..69eb0b57 100644 --- a/kmod/src/block.c +++ b/kmod/src/block.c @@ -677,7 +677,7 @@ out: int scoutfs_block_read_ref(struct super_block *sb, struct scoutfs_block_ref *ref, u32 magic, struct scoutfs_block **bl_ret) { - struct scoutfs_super_block *super = &SCOUTFS_SB(sb)->super; + struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb); struct scoutfs_block_header *hdr; struct block_private *bp = NULL; bool retried = false; @@ -701,7 +701,7 @@ retry: set_bit(BLOCK_BIT_CRC_VALID, &bp->bits); } - if (hdr->magic != cpu_to_le32(magic) || hdr->fsid != super->hdr.fsid || + if (hdr->magic != cpu_to_le32(magic) || hdr->fsid != cpu_to_le64(sbi->fsid) || hdr->seq != ref->seq || hdr->blkno != ref->blkno) { ret = -ESTALE; goto out; @@ -797,7 +797,7 @@ int scoutfs_block_dirty_ref(struct super_block *sb, struct scoutfs_alloc *alloc, u32 magic, struct scoutfs_block **bl_ret, u64 dirty_blkno, u64 *ref_blkno) { - struct scoutfs_super_block *super = &SCOUTFS_SB(sb)->super; + struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb); struct scoutfs_block *cow_bl = NULL; struct scoutfs_block *bl = NULL; struct block_private *exist_bp = NULL; @@ -865,7 +865,7 @@ int scoutfs_block_dirty_ref(struct super_block *sb, struct scoutfs_alloc *alloc, hdr = bl->data; hdr->magic = cpu_to_le32(magic); - hdr->fsid = super->hdr.fsid; + hdr->fsid = cpu_to_le64(sbi->fsid); hdr->blkno = cpu_to_le64(bl->blkno); prandom_bytes(&hdr->seq, sizeof(hdr->seq)); diff --git a/kmod/src/client.c b/kmod/src/client.c index 0f1006d0..643b5693 100644 --- a/kmod/src/client.c +++ b/kmod/src/client.c @@ -356,7 +356,6 @@ static int client_greeting(struct super_block *sb, { struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb); struct client_info *client = sbi->client_info; - struct scoutfs_super_block *super = &SCOUTFS_SB(sb)->super; struct scoutfs_net_greeting *gr = resp; bool new_server; int ret; @@ -371,9 +370,9 @@ static int client_greeting(struct super_block *sb, goto out; } - if (gr->fsid != super->hdr.fsid) { + if (gr->fsid != cpu_to_le64(sbi->fsid)) { scoutfs_warn(sb, "server greeting response fsid 0x%llx did not match client fsid 0x%llx", - le64_to_cpu(gr->fsid), le64_to_cpu(super->hdr.fsid)); + le64_to_cpu(gr->fsid), sbi->fsid); ret = -EINVAL; goto out; } @@ -476,7 +475,6 @@ static void scoutfs_client_connect_worker(struct work_struct *work) connect_dwork.work); struct super_block *sb = client->sb; struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb); - struct scoutfs_super_block *super = &sbi->super; struct scoutfs_mount_options opts; struct scoutfs_net_greeting greet; struct sockaddr_in sin; @@ -508,7 +506,7 @@ static void scoutfs_client_connect_worker(struct work_struct *work) goto out; /* send a greeting to verify endpoints of each connection */ - greet.fsid = super->hdr.fsid; + greet.fsid = cpu_to_le64(sbi->fsid); greet.fmt_vers = cpu_to_le64(sbi->fmt_vers); greet.server_term = cpu_to_le64(client->server_term); greet.rid = cpu_to_le64(sbi->rid); diff --git a/kmod/src/quorum.c b/kmod/src/quorum.c index 34daa105..04ed06cb 100644 --- a/kmod/src/quorum.c +++ b/kmod/src/quorum.c @@ -342,7 +342,7 @@ static int read_quorum_block(struct super_block *sb, u64 blkno, struct scoutfs_q bool check_rid) { struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb); - struct scoutfs_super_block *super = &sbi->super; + const u64 fsid = sbi->fsid; const u64 rid = sbi->rid; char msg[150]; __le32 crc; @@ -367,9 +367,9 @@ static int read_quorum_block(struct super_block *sb, u64 blkno, struct scoutfs_q else if (le32_to_cpu(blk->hdr.magic) != SCOUTFS_BLOCK_MAGIC_QUORUM) snprintf(msg, sizeof(msg), "blk magic %08x != %08x", le32_to_cpu(blk->hdr.magic), SCOUTFS_BLOCK_MAGIC_QUORUM); - else if (blk->hdr.fsid != super->hdr.fsid) + else if (blk->hdr.fsid != cpu_to_le64(fsid)) snprintf(msg, sizeof(msg), "blk fsid %016llx != %016llx", - le64_to_cpu(blk->hdr.fsid), le64_to_cpu(super->hdr.fsid)); + le64_to_cpu(blk->hdr.fsid), fsid); else if (le64_to_cpu(blk->hdr.blkno) != blkno) snprintf(msg, sizeof(msg), "blk blkno %llu != %llu", le64_to_cpu(blk->hdr.blkno), blkno); diff --git a/kmod/src/server.c b/kmod/src/server.c index 17f38481..10e2bed3 100644 --- a/kmod/src/server.c +++ b/kmod/src/server.c @@ -3554,10 +3554,9 @@ static int server_greeting(struct super_block *sb, goto send_err; } - if (gr->fsid != super->hdr.fsid) { + if (gr->fsid != cpu_to_le64(sbi->fsid)) { scoutfs_warn(sb, "client rid %016llx greeting fsid 0x%llx did not match server fsid 0x%llx", - le64_to_cpu(gr->rid), le64_to_cpu(gr->fsid), - le64_to_cpu(super->hdr.fsid)); + le64_to_cpu(gr->rid), le64_to_cpu(gr->fsid), sbi->fsid); ret = -EINVAL; goto send_err; } diff --git a/kmod/src/super.c b/kmod/src/super.c index 9cc68869..3ca16d0a 100644 --- a/kmod/src/super.c +++ b/kmod/src/super.c @@ -461,7 +461,7 @@ static int scoutfs_read_supers(struct super_block *sb) goto out; } - + sbi->fsid = le64_to_cpu(meta_super->hdr.fsid); sbi->fmt_vers = le64_to_cpu(meta_super->fmt_vers); sbi->super = *meta_super; out: diff --git a/kmod/src/super.h b/kmod/src/super.h index 3d3cd3d2..e3ab11e3 100644 --- a/kmod/src/super.h +++ b/kmod/src/super.h @@ -35,6 +35,7 @@ struct scoutfs_sb_info { struct super_block *sb; /* assigned once at the start of each mount, read-only */ + u64 fsid; u64 rid; u64 fmt_vers; @@ -135,14 +136,14 @@ static inline bool scoutfs_unmounting(struct super_block *sb) (int)(le64_to_cpu(fsid) >> SCSB_SHIFT), \ (int)(le64_to_cpu(rid) >> SCSB_SHIFT) #define SCSB_ARGS(sb) \ - (int)(le64_to_cpu(SCOUTFS_SB(sb)->super.hdr.fsid) >> SCSB_SHIFT), \ + (int)(SCOUTFS_SB(sb)->fsid >> SCSB_SHIFT), \ (int)(SCOUTFS_SB(sb)->rid >> SCSB_SHIFT) #define SCSB_TRACE_FIELDS \ __field(__u64, fsid) \ __field(__u64, rid) #define SCSB_TRACE_ASSIGN(sb) \ __entry->fsid = SCOUTFS_HAS_SBI(sb) ? \ - le64_to_cpu(SCOUTFS_SB(sb)->super.hdr.fsid) : 0;\ + SCOUTFS_SB(sb)->fsid : 0; \ __entry->rid = SCOUTFS_HAS_SBI(sb) ? \ SCOUTFS_SB(sb)->rid : 0; #define SCSB_TRACE_ARGS \ diff --git a/kmod/src/sysfs.c b/kmod/src/sysfs.c index e429a5e5..34fb4a64 100644 --- a/kmod/src/sysfs.c +++ b/kmod/src/sysfs.c @@ -60,10 +60,9 @@ static ssize_t fsid_show(struct kobject *kobj, struct attribute *attr, char *buf) { struct super_block *sb = KOBJ_TO_SB(kobj, sb_id_kobj); - struct scoutfs_super_block *super = &SCOUTFS_SB(sb)->super; + struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb); - return snprintf(buf, PAGE_SIZE, "%016llx\n", - le64_to_cpu(super->hdr.fsid)); + return snprintf(buf, PAGE_SIZE, "%016llx\n", sbi->fsid); } ATTR_FUNCS_RO(fsid);