forked from Minki/linux
bcache: use a separate data structure for the on-disk super block
Split out an on-disk version struct cache_sb with the proper endianness annotations. This fixes a fair chunk of sparse warnings, but there are some left due to the way the checksum is defined. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Coly Li <colyli@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
e8547d4209
commit
a702a692cd
@ -63,14 +63,14 @@ static const char *read_super(struct cache_sb *sb, struct block_device *bdev,
|
||||
struct page **res)
|
||||
{
|
||||
const char *err;
|
||||
struct cache_sb *s;
|
||||
struct cache_sb_disk *s;
|
||||
struct buffer_head *bh = __bread(bdev, 1, SB_SIZE);
|
||||
unsigned int i;
|
||||
|
||||
if (!bh)
|
||||
return "IO error";
|
||||
|
||||
s = (struct cache_sb *) bh->b_data;
|
||||
s = (struct cache_sb_disk *)bh->b_data;
|
||||
|
||||
sb->offset = le64_to_cpu(s->offset);
|
||||
sb->version = le64_to_cpu(s->version);
|
||||
@ -209,7 +209,7 @@ static void write_bdev_super_endio(struct bio *bio)
|
||||
|
||||
static void __write_super(struct cache_sb *sb, struct bio *bio)
|
||||
{
|
||||
struct cache_sb *out = page_address(bio_first_page_all(bio));
|
||||
struct cache_sb_disk *out = page_address(bio_first_page_all(bio));
|
||||
unsigned int i;
|
||||
|
||||
bio->bi_iter.bi_sector = SB_SECTOR;
|
||||
|
@ -156,6 +156,57 @@ static inline struct bkey *bkey_idx(const struct bkey *k, unsigned int nr_keys)
|
||||
|
||||
#define BDEV_DATA_START_DEFAULT 16 /* sectors */
|
||||
|
||||
struct cache_sb_disk {
|
||||
__le64 csum;
|
||||
__le64 offset; /* sector where this sb was written */
|
||||
__le64 version;
|
||||
|
||||
__u8 magic[16];
|
||||
|
||||
__u8 uuid[16];
|
||||
union {
|
||||
__u8 set_uuid[16];
|
||||
__le64 set_magic;
|
||||
};
|
||||
__u8 label[SB_LABEL_SIZE];
|
||||
|
||||
__le64 flags;
|
||||
__le64 seq;
|
||||
__le64 pad[8];
|
||||
|
||||
union {
|
||||
struct {
|
||||
/* Cache devices */
|
||||
__le64 nbuckets; /* device size */
|
||||
|
||||
__le16 block_size; /* sectors */
|
||||
__le16 bucket_size; /* sectors */
|
||||
|
||||
__le16 nr_in_set;
|
||||
__le16 nr_this_dev;
|
||||
};
|
||||
struct {
|
||||
/* Backing devices */
|
||||
__le64 data_offset;
|
||||
|
||||
/*
|
||||
* block_size from the cache device section is still used by
|
||||
* backing devices, so don't add anything here until we fix
|
||||
* things to not need it for backing devices anymore
|
||||
*/
|
||||
};
|
||||
};
|
||||
|
||||
__le32 last_mount; /* time overflow in y2106 */
|
||||
|
||||
__le16 first_bucket;
|
||||
union {
|
||||
__le16 njournal_buckets;
|
||||
__le16 keys;
|
||||
};
|
||||
__le64 d[SB_JOURNAL_BUCKETS]; /* journal buckets */
|
||||
};
|
||||
|
||||
struct cache_sb {
|
||||
__u64 csum;
|
||||
__u64 offset; /* sector where this sb was written */
|
||||
|
Loading…
Reference in New Issue
Block a user