struct phys_disk *phys;
struct virtual_disk *virt;
int pdsize, vdsize;
- int max_part, mppe, conf_rec_len;
+ unsigned int max_part, mppe, conf_rec_len;
int currentdev;
int updates_pending;
struct vcl {
struct vcl *next;
__u64 *lba_offset; /* location in 'conf' of
* the lba table */
- int vcnum; /* index into ->virt */
+ unsigned int vcnum; /* index into ->virt */
__u64 *block_sizes; /* NULL if all the same */
};
};
#endif
-static int calc_crc(void *buf, int len)
+static unsigned int calc_crc(void *buf, int len)
{
/* crcs are always at the same place as in the ddf_header */
struct ddf_header *ddf = buf;
else
offset += __be64_to_cpu(super->active->secondary_lba);
- if (lseek64(fd, offset<<9, 0) != (offset<<9)) {
+ if ((unsigned long long)lseek64(fd, offset<<9, 0) != (offset<<9)) {
if (dofree)
free(buf);
return NULL;
}
- if (read(fd, buf, len<<9) != (len<<9)) {
+ if ((unsigned long long)read(fd, buf, len<<9) != (len<<9)) {
if (dofree)
free(buf);
return NULL;
struct dl *dl;
struct stat stb;
char *conf;
- int i;
- int confsec;
+ unsigned int i;
+ unsigned int confsec;
int vnum;
- int max_virt_disks = __be16_to_cpu(super->active->max_vd_entries);
+ unsigned int max_virt_disks = __be16_to_cpu(super->active->max_vd_entries);
unsigned long long dsize;
/* First the local disk info */
if (get_dev_size(fd, devname, &dsize))
dl->size = dsize >> 9;
dl->spare = NULL;
- for (i=0 ; i < super->max_part ; i++)
+ for (i = 0 ; i < super->max_part ; i++)
dl->vlist[i] = NULL;
super->dlist = dl;
dl->pdnum = -1;
- for (i=0; i < __be16_to_cpu(super->active->max_pd_entries); i++)
+ for (i = 0; i < __be16_to_cpu(super->active->max_pd_entries); i++)
if (memcmp(super->phys->entries[i].guid,
dl->disk.guid, DDF_GUID_LEN) == 0)
dl->pdnum = i;
if (get_dev_size(fd, devname, &dsize) == 0)
return 1;
+ if (test_partition(fd))
+ /* DDF is not allowed on partitions */
+ return 1;
+
/* 32M is a lower bound */
if (dsize <= 32*1024*1024) {
if (devname)
}
if (st->subarray[0]) {
+ unsigned long val;
struct vcl *v;
+ char *ep;
+
+ val = strtoul(st->subarray, &ep, 10);
+ if (*ep != '\0') {
+ free(super);
+ return 1;
+ }
for (v = super->conflist; v; v = v->next)
- if (v->vcnum == atoi(st->subarray))
+ if (v->vcnum == val)
super->currentconf = v;
if (!super->currentconf) {
free(super);
struct vcl *vcl;
for (vcl = sb->conflist ; vcl ; vcl = vcl->next) {
- int i;
+ unsigned int i;
struct vd_config *vc = &vcl->conf;
if (calc_crc(vc, crl*512) != vc->crc)
/* Ok, we know about this VD, let's give more details */
printf(" Raid Devices[%d] : %d (", n,
__be16_to_cpu(vc->prim_elmnt_count));
- for (i=0; i<__be16_to_cpu(vc->prim_elmnt_count); i++) {
+ for (i = 0; i < __be16_to_cpu(vc->prim_elmnt_count); i++) {
int j;
int cnt = __be16_to_cpu(sb->phys->used_pdes);
for (j=0; j<cnt; j++)
*/
struct ddf_super *ddf = st->sb;
struct mdinfo info;
- int i;
+ unsigned int i;
char nbuf[64];
getinfo_super_ddf(st, &info);
fname_from_uuid(st, &info, nbuf, ':');
- for (i=0; i<__be16_to_cpu(ddf->virt->max_vdes); i++) {
+ for (i = 0; i < __be16_to_cpu(ddf->virt->max_vdes); i++) {
struct virtual_entry *ve = &ddf->virt->entries[i];
struct vcl vcl;
char nbuf1[64];
* the hostname
*/
struct ddf_super *ddf = st->sb;
- int len;
+ unsigned int len;
if (!homehost)
return 0;
}
#ifndef MDASSEMBLE
-static struct vd_config *find_vdcr(struct ddf_super *ddf, int inst)
+static struct vd_config *find_vdcr(struct ddf_super *ddf, unsigned int inst)
{
struct vcl *v;
/* Find the entry in phys_disk which has the given refnum
* and return it's index
*/
- int i;
- for (i=0; i < __be16_to_cpu(ddf->phys->max_pdes); i++)
+ unsigned int i;
+ for (i = 0; i < __be16_to_cpu(ddf->phys->max_pdes); i++)
if (ddf->phys->entries[i].refnum == phys_refnum)
return i;
return -1;
(ddf->anchor.guid+16));
info->array.utime = 0;
info->array.chunk_size = 0;
+ info->container_enough = 1;
info->disk.major = 0;
info->array.chunk_size = 512 << vc->conf.chunk_shift;
info->custom_array_size = 0;
- if (cd >= 0 && cd < ddf->mppe) {
+ if (cd >= 0 && (unsigned)cd < ddf->mppe) {
info->data_offset = __be64_to_cpu(vc->lba_offset[cd]);
if (vc->block_sizes)
info->component_size = vc->block_sizes[cd];
*/
struct extent *rv;
int n = 0;
- int i, j;
+ unsigned int i, j;
rv = malloc(sizeof(struct extent) * (ddf->max_part + 2));
if (!rv)
struct vcl *v = dl->vlist[i];
if (v == NULL)
continue;
- for (j=0; j < v->conf.prim_elmnt_count; j++)
+ for (j = 0; j < v->conf.prim_elmnt_count; j++)
if (v->conf.phys_refnum[j] == dl->disk.refnum) {
/* This device plays role 'j' in 'v'. */
rv[n].start = __be64_to_cpu(v->lba_offset[j]);
* We need to create a new vd_config and a new virtual_entry
*/
struct ddf_super *ddf = st->sb;
- int venum;
+ unsigned int venum;
struct virtual_entry *ve;
struct vcl *vcl;
struct vd_config *vc;
struct ddf_super *ddf = st->sb;
struct vd_config *vc;
__u64 *lba_offset;
- int working;
- int i;
+ unsigned int working;
+ unsigned int i;
unsigned long long blocks, pos, esize;
struct extent *ex;
vc->phys_refnum[dk->raid_disk] = dl->disk.refnum;
lba_offset[dk->raid_disk] = __cpu_to_be64(pos);
- for (i=0; i < ddf->max_part ; i++)
+ for (i = 0; i < ddf->max_part ; i++)
if (dl->vlist[i] == NULL)
break;
if (i == ddf->max_part)
*/
working = 0;
- for (i=0; i < __be16_to_cpu(vc->prim_elmnt_count); i++)
+ for (i = 0; i < __be16_to_cpu(vc->prim_elmnt_count); i++)
if (vc->phys_refnum[i] != 0xffffffff)
working++;
struct tm *tm;
unsigned long long size;
struct phys_disk_entry *pde;
- int n, i;
+ unsigned int n, i;
struct stat stb;
if (ddf->currentconf) {
do {
/* Cannot be bothered finding a CRC of some irrelevant details*/
dd->disk.refnum = random32();
- for (i = __be16_to_cpu(ddf->active->max_pd_entries) - 1;
- i >= 0; i--)
- if (ddf->phys->entries[i].refnum == dd->disk.refnum)
+ for (i = __be16_to_cpu(ddf->active->max_pd_entries);
+ i > 0; i--)
+ if (ddf->phys->entries[i-1].refnum == dd->disk.refnum)
break;
- } while (i >= 0);
+ } while (i > 0);
dd->disk.forced_ref = 1;
dd->disk.forced_guid = 1;
char *null_aligned = (char*)((((unsigned long)null_conf)+511)&~511UL);
if (null_conf[0] != 0xff)
memset(null_conf, 0xff, sizeof(null_conf));
- int togo = conf_size;
+ unsigned int togo = conf_size;
while (togo > sizeof(null_conf)-512) {
if (write(fd, null_aligned, sizeof(null_conf)-512) < 0)
break;
if ((S_IFMT & stb.st_mode) != S_IFBLK)
return 0;
for (dl = ddf->dlist ; dl ; dl = dl->next) {
- if (dl->major == major(stb.st_rdev) &&
- dl->minor == minor(stb.st_rdev))
+ if (dl->major == (int)major(stb.st_rdev) &&
+ dl->minor == (int)minor(stb.st_rdev))
break;
}
if (!dl) {
int seq;
char nm[20];
int dfd;
- int devnum = fd2devnum(fd);
- enum sysfs_read_flags flags;
- flags = GET_LEVEL|GET_VERSION|GET_DEVS|GET_STATE;
- if (mdmon_running(devnum))
- flags |= SKIP_GONE_DEVS;
-
- sra = sysfs_read(fd, 0, flags);
+ sra = sysfs_read(fd, 0, GET_LEVEL|GET_VERSION|GET_DEVS|GET_STATE);
if (!sra)
return 1;
if (sra->array.major_version != -1 ||
return 1;
}
if (st->subarray[0]) {
+ unsigned long val;
struct vcl *v;
+ char *ep;
+
+ val = strtoul(st->subarray, &ep, 10);
+ if (*ep != '\0') {
+ free(super);
+ return 1;
+ }
for (v = super->conflist; v; v = v->next)
- if (v->vcnum == atoi(st->subarray))
+ if (v->vcnum == val)
super->currentconf = v;
- if (!super->currentconf)
+ if (!super->currentconf) {
+ free(super);
return 1;
+ }
}
+
*sbp = super;
if (st->ss == NULL) {
st->ss = &super_ddf;
for (vc = ddf->conflist ; vc ; vc=vc->next)
{
- int i;
- int j;
+ unsigned int i;
+ unsigned int j;
struct mdinfo *this;
this = malloc(sizeof(*this));
memset(this, 0, sizeof(*this));
devnum2devname(st->container_dev),
this->container_member);
- for (i=0 ; i < ddf->mppe ; i++) {
+ for (i = 0 ; i < ddf->mppe ; i++) {
struct mdinfo *dev;
struct dl *d;
static void ddf_set_disk(struct active_array *a, int n, int state)
{
struct ddf_super *ddf = a->container->sb;
- int inst = a->info.container_member;
+ unsigned int inst = a->info.container_member;
struct vd_config *vc = find_vdcr(ddf, inst);
int pd = find_phys(ddf, vc->phys_refnum[n]);
int i, st, working;
struct vd_config *vc;
struct vcl *vcl;
struct dl *dl;
- int mppe;
- int ent;
+ unsigned int mppe;
+ unsigned int ent;
dprintf("Process update %x\n", *magic);
dprintf("len %d %d\n", update->len, ddf->conf_rec_len);
mppe = __be16_to_cpu(ddf->anchor.max_primary_element_entries);
- if (update->len != ddf->conf_rec_len * 512)
+ if ((unsigned)update->len != ddf->conf_rec_len * 512)
return;
vc = (struct vd_config*)update->buf;
for (vcl = ddf->conflist; vcl ; vcl = vcl->next)
}
/* Now make sure vlist is correct for each dl. */
for (dl = ddf->dlist; dl; dl = dl->next) {
- int dn;
- int vn = 0;
+ unsigned int dn;
+ unsigned int vn = 0;
for (vcl = ddf->conflist; vcl ; vcl = vcl->next)
for (dn=0; dn < ddf->mppe ; dn++)
if (vcl->conf.phys_refnum[dn] ==
int is_global = 0;
int is_dedicated = 0;
struct extent *ex;
- int j;
+ unsigned int j;
/* If in this array, skip */
for (d2 = a->info.devs ; d2 ; d2 = d2->next)
if (d2->disk.major == dl->major &&