super.c (1dfc0686c29a9bbd3a446a29f9ccde3dec3bc75a) | super.c (b16671e8f493e3df40b1fb0dff4078f391c5099a) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * bcache setup/teardown code, and some metadata io - read a superblock and 4 * figure out what to do with it. 5 * 6 * Copyright 2010, 2011 Kent Overstreet <kent.overstreet@gmail.com> 7 * Copyright 2012 Google, Inc. 8 */ --- 50 unchanged lines hidden (view full) --- 59#define BCACHE_DEVICE_IDX_MAX ((1U << MINORBITS)/BCACHE_MINORS) 60 61/* Superblock */ 62 63static unsigned int get_bucket_size(struct cache_sb *sb, struct cache_sb_disk *s) 64{ 65 unsigned int bucket_size = le16_to_cpu(s->bucket_size); 66 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * bcache setup/teardown code, and some metadata io - read a superblock and 4 * figure out what to do with it. 5 * 6 * Copyright 2010, 2011 Kent Overstreet <kent.overstreet@gmail.com> 7 * Copyright 2012 Google, Inc. 8 */ --- 50 unchanged lines hidden (view full) --- 59#define BCACHE_DEVICE_IDX_MAX ((1U << MINORBITS)/BCACHE_MINORS) 60 61/* Superblock */ 62 63static unsigned int get_bucket_size(struct cache_sb *sb, struct cache_sb_disk *s) 64{ 65 unsigned int bucket_size = le16_to_cpu(s->bucket_size); 66 |
67 if (sb->version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES && 68 bch_has_feature_large_bucket(sb)) 69 bucket_size |= le16_to_cpu(s->bucket_size_hi) << 16; | 67 if (sb->version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES) { 68 if (bch_has_feature_large_bucket(sb)) { 69 unsigned int max, order; |
70 | 70 |
71 max = sizeof(unsigned int) * BITS_PER_BYTE - 1; 72 order = le16_to_cpu(s->bucket_size); 73 /* 74 * bcache tool will make sure the overflow won't 75 * happen, an error message here is enough. 76 */ 77 if (order > max) 78 pr_err("Bucket size (1 << %u) overflows\n", 79 order); 80 bucket_size = 1 << order; 81 } else if (bch_has_feature_obso_large_bucket(sb)) { 82 bucket_size += 83 le16_to_cpu(s->obso_bucket_size_hi) << 16; 84 } 85 } 86 |
|
71 return bucket_size; 72} 73 74static const char *read_super_common(struct cache_sb *sb, struct block_device *bdev, 75 struct cache_sb_disk *s) 76{ 77 const char *err; 78 unsigned int i; --- 2811 unchanged lines hidden --- | 87 return bucket_size; 88} 89 90static const char *read_super_common(struct cache_sb *sb, struct block_device *bdev, 91 struct cache_sb_disk *s) 92{ 93 const char *err; 94 unsigned int i; --- 2811 unchanged lines hidden --- |