Add data_offset arg to ->validate_geometry.
This is needed to return correct available size. It isn't really used yet. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
387fcd593c
commit
af4348ddd1
15
Create.c
15
Create.c
|
@ -251,7 +251,9 @@ int Create(struct supertype *st, char *mddev,
|
||||||
s->size &= ~(unsigned long long)(s->chunk - 1);
|
s->size &= ~(unsigned long long)(s->chunk - 1);
|
||||||
newsize = s->size * 2;
|
newsize = s->size * 2;
|
||||||
if (st && ! st->ss->validate_geometry(st, s->level, s->layout, s->raiddisks,
|
if (st && ! st->ss->validate_geometry(st, s->level, s->layout, s->raiddisks,
|
||||||
&s->chunk, s->size*2, NULL, &newsize, c->verbose>=0))
|
&s->chunk, s->size*2,
|
||||||
|
INVALID_SECTORS, NULL,
|
||||||
|
&newsize, c->verbose>=0))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (s->chunk && s->chunk != UnSet) {
|
if (s->chunk && s->chunk != UnSet) {
|
||||||
|
@ -332,8 +334,9 @@ int Create(struct supertype *st, char *mddev,
|
||||||
s->layout = default_layout(st, s->level, c->verbose);
|
s->layout = default_layout(st, s->level, c->verbose);
|
||||||
switch (st->ss->validate_geometry(
|
switch (st->ss->validate_geometry(
|
||||||
st, s->level, s->layout, s->raiddisks,
|
st, s->level, s->layout, s->raiddisks,
|
||||||
&s->chunk, s->size*2, dname, &freesize,
|
&s->chunk, s->size*2,
|
||||||
c->verbose > 0)) {
|
INVALID_SECTORS, dname,
|
||||||
|
&freesize, c->verbose > 0)) {
|
||||||
case -1: /* Not valid, message printed, and not
|
case -1: /* Not valid, message printed, and not
|
||||||
* worth checking any further */
|
* worth checking any further */
|
||||||
exit(2);
|
exit(2);
|
||||||
|
@ -368,8 +371,9 @@ int Create(struct supertype *st, char *mddev,
|
||||||
s->layout = default_layout(st, s->level, 0);
|
s->layout = default_layout(st, s->level, 0);
|
||||||
if (!st->ss->validate_geometry(st, s->level, s->layout,
|
if (!st->ss->validate_geometry(st, s->level, s->layout,
|
||||||
s->raiddisks,
|
s->raiddisks,
|
||||||
&s->chunk, s->size*2, dname,
|
&s->chunk, s->size*2,
|
||||||
&freesize,
|
INVALID_SECTORS,
|
||||||
|
dname, &freesize,
|
||||||
c->verbose >= 0)) {
|
c->verbose >= 0)) {
|
||||||
|
|
||||||
pr_err("%s is not suitable for "
|
pr_err("%s is not suitable for "
|
||||||
|
@ -470,6 +474,7 @@ int Create(struct supertype *st, char *mddev,
|
||||||
if (!st->ss->validate_geometry(st, s->level, s->layout,
|
if (!st->ss->validate_geometry(st, s->level, s->layout,
|
||||||
s->raiddisks,
|
s->raiddisks,
|
||||||
&s->chunk, minsize*2,
|
&s->chunk, minsize*2,
|
||||||
|
INVALID_SECTORS,
|
||||||
NULL, NULL, 0)) {
|
NULL, NULL, 0)) {
|
||||||
pr_err("devices too large for RAID level %d\n", s->level);
|
pr_err("devices too large for RAID level %d\n", s->level);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
2
Manage.c
2
Manage.c
|
@ -549,7 +549,7 @@ int Manage_add(int fd, int tfd, struct mddev_dev *dv,
|
||||||
if (tst->ss->validate_geometry(
|
if (tst->ss->validate_geometry(
|
||||||
tst, array->level, array->layout,
|
tst, array->level, array->layout,
|
||||||
array->raid_disks, NULL,
|
array->raid_disks, NULL,
|
||||||
ldsize >> 9, NULL, NULL, 0) == 0) {
|
ldsize >> 9, INVALID_SECTORS, NULL, NULL, 0) == 0) {
|
||||||
if (!force) {
|
if (!force) {
|
||||||
pr_err("%s is larger than %s can "
|
pr_err("%s is larger than %s can "
|
||||||
"effectively use.\n"
|
"effectively use.\n"
|
||||||
|
|
1
mdadm.h
1
mdadm.h
|
@ -778,6 +778,7 @@ extern struct superswitch {
|
||||||
int (*validate_geometry)(struct supertype *st, int level, int layout,
|
int (*validate_geometry)(struct supertype *st, int level, int layout,
|
||||||
int raiddisks,
|
int raiddisks,
|
||||||
int *chunk, unsigned long long size,
|
int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *subdev, unsigned long long *freesize,
|
char *subdev, unsigned long long *freesize,
|
||||||
int verbose);
|
int verbose);
|
||||||
|
|
||||||
|
|
12
super-ddf.c
12
super-ddf.c
|
@ -2581,18 +2581,21 @@ static int
|
||||||
validate_geometry_ddf_container(struct supertype *st,
|
validate_geometry_ddf_container(struct supertype *st,
|
||||||
int level, int layout, int raiddisks,
|
int level, int layout, int raiddisks,
|
||||||
int chunk, unsigned long long size,
|
int chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *dev, unsigned long long *freesize,
|
char *dev, unsigned long long *freesize,
|
||||||
int verbose);
|
int verbose);
|
||||||
|
|
||||||
static int validate_geometry_ddf_bvd(struct supertype *st,
|
static int validate_geometry_ddf_bvd(struct supertype *st,
|
||||||
int level, int layout, int raiddisks,
|
int level, int layout, int raiddisks,
|
||||||
int *chunk, unsigned long long size,
|
int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *dev, unsigned long long *freesize,
|
char *dev, unsigned long long *freesize,
|
||||||
int verbose);
|
int verbose);
|
||||||
|
|
||||||
static int validate_geometry_ddf(struct supertype *st,
|
static int validate_geometry_ddf(struct supertype *st,
|
||||||
int level, int layout, int raiddisks,
|
int level, int layout, int raiddisks,
|
||||||
int *chunk, unsigned long long size,
|
int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *dev, unsigned long long *freesize,
|
char *dev, unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
@ -2615,7 +2618,8 @@ static int validate_geometry_ddf(struct supertype *st,
|
||||||
/* Must be a fresh device to add to a container */
|
/* Must be a fresh device to add to a container */
|
||||||
return validate_geometry_ddf_container(st, level, layout,
|
return validate_geometry_ddf_container(st, level, layout,
|
||||||
raiddisks, chunk?*chunk:0,
|
raiddisks, chunk?*chunk:0,
|
||||||
size, dev, freesize,
|
size, data_offset, dev,
|
||||||
|
freesize,
|
||||||
verbose);
|
verbose);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2652,7 +2656,8 @@ static int validate_geometry_ddf(struct supertype *st,
|
||||||
* Should make a distinction one day.
|
* Should make a distinction one day.
|
||||||
*/
|
*/
|
||||||
return validate_geometry_ddf_bvd(st, level, layout, raiddisks,
|
return validate_geometry_ddf_bvd(st, level, layout, raiddisks,
|
||||||
chunk, size, dev, freesize,
|
chunk, size, data_offset, dev,
|
||||||
|
freesize,
|
||||||
verbose);
|
verbose);
|
||||||
}
|
}
|
||||||
/* This is the first device for the array.
|
/* This is the first device for the array.
|
||||||
|
@ -2710,6 +2715,7 @@ static int validate_geometry_ddf(struct supertype *st,
|
||||||
close(cfd);
|
close(cfd);
|
||||||
return validate_geometry_ddf_bvd(st, level, layout,
|
return validate_geometry_ddf_bvd(st, level, layout,
|
||||||
raiddisks, chunk, size,
|
raiddisks, chunk, size,
|
||||||
|
data_offset,
|
||||||
dev, freesize,
|
dev, freesize,
|
||||||
verbose);
|
verbose);
|
||||||
}
|
}
|
||||||
|
@ -2724,6 +2730,7 @@ static int
|
||||||
validate_geometry_ddf_container(struct supertype *st,
|
validate_geometry_ddf_container(struct supertype *st,
|
||||||
int level, int layout, int raiddisks,
|
int level, int layout, int raiddisks,
|
||||||
int chunk, unsigned long long size,
|
int chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *dev, unsigned long long *freesize,
|
char *dev, unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
@ -2758,6 +2765,7 @@ validate_geometry_ddf_container(struct supertype *st,
|
||||||
static int validate_geometry_ddf_bvd(struct supertype *st,
|
static int validate_geometry_ddf_bvd(struct supertype *st,
|
||||||
int level, int layout, int raiddisks,
|
int level, int layout, int raiddisks,
|
||||||
int *chunk, unsigned long long size,
|
int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *dev, unsigned long long *freesize,
|
char *dev, unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
|
|
@ -196,6 +196,7 @@ static struct supertype *match_metadata_desc(char *arg)
|
||||||
static int validate_geometry(struct supertype *st, int level,
|
static int validate_geometry(struct supertype *st, int level,
|
||||||
int layout, int raiddisks,
|
int layout, int raiddisks,
|
||||||
int *chunk, unsigned long long size,
|
int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *subdev, unsigned long long *freesize,
|
char *subdev, unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5279,7 +5279,9 @@ static int imsm_bbm_log_size(struct imsm_super *mpb)
|
||||||
#ifndef MDASSEMBLE
|
#ifndef MDASSEMBLE
|
||||||
static int validate_geometry_imsm_container(struct supertype *st, int level,
|
static int validate_geometry_imsm_container(struct supertype *st, int level,
|
||||||
int layout, int raiddisks, int chunk,
|
int layout, int raiddisks, int chunk,
|
||||||
unsigned long long size, char *dev,
|
unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
|
char *dev,
|
||||||
unsigned long long *freesize,
|
unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
@ -5341,7 +5343,7 @@ static int validate_geometry_imsm_container(struct supertype *st, int level,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*freesize = avail_size_imsm(st, ldsize >> 9, INVALID_SECTORS);
|
*freesize = avail_size_imsm(st, ldsize >> 9, data_offset);
|
||||||
free_imsm(super);
|
free_imsm(super);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -5878,7 +5880,9 @@ validate_geometry_imsm_orom(struct intel_super *super, int level, int layout,
|
||||||
*/
|
*/
|
||||||
static int validate_geometry_imsm_volume(struct supertype *st, int level,
|
static int validate_geometry_imsm_volume(struct supertype *st, int level,
|
||||||
int layout, int raiddisks, int *chunk,
|
int layout, int raiddisks, int *chunk,
|
||||||
unsigned long long size, char *dev,
|
unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
|
char *dev,
|
||||||
unsigned long long *freesize,
|
unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
@ -6161,6 +6165,7 @@ static int reserve_space(struct supertype *st, int raiddisks,
|
||||||
|
|
||||||
static int validate_geometry_imsm(struct supertype *st, int level, int layout,
|
static int validate_geometry_imsm(struct supertype *st, int level, int layout,
|
||||||
int raiddisks, int *chunk, unsigned long long size,
|
int raiddisks, int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *dev, unsigned long long *freesize,
|
char *dev, unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
@ -6176,7 +6181,8 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
|
||||||
/* Must be a fresh device to add to a container */
|
/* Must be a fresh device to add to a container */
|
||||||
return validate_geometry_imsm_container(st, level, layout,
|
return validate_geometry_imsm_container(st, level, layout,
|
||||||
raiddisks,
|
raiddisks,
|
||||||
chunk?*chunk:0, size,
|
chunk?*chunk:0,
|
||||||
|
size, data_offset,
|
||||||
dev, freesize,
|
dev, freesize,
|
||||||
verbose);
|
verbose);
|
||||||
}
|
}
|
||||||
|
@ -6219,6 +6225,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
|
||||||
/* creating in a given container */
|
/* creating in a given container */
|
||||||
return validate_geometry_imsm_volume(st, level, layout,
|
return validate_geometry_imsm_volume(st, level, layout,
|
||||||
raiddisks, chunk, size,
|
raiddisks, chunk, size,
|
||||||
|
data_offset,
|
||||||
dev, freesize, verbose);
|
dev, freesize, verbose);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6263,7 +6270,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
|
||||||
close(cfd);
|
close(cfd);
|
||||||
return validate_geometry_imsm_volume(st, level, layout,
|
return validate_geometry_imsm_volume(st, level, layout,
|
||||||
raiddisks, chunk,
|
raiddisks, chunk,
|
||||||
size, dev,
|
size, data_offset, dev,
|
||||||
freesize, 1)
|
freesize, 1)
|
||||||
? 1 : -1;
|
? 1 : -1;
|
||||||
}
|
}
|
||||||
|
@ -9905,7 +9912,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
|
||||||
imsm_layout,
|
imsm_layout,
|
||||||
geo->raid_disks + devNumChange,
|
geo->raid_disks + devNumChange,
|
||||||
&chunk,
|
&chunk,
|
||||||
geo->size,
|
geo->size, INVALID_SECTORS,
|
||||||
0, 0, 1))
|
0, 0, 1))
|
||||||
change = -1;
|
change = -1;
|
||||||
|
|
||||||
|
|
|
@ -187,6 +187,7 @@ static struct supertype *match_metadata_desc(char *arg)
|
||||||
static int validate_geometry(struct supertype *st, int level,
|
static int validate_geometry(struct supertype *st, int level,
|
||||||
int layout, int raiddisks,
|
int layout, int raiddisks,
|
||||||
int *chunk, unsigned long long size,
|
int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *subdev, unsigned long long *freesize,
|
char *subdev, unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
|
1
super0.c
1
super0.c
|
@ -1124,6 +1124,7 @@ static void free_super0(struct supertype *st)
|
||||||
static int validate_geometry0(struct supertype *st, int level,
|
static int validate_geometry0(struct supertype *st, int level,
|
||||||
int layout, int raiddisks,
|
int layout, int raiddisks,
|
||||||
int *chunk, unsigned long long size,
|
int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *subdev, unsigned long long *freesize,
|
char *subdev, unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
|
3
super1.c
3
super1.c
|
@ -1902,6 +1902,7 @@ static void free_super1(struct supertype *st)
|
||||||
static int validate_geometry1(struct supertype *st, int level,
|
static int validate_geometry1(struct supertype *st, int level,
|
||||||
int layout, int raiddisks,
|
int layout, int raiddisks,
|
||||||
int *chunk, unsigned long long size,
|
int *chunk, unsigned long long size,
|
||||||
|
unsigned long long data_offset,
|
||||||
char *subdev, unsigned long long *freesize,
|
char *subdev, unsigned long long *freesize,
|
||||||
int verbose)
|
int verbose)
|
||||||
{
|
{
|
||||||
|
@ -1933,7 +1934,7 @@ static int validate_geometry1(struct supertype *st, int level,
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
*freesize = avail_size1(st, ldsize >> 9, INVALID_SECTORS);
|
*freesize = avail_size1(st, ldsize >> 9, data_offset);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif /* MDASSEMBLE */
|
#endif /* MDASSEMBLE */
|
||||||
|
|
Loading…
Reference in New Issue