Change the values for "max size" from -1 to 1.
Both are impossible, and '1' allows size to be unsigned, which is neater. Also #define MAX_SIZE to be '1' to make it all more explicit. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
56dcaa6ba0
commit
d04f65f48c
4
Build.c
4
Build.c
|
@ -126,7 +126,7 @@ int Build(char *mddev, int chunk, int level, int layout,
|
|||
if (vers >= 9000) {
|
||||
mdu_array_info_t array;
|
||||
array.level = level;
|
||||
array.size = size;
|
||||
array.size = size == MAX_SIZE ? 0 : size;
|
||||
array.nr_disks = raiddisks;
|
||||
array.raid_disks = raiddisks;
|
||||
array.md_minor = 0;
|
||||
|
@ -182,7 +182,7 @@ int Build(char *mddev, int chunk, int level, int layout,
|
|||
goto abort;
|
||||
}
|
||||
if (get_dev_size(fd, NULL, &dsize) &&
|
||||
(size == 0 || dsize < size))
|
||||
(size == 0 || size == MAX_SIZE || dsize < size))
|
||||
size = dsize;
|
||||
close(fd);
|
||||
if (vers >= 9000) {
|
||||
|
|
4
Create.c
4
Create.c
|
@ -249,7 +249,9 @@ int Create(struct supertype *st, char *mddev,
|
|||
pr_err("unknown level %d\n", level);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (size == MAX_SIZE)
|
||||
/* use '0' to mean 'max' now... */
|
||||
size = 0;
|
||||
if (size && chunk && chunk != UnSet)
|
||||
size &= ~(unsigned long long)(chunk - 1);
|
||||
newsize = size * 2;
|
||||
|
|
23
Grow.c
23
Grow.c
|
@ -1429,7 +1429,7 @@ static int reshape_container(char *container, char *devname,
|
|||
int verbose, int restart, int freeze_reshape);
|
||||
|
||||
int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
|
||||
long long size,
|
||||
unsigned long long size,
|
||||
int level, char *layout_str, int chunksize, int raid_disks,
|
||||
struct mddev_dev *devlist,
|
||||
int assume_clean, int force)
|
||||
|
@ -1474,7 +1474,7 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (size >= 0 &&
|
||||
if (size > 0 &&
|
||||
(chunksize || level!= UnSet || layout_str || raid_disks)) {
|
||||
pr_err("cannot change component size at the same time "
|
||||
"as other changes.\n"
|
||||
|
@ -1611,14 +1611,14 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
|
|||
}
|
||||
|
||||
/* ========= set size =============== */
|
||||
if (size >= 0 && (size == 0 || size != array.size)) {
|
||||
long long orig_size = get_component_size(fd)/2;
|
||||
long long min_csize;
|
||||
if (size > 0 && (size == MAX_DISKS || size != (unsigned)array.size)) {
|
||||
unsigned long long orig_size = get_component_size(fd)/2;
|
||||
unsigned long long min_csize;
|
||||
struct mdinfo *mdi;
|
||||
int raid0_takeover = 0;
|
||||
|
||||
if (orig_size == 0)
|
||||
orig_size = array.size;
|
||||
orig_size = (unsigned) array.size;
|
||||
|
||||
if (reshape_super(st, size, UnSet, UnSet, 0, 0, UnSet, NULL,
|
||||
devname, APPLY_METADATA_CHANGES, verbose > 0)) {
|
||||
|
@ -1656,7 +1656,8 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
|
|||
min_csize = 0;
|
||||
rv = 0;
|
||||
for (mdi = sra->devs; mdi; mdi = mdi->next) {
|
||||
if (sysfs_set_num(sra, mdi, "size", size) < 0) {
|
||||
if (sysfs_set_num(sra, mdi, "size",
|
||||
size == MAX_SIZE ? 0 : size) < 0) {
|
||||
/* Probably kernel refusing to let us
|
||||
* reduce the size - not an error.
|
||||
*/
|
||||
|
@ -1671,7 +1672,7 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
|
|||
if (csize >= 2ULL*1024*1024*1024)
|
||||
csize = 2ULL*1024*1024*1024;
|
||||
if ((min_csize == 0 || (min_csize
|
||||
> (long long)csize)))
|
||||
> csize)))
|
||||
min_csize = csize;
|
||||
}
|
||||
}
|
||||
|
@ -1687,7 +1688,7 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
|
|||
rv = 1;
|
||||
goto size_change_error;
|
||||
}
|
||||
if (min_csize && size == 0) {
|
||||
if (min_csize && size == MAX_SIZE) {
|
||||
/* Don't let the kernel choose a size - it will get
|
||||
* it wrong
|
||||
*/
|
||||
|
@ -1717,8 +1718,8 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
|
|||
st->update_tail = &st->updates;
|
||||
}
|
||||
|
||||
array.size = size;
|
||||
if (array.size != size) {
|
||||
array.size = size == MAX_SIZE ? 0 : size;
|
||||
if ((unsigned)array.size != size) {
|
||||
/* got truncated to 32bit, write to
|
||||
* component_size instead
|
||||
*/
|
||||
|
|
14
mdadm.c
14
mdadm.c
|
@ -49,7 +49,7 @@ int main(int argc, char *argv[])
|
|||
int i;
|
||||
|
||||
int chunk = 0;
|
||||
long long size = -1;
|
||||
unsigned long long size = 0;
|
||||
long long array_size = -1;
|
||||
int level = UnSet;
|
||||
int layout = UnSet;
|
||||
|
@ -416,13 +416,13 @@ int main(int argc, char *argv[])
|
|||
case O(GROW,'z'):
|
||||
case O(CREATE,'z'):
|
||||
case O(BUILD,'z'): /* size */
|
||||
if (size >= 0) {
|
||||
if (size > 0) {
|
||||
pr_err("size may only be specified once. "
|
||||
"Second value is %s.\n", optarg);
|
||||
exit(2);
|
||||
}
|
||||
if (strcmp(optarg, "max")==0)
|
||||
size = 0;
|
||||
size = MAX_SIZE;
|
||||
else {
|
||||
size = parse_size(optarg);
|
||||
if (size < 8) {
|
||||
|
@ -1334,7 +1334,7 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
|
||||
rv = Create(ss, devlist->devname, chunk, level, layout, size<0 ? 0 : size,
|
||||
rv = Create(ss, devlist->devname, chunk, level, layout, size,
|
||||
raiddisks, sparedisks, ident.name,
|
||||
ident.uuid_set ? ident.uuid : NULL,
|
||||
devs_found-1, devlist->next,
|
||||
|
@ -1430,7 +1430,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
if (devs_found > 1 && raiddisks == 0) {
|
||||
/* must be '-a'. */
|
||||
if (size >= 0 || chunk || layout_str != NULL || bitmap_file) {
|
||||
if (size > 0 || chunk || layout_str != NULL || bitmap_file) {
|
||||
pr_err("--add cannot be used with "
|
||||
"other geometry changes in --grow mode\n");
|
||||
rv = 1;
|
||||
|
@ -1443,7 +1443,7 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
} else if (bitmap_file) {
|
||||
if (size >= 0 || raiddisks || chunk ||
|
||||
if (size > 0 || raiddisks || chunk ||
|
||||
layout_str != NULL || devs_found > 1) {
|
||||
pr_err("--bitmap changes cannot be "
|
||||
"used with other geometry changes "
|
||||
|
@ -1459,7 +1459,7 @@ int main(int argc, char *argv[])
|
|||
rv = Grow_continue_command(devlist->devname,
|
||||
mdfd, c.backup_file,
|
||||
c.verbose);
|
||||
else if (size >= 0 || raiddisks != 0 || layout_str != NULL
|
||||
else if (size > 0 || raiddisks != 0 || layout_str != NULL
|
||||
|| chunk != 0 || level != UnSet) {
|
||||
rv = Grow_reshape(devlist->devname, mdfd, c.verbose, c.backup_file,
|
||||
size, level, layout_str, chunk, raiddisks,
|
||||
|
|
9
mdadm.h
9
mdadm.h
|
@ -776,7 +776,8 @@ extern struct superswitch {
|
|||
#define APPLY_METADATA_CHANGES 1
|
||||
#define ROLLBACK_METADATA_CHANGES 0
|
||||
|
||||
int (*reshape_super)(struct supertype *st, long long size, int level,
|
||||
int (*reshape_super)(struct supertype *st,
|
||||
unsigned long long size, int level,
|
||||
int layout, int chunksize, int raid_disks,
|
||||
int delta_disks, char *backup, char *dev,
|
||||
int direction,
|
||||
|
@ -1074,7 +1075,7 @@ extern int autodetect(void);
|
|||
extern int Grow_Add_device(char *devname, int fd, char *newdev);
|
||||
extern int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int write_behind, int force);
|
||||
extern int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
|
||||
long long size,
|
||||
unsigned long long size,
|
||||
int level, char *layout_str, int chunksize, int raid_disks,
|
||||
struct mddev_dev *devlist,
|
||||
int assume_clean, int force);
|
||||
|
@ -1440,4 +1441,8 @@ char *xstrdup(const char *str);
|
|||
*/
|
||||
#define MAX_DISKS 4096
|
||||
|
||||
/* Sometimes the 'size' value passed needs to mean "Maximum".
|
||||
* In those cases with use MAX_SIZE
|
||||
*/
|
||||
#define MAX_SIZE 1
|
||||
extern int __offroot;
|
||||
|
|
|
@ -433,7 +433,7 @@ struct imsm_update_activate_spare {
|
|||
struct geo_params {
|
||||
int dev_id;
|
||||
char *dev_name;
|
||||
long long size;
|
||||
unsigned long long size;
|
||||
int level;
|
||||
int layout;
|
||||
int chunksize;
|
||||
|
@ -9307,7 +9307,7 @@ static int imsm_reshape_is_allowed_on_container(struct supertype *st,
|
|||
"st->devnum = (%i)\n",
|
||||
st->devnum);
|
||||
|
||||
if (geo->size != -1 ||
|
||||
if (geo->size > 0 ||
|
||||
geo->level != UnSet ||
|
||||
geo->layout != UnSet ||
|
||||
geo->chunksize != 0 ||
|
||||
|
@ -9647,9 +9647,9 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
|
|||
int data_disks;
|
||||
struct imsm_dev *dev;
|
||||
struct intel_super *super;
|
||||
long long current_size;
|
||||
unsigned long long current_size;
|
||||
unsigned long long free_size;
|
||||
long long max_size;
|
||||
unsigned long long max_size;
|
||||
int rv;
|
||||
|
||||
getinfo_super_imsm_volume(st, &info, NULL);
|
||||
|
@ -9746,7 +9746,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
|
|||
geo->size * 2);
|
||||
}
|
||||
|
||||
if ((current_size != geo->size) && (geo->size >= 0)) {
|
||||
if ((current_size != geo->size) && (geo->size > 0)) {
|
||||
if (change != -1) {
|
||||
pr_err("Error. Size change should be the only "
|
||||
"one at a time.\n");
|
||||
|
@ -9776,7 +9776,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
|
|||
chunk * 1024,
|
||||
max_size);
|
||||
}
|
||||
if (geo->size == 0) {
|
||||
if (geo->size == MAX_SIZE) {
|
||||
/* requested size change to the maximum available size
|
||||
*/
|
||||
if (max_size == 0) {
|
||||
|
@ -9881,7 +9881,8 @@ int imsm_takeover(struct supertype *st, struct geo_params *geo)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int imsm_reshape_super(struct supertype *st, long long size, int level,
|
||||
static int imsm_reshape_super(struct supertype *st, unsigned long long size,
|
||||
int level,
|
||||
int layout, int chunksize, int raid_disks,
|
||||
int delta_disks, char *backup, char *dev,
|
||||
int direction, int verbose)
|
||||
|
|
Loading…
Reference in New Issue