s->size &= ~(unsigned long long)(s->chunk - 1);
newsize = s->size * 2;
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;
if (s->chunk && s->chunk != UnSet) {
s->layout = default_layout(st, s->level, c->verbose);
switch (st->ss->validate_geometry(
st, s->level, s->layout, s->raiddisks,
- &s->chunk, s->size*2, dname, &freesize,
- c->verbose > 0)) {
+ &s->chunk, s->size*2,
+ INVALID_SECTORS, dname,
+ &freesize, c->verbose > 0)) {
case -1: /* Not valid, message printed, and not
* worth checking any further */
exit(2);
s->layout = default_layout(st, s->level, 0);
if (!st->ss->validate_geometry(st, s->level, s->layout,
s->raiddisks,
- &s->chunk, s->size*2, dname,
- &freesize,
+ &s->chunk, s->size*2,
+ INVALID_SECTORS,
+ dname, &freesize,
c->verbose >= 0)) {
pr_err("%s is not suitable for "
if (!st->ss->validate_geometry(st, s->level, s->layout,
s->raiddisks,
&s->chunk, minsize*2,
+ INVALID_SECTORS,
NULL, NULL, 0)) {
pr_err("devices too large for RAID level %d\n", s->level);
return 1;
if (tst->ss->validate_geometry(
tst, array->level, array->layout,
array->raid_disks, NULL,
- ldsize >> 9, NULL, NULL, 0) == 0) {
+ ldsize >> 9, INVALID_SECTORS, NULL, NULL, 0) == 0) {
if (!force) {
pr_err("%s is larger than %s can "
"effectively use.\n"
int (*validate_geometry)(struct supertype *st, int level, int layout,
int raiddisks,
int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *subdev, unsigned long long *freesize,
int verbose);
validate_geometry_ddf_container(struct supertype *st,
int level, int layout, int raiddisks,
int chunk, unsigned long long size,
+ unsigned long long data_offset,
char *dev, unsigned long long *freesize,
int verbose);
static int validate_geometry_ddf_bvd(struct supertype *st,
int level, int layout, int raiddisks,
int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *dev, unsigned long long *freesize,
int verbose);
static int validate_geometry_ddf(struct supertype *st,
int level, int layout, int raiddisks,
int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *dev, unsigned long long *freesize,
int verbose)
{
/* Must be a fresh device to add to a container */
return validate_geometry_ddf_container(st, level, layout,
raiddisks, chunk?*chunk:0,
- size, dev, freesize,
+ size, data_offset, dev,
+ freesize,
verbose);
}
* Should make a distinction one day.
*/
return validate_geometry_ddf_bvd(st, level, layout, raiddisks,
- chunk, size, dev, freesize,
+ chunk, size, data_offset, dev,
+ freesize,
verbose);
}
/* This is the first device for the array.
close(cfd);
return validate_geometry_ddf_bvd(st, level, layout,
raiddisks, chunk, size,
+ data_offset,
dev, freesize,
verbose);
}
validate_geometry_ddf_container(struct supertype *st,
int level, int layout, int raiddisks,
int chunk, unsigned long long size,
+ unsigned long long data_offset,
char *dev, unsigned long long *freesize,
int verbose)
{
static int validate_geometry_ddf_bvd(struct supertype *st,
int level, int layout, int raiddisks,
int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *dev, unsigned long long *freesize,
int verbose)
{
static int validate_geometry(struct supertype *st, int level,
int layout, int raiddisks,
int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *subdev, unsigned long long *freesize,
int verbose)
{
#ifndef MDASSEMBLE
static int validate_geometry_imsm_container(struct supertype *st, int level,
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,
int verbose)
{
}
}
- *freesize = avail_size_imsm(st, ldsize >> 9, INVALID_SECTORS);
+ *freesize = avail_size_imsm(st, ldsize >> 9, data_offset);
free_imsm(super);
return 1;
*/
static int validate_geometry_imsm_volume(struct supertype *st, int level,
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,
int verbose)
{
static int validate_geometry_imsm(struct supertype *st, int level, int layout,
int raiddisks, int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *dev, unsigned long long *freesize,
int verbose)
{
/* Must be a fresh device to add to a container */
return validate_geometry_imsm_container(st, level, layout,
raiddisks,
- chunk?*chunk:0, size,
+ chunk?*chunk:0,
+ size, data_offset,
dev, freesize,
verbose);
}
/* creating in a given container */
return validate_geometry_imsm_volume(st, level, layout,
raiddisks, chunk, size,
+ data_offset,
dev, freesize, verbose);
}
close(cfd);
return validate_geometry_imsm_volume(st, level, layout,
raiddisks, chunk,
- size, dev,
+ size, data_offset, dev,
freesize, 1)
? 1 : -1;
}
imsm_layout,
geo->raid_disks + devNumChange,
&chunk,
- geo->size,
+ geo->size, INVALID_SECTORS,
0, 0, 1))
change = -1;
static int validate_geometry(struct supertype *st, int level,
int layout, int raiddisks,
int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *subdev, unsigned long long *freesize,
int verbose)
{
static int validate_geometry0(struct supertype *st, int level,
int layout, int raiddisks,
int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *subdev, unsigned long long *freesize,
int verbose)
{
static int validate_geometry1(struct supertype *st, int level,
int layout, int raiddisks,
int *chunk, unsigned long long size,
+ unsigned long long data_offset,
char *subdev, unsigned long long *freesize,
int verbose)
{
}
close(fd);
- *freesize = avail_size1(st, ldsize >> 9, INVALID_SECTORS);
+ *freesize = avail_size1(st, ldsize >> 9, data_offset);
return 1;
}
#endif /* MDASSEMBLE */