size &= ~(unsigned long long)(chunk - 1);
newsize = size * 2;
if (st && ! st->ss->validate_geometry(st, level, layout, raiddisks,
- &chunk, size*2, NULL, &newsize, verbose>=0))
+ &chunk, size*2, -1LL, NULL,
+ &newsize, verbose>=0))
return 1;
if (chunk && chunk != UnSet) {
layout = default_layout(st, level, verbose);
switch (st->ss->validate_geometry(
st, level, layout, raiddisks,
- &chunk, size*2, dname, &freesize,
- verbose > 0)) {
+ &chunk, size*2, -1LL, dname,
+ &freesize, verbose > 0)) {
case -1: /* Not valid, message printed, and not
* worth checking any further */
exit(2);
layout = default_layout(st, level, 0);
if (!st->ss->validate_geometry(st, level, layout,
raiddisks,
- &chunk, size*2, dname,
- &freesize,
+ &chunk, size*2, -1LL,
+ dname, &freesize,
verbose >= 0)) {
fprintf(stderr,
/* size is meaningful */
if (!st->ss->validate_geometry(st, level, layout,
raiddisks,
- &chunk, minsize*2,
+ &chunk, minsize*2, -1LL,
NULL, NULL, 0)) {
fprintf(stderr, Name ": devices too large for RAID level %d\n", 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, -1LL, NULL, NULL, 0) == 0) {
if (!force) {
fprintf(stderr, Name
": %s is larger than %s can "
int (*validate_geometry)(struct supertype *st, int level, int layout,
int raiddisks,
int *chunk, unsigned long long size,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ long long data_offset,
+ char *dev,
unsigned long long *freesize,
int verbose)
{
}
}
- *freesize = avail_size_imsm(st, ldsize >> 9, -1);
+ *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,
+ 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,
+ 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, -1LL,
0, 0, 1))
change = -1;
static int validate_geometry(struct supertype *st, int level,
int layout, int raiddisks,
int *chunk, unsigned long long size,
+ 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,
+ 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,
+ long long data_offset,
char *subdev, unsigned long long *freesize,
int verbose)
{
}
close(fd);
- *freesize = avail_size1(st, ldsize >> 9, -1);
+ *freesize = avail_size1(st, ldsize >> 9, data_offset);
return 1;
}
#endif /* MDASSEMBLE */