struct md_list *next;
};
-#define pr_vrb(fmt, arg...) (void) (verbose && fprintf(stderr, Name fmt, ##arg))
+#define pr_vrb(fmt, arg...) (void) (verbose && pr_err(fmt, ##arg))
static __u8 migr_type(struct imsm_dev *dev)
{
static struct intel_hba * alloc_intel_hba(struct sys_dev *device)
{
- struct intel_hba *result = malloc(sizeof(*result));
- if (result) {
- result->type = device->type;
- result->path = strdup(device->path);
- result->next = NULL;
- if (result->path && (result->pci_id = strrchr(result->path, '/')) != NULL)
- result->pci_id++;
- }
+ struct intel_hba *result = xmalloc(sizeof(*result));
+
+ result->type = device->type;
+ result->path = xstrdup(device->path);
+ result->next = NULL;
+ if (result->path && (result->pci_id = strrchr(result->path, '/')) != NULL)
+ result->pci_id++;
+
return result;
}
)
return NULL;
- st = malloc(sizeof(*st));
- if (!st)
- return NULL;
- memset(st, 0, sizeof(*st));
+ st = xcalloc(1, sizeof(*st));
st->container_dev = NoMdDev;
st->ss = &super_imsm;
st->max_devs = IMSM_MAX_DEVICES;
else
reservation = MPB_SECTOR_CNT + IMSM_RESERVED_SECTORS;
- rv = malloc(sizeof(struct extent) * (memberships + 1));
- if (!rv)
- return NULL;
+ rv = xcalloc(sizeof(struct extent), (memberships + 1));
e = rv;
for (i = 0; i < super->anchor->num_raid_devs; i++) {
not_supported &= attributes;
if (not_supported) {
- fprintf(stderr, Name "(IMSM): Unsupported attributes : %x\n",
+ pr_err("(IMSM): Unsupported attributes : %x\n",
(unsigned)__le32_to_cpu(not_supported));
if (not_supported & MPB_ATTRIB_CHECKSUM_VERIFY) {
dprintf("\t\tMPB_ATTRIB_CHECKSUM_VERIFY \n");
if (port_count > (int)sizeof(port_mask) * 8) {
if (verbose)
- fprintf(stderr, Name ": port_count %d out of range\n", port_count);
+ pr_err("port_count %d out of range\n", port_count);
return 2;
}
/* retrieve the scsi device type */
if (asprintf(&device, "/sys/dev/block/%d:%d/device/xxxxxxx", major, minor) < 0) {
if (verbose)
- fprintf(stderr, Name ": failed to allocate 'device'\n");
+ pr_err("failed to allocate 'device'\n");
err = 2;
break;
}
sprintf(device, "/sys/dev/block/%d:%d/device/type", major, minor);
if (load_sys(device, buf) != 0) {
if (verbose)
- fprintf(stderr, Name ": failed to read device type for %s\n",
+ pr_err("failed to read device type for %s\n",
path);
err = 2;
free(device);
c = strchr(&path[hba_len], '/');
if (!c) {
if (verbose)
- fprintf(stderr, Name ": %s - invalid path name\n", path + hba_len);
+ pr_err("%s - invalid path name\n", path + hba_len);
err = 2;
break;
}
else {
if (verbose) {
*c = '/'; /* repair the full string */
- fprintf(stderr, Name ": failed to determine port number for %s\n",
+ pr_err("failed to determine port number for %s\n",
path);
}
err = 2;
static void print_found_intel_controllers(struct sys_dev *elem)
{
for (; elem; elem = elem->next) {
- fprintf(stderr, Name ": found Intel(R) ");
+ pr_err("found Intel(R) ");
if (elem->type == SYS_DEV_SATA)
fprintf(stderr, "SATA ");
else if (elem->type == SYS_DEV_SAS)
list = find_intel_devices();
if (!list) {
if (verbose)
- fprintf(stderr, Name ": no active Intel(R) RAID "
+ pr_err("no active Intel(R) RAID "
"controller found.\n");
free_sys_dev(&list);
return 2;
for (hba = list; hba; hba = hba->next) {
orom = find_imsm_capability(hba->type);
if (!orom)
- fprintf(stderr, Name ": imsm capabilities not found for controller: %s (type %s)\n",
+ pr_err("imsm capabilities not found for controller: %s (type %s)\n",
hba->path, get_sys_dev_type(hba->type));
else
print_imsm_capability(orom);
host_base = ahci_get_port_count(hba->path, &port_count);
if (ahci_enumerate_ports(hba->path, port_count, host_base, verbose)) {
if (verbose)
- fprintf(stderr, Name ": failed to enumerate "
+ pr_err("failed to enumerate "
"ports on SATA controller at %s.", hba->pci_id);
result |= 2;
}
get_dev_size(fd, NULL, &dsize);
if (lseek64(fd, dsize - MIGR_REC_POSITION, SEEK_SET) < 0) {
- fprintf(stderr,
- Name ": Cannot seek to anchor block: %s\n",
- strerror(errno));
+ pr_err("Cannot seek to anchor block: %s\n",
+ strerror(errno));
goto out;
}
if (read(fd, super->migr_rec_buf, MIGR_REC_BUF_SIZE) !=
MIGR_REC_BUF_SIZE) {
- fprintf(stderr,
- Name ": Cannot read migr record block: %s\n",
- strerror(errno));
+ pr_err("Cannot read migr record block: %s\n",
+ strerror(errno));
goto out;
}
ret_val = 0;
update_memory_size =
sizeof(struct imsm_update_general_migration_checkpoint);
- *u = calloc(1, update_memory_size);
+ *u = xcalloc(1, update_memory_size);
if (*u == NULL) {
dprintf("error: cannot get memory for "
"imsm_create_metadata_checkpoint_update update\n");
continue;
get_dev_size(fd, NULL, &dsize);
if (lseek64(fd, dsize - MIGR_REC_POSITION, SEEK_SET) < 0) {
- fprintf(stderr,
- Name ": Cannot seek to anchor block: %s\n",
- strerror(errno));
+ pr_err("Cannot seek to anchor block: %s\n",
+ strerror(errno));
goto out;
}
if (write(fd, super->migr_rec_buf, MIGR_REC_BUF_SIZE) !=
MIGR_REC_BUF_SIZE) {
- fprintf(stderr,
- Name ": Cannot write migr record block: %s\n",
- strerror(errno));
+ pr_err("Cannot write migr record block: %s\n",
+ strerror(errno));
goto out;
}
close(fd);
if (!super || !super->disks)
return NULL;
dl = super->disks;
- mddev = malloc(sizeof(*mddev));
- if (!mddev) {
- fprintf(stderr, Name ": Failed to allocate memory.\n");
- return NULL;
- }
- memset(mddev, 0, sizeof(*mddev));
+ mddev = xcalloc(1, sizeof(*mddev));
while (dl) {
struct mdinfo *tmp;
disk = &dl->disk;
- tmp = malloc(sizeof(*tmp));
- if (!tmp) {
- fprintf(stderr, Name ": Failed to allocate memory.\n");
- if (mddev)
- sysfs_free(mddev);
- return NULL;
- }
- memset(tmp, 0, sizeof(*tmp));
+ tmp = xcalloc(1, sizeof(*tmp));
if (mddev->devs)
tmp->next = mddev->devs;
mddev->devs = tmp;
* fails here we don't associate the spare
*/
for (i = 0; i < sec->anchor->num_raid_devs; i++) {
- dv = malloc(sizeof(*dv));
- if (!dv)
- break;
- dev = malloc(sizeof_imsm_dev(get_imsm_dev(sec, i), 1));
- if (!dev) {
- free(dv);
- break;
- }
+ dv = xmalloc(sizeof(*dv));
+ dev = xmalloc(sizeof_imsm_dev(get_imsm_dev(sec, i), 1));
dv->dev = dev;
dv->index = i;
dv->next = first->devlist;
if (rv != 0) {
if (devname)
- fprintf(stderr,
- Name ": Failed to retrieve serial for %s\n",
- devname);
+ pr_err("Failed to retrieve serial for %s\n",
+ devname);
return rv;
}
rsp_len = scsi_serial[3];
if (!rsp_len) {
if (devname)
- fprintf(stderr,
- Name ": Failed to retrieve serial for %s\n",
- devname);
+ pr_err("Failed to retrieve serial for %s\n",
+ devname);
return 2;
}
rsp_buf = (char *) &scsi_serial[4];
if (rv != 0)
return 2;
- dl = calloc(1, sizeof(*dl));
- if (!dl) {
- if (devname)
- fprintf(stderr,
- Name ": failed to allocate disk buffer for %s\n",
- devname);
- return 2;
- }
+ dl = xcalloc(1, sizeof(*dl));
fstat(fd, &stb);
dl->major = major(stb.st_rdev);
dl->e = NULL;
fd2devname(fd, name);
if (devname)
- dl->devname = strdup(devname);
+ dl->devname = xstrdup(devname);
else
- dl->devname = strdup(name);
+ dl->devname = xstrdup(name);
/* look up this disk's index in the current anchor */
disk = __serial_to_disk(dl->serial, super->anchor, &dl->index);
if (len_migr > len)
space_needed += len_migr - len;
- dv = malloc(sizeof(*dv));
- if (!dv)
- return 1;
+ dv = xmalloc(sizeof(*dv));
if (max_len < len_migr)
max_len = len_migr;
if (max_len > len_migr)
space_needed += max_len - len_migr;
- dev_new = malloc(max_len);
- if (!dev_new) {
- free(dv);
- return 1;
- }
+ dev_new = xmalloc(max_len);
imsm_copy_dev(dev_new, dev_iter);
dv->dev = dev_new;
dv->index = i;
get_dev_size(fd, NULL, &dsize);
if (dsize < 1024) {
if (devname)
- fprintf(stderr,
- Name ": %s: device to small for imsm\n",
- devname);
+ pr_err("%s: device to small for imsm\n",
+ devname);
return 1;
}
if (lseek64(fd, dsize - (512 * 2), SEEK_SET) < 0) {
if (devname)
- fprintf(stderr, Name
- ": Cannot seek to anchor block on %s: %s\n",
- devname, strerror(errno));
+ pr_err("Cannot seek to anchor block on %s: %s\n",
+ devname, strerror(errno));
return 1;
}
if (posix_memalign((void**)&anchor, 512, 512) != 0) {
if (devname)
- fprintf(stderr,
- Name ": Failed to allocate imsm anchor buffer"
- " on %s\n", devname);
+ pr_err("Failed to allocate imsm anchor buffer"
+ " on %s\n", devname);
return 1;
}
if (read(fd, anchor, 512) != 512) {
if (devname)
- fprintf(stderr,
- Name ": Cannot read anchor block on %s: %s\n",
- devname, strerror(errno));
+ pr_err("Cannot read anchor block on %s: %s\n",
+ devname, strerror(errno));
free(anchor);
return 1;
}
if (strncmp((char *) anchor->sig, MPB_SIGNATURE, MPB_SIG_LEN) != 0) {
if (devname)
- fprintf(stderr,
- Name ": no IMSM anchor on %s\n", devname);
+ pr_err("no IMSM anchor on %s\n", devname);
free(anchor);
return 2;
}
super->len = ROUND_UP(anchor->mpb_size, 512);
if (posix_memalign(&super->buf, 512, super->len) != 0) {
if (devname)
- fprintf(stderr,
- Name ": unable to allocate %zu byte mpb buffer\n",
- super->len);
+ pr_err("unable to allocate %zu byte mpb buffer\n",
+ super->len);
free(anchor);
return 2;
}
free(anchor);
if (posix_memalign(&super->migr_rec_buf, 512, MIGR_REC_BUF_SIZE) != 0) {
- fprintf(stderr, Name
- ": %s could not allocate migr_rec buffer\n", __func__);
+ pr_err("%s could not allocate migr_rec buffer\n", __func__);
free(super->buf);
return 2;
}
check_sum = __gen_imsm_checksum(super->anchor);
if (check_sum != __le32_to_cpu(super->anchor->check_sum)) {
if (devname)
- fprintf(stderr,
- Name ": IMSM checksum %x != %x on %s\n",
- check_sum,
- __le32_to_cpu(super->anchor->check_sum),
- devname);
+ pr_err("IMSM checksum %x != %x on %s\n",
+ check_sum,
+ __le32_to_cpu(super->anchor->check_sum),
+ devname);
return 2;
}
/* read the extended mpb */
if (lseek64(fd, dsize - (512 * (2 + sectors)), SEEK_SET) < 0) {
if (devname)
- fprintf(stderr,
- Name ": Cannot seek to extended mpb on %s: %s\n",
- devname, strerror(errno));
+ pr_err("Cannot seek to extended mpb on %s: %s\n",
+ devname, strerror(errno));
return 1;
}
if ((unsigned)read(fd, super->buf + 512, super->len - 512) != super->len - 512) {
if (devname)
- fprintf(stderr,
- Name ": Cannot read extended mpb on %s: %s\n",
- devname, strerror(errno));
+ pr_err("Cannot read extended mpb on %s: %s\n",
+ devname, strerror(errno));
return 2;
}
check_sum = __gen_imsm_checksum(super->anchor);
if (check_sum != __le32_to_cpu(super->anchor->check_sum)) {
if (devname)
- fprintf(stderr,
- Name ": IMSM checksum %x != %x on %s\n",
- check_sum, __le32_to_cpu(super->anchor->check_sum),
- devname);
+ pr_err("IMSM checksum %x != %x on %s\n",
+ check_sum, __le32_to_cpu(super->anchor->check_sum),
+ devname);
return 3;
}
static struct intel_super *alloc_super(void)
{
- struct intel_super *super = malloc(sizeof(*super));
+ struct intel_super *super = xcalloc(1, sizeof(*super));
- if (super) {
- memset(super, 0, sizeof(*super));
- super->current_vol = -1;
- super->create_offset = ~((unsigned long long) 0);
- }
+ super->current_vol = -1;
+ super->create_offset = ~((unsigned long long) 0);
return super;
}
hba_name = find_disk_attached_hba(fd, NULL);
if (!hba_name) {
if (devname)
- fprintf(stderr,
- Name ": %s is not attached to Intel(R) RAID controller.\n",
- devname);
+ pr_err("%s is not attached to Intel(R) RAID controller.\n",
+ devname);
return 1;
}
rv = attach_hba_to_super(super, hba_name);
if (devname) {
struct intel_hba *hba = super->hba;
- fprintf(stderr, Name ": %s is attached to Intel(R) %s RAID "
+ pr_err("%s is attached to Intel(R) %s RAID "
"controller (%s),\n"
" but the container is assigned to Intel(R) "
"%s RAID controller (",
if (dl)
continue;
- dl = malloc(sizeof(*dl));
- if (!dl)
- return 1;
+ dl = xmalloc(sizeof(*dl));
dl->major = 0;
dl->minor = 0;
dl->fd = -1;
- dl->devname = strdup("missing");
+ dl->devname = xstrdup("missing");
dl->index = i;
serialcpy(dl->serial, disk->serial);
dl->disk = *disk;
is_failed(&idisk->disk))
idisk->disk.status &= ~(SPARE_DISK);
} else {
- idisk = calloc(1, sizeof(*idisk));
- if (!idisk)
- return -1;
+ idisk = xcalloc(1, sizeof(*idisk));
idisk->owner = IMSM_UNKNOWN_OWNER;
idisk->disk = *disk;
idisk->next = *disk_list;
if (s == champion)
continue;
+ mpb->attributes |= s->anchor->attributes & MPB_ATTRIB_2TB_DISK;
+
for (i = 0; i < mpb->num_disks; i++) {
struct imsm_disk *disk;
/* Check migration compatibility */
if ((err == 0) && (check_mpb_migr_compatibility(super) != 0)) {
- fprintf(stderr, Name ": Unsupported migration detected");
+ pr_err("Unsupported migration detected");
if (devname)
fprintf(stderr, " on %s\n", devname);
else
int lmax = 0;
int fd = dev_open(tmpdev->devname, O_RDONLY|O_EXCL);
if (fd < 0) {
- fprintf(stderr, Name ": cannot open device %s: %s\n",
+ pr_err("cannot open device %s: %s\n",
tmpdev->devname, strerror(errno));
err = 8;
goto error;
} else {
if (s)
free(s);
- if (dfd)
+ if (dfd >= 0)
close(dfd);
}
if ((dfd >= 0) && (!keep_fd))
free_super_imsm(st);
super = alloc_super();
- if (!super) {
- fprintf(stderr,
- Name ": malloc of %zu failed.\n",
- sizeof(*super));
- return 1;
- }
/* Load hba and capabilities if they exist.
* But do not preclude loading metadata in case capabilities or hba are
* non-compliant and ignore_hw_compat is set.
/* no orom/efi or non-intel hba of the disk */
if ((rv != 0) && (st->ignore_hw_compat == 0)) {
if (devname)
- fprintf(stderr,
- Name ": No OROM/EFI properties for %s\n", devname);
+ pr_err("No OROM/EFI properties for %s\n", devname);
free_imsm(super);
return 2;
}
if (rv) {
if (devname)
- fprintf(stderr,
- Name ": Failed to load all information "
- "sections on %s\n", devname);
+ pr_err("Failed to load all information "
+ "sections on %s\n", devname);
free_imsm(super);
return rv;
}
if (load_imsm_migr_rec(super, NULL) == 0) {
/* Check for unsupported migration features */
if (check_mpb_migr_compatibility(super) != 0) {
- fprintf(stderr,
- Name ": Unsupported migration detected");
+ pr_err("Unsupported migration detected");
if (devname)
fprintf(stderr, " on %s\n", devname);
else
}
if (reason && !quiet)
- fprintf(stderr, Name ": imsm volume name %s\n", reason);
+ pr_err("imsm volume name %s\n", reason);
return !reason;
}
unsigned long long num_data_stripes;
if (super->orom && mpb->num_raid_devs >= super->orom->vpa) {
- fprintf(stderr, Name": This imsm-container already has the "
+ pr_err("This imsm-container already has the "
"maximum of %d volumes\n", super->orom->vpa);
return 0;
}
size_t size_round = ROUND_UP(size_new, 512);
if (posix_memalign(&mpb_new, 512, size_round) != 0) {
- fprintf(stderr, Name": could not allocate new mpb\n");
+ pr_err("could not allocate new mpb\n");
return 0;
}
if (posix_memalign(&super->migr_rec_buf, 512,
MIGR_REC_BUF_SIZE) != 0) {
- fprintf(stderr, Name
- ": %s could not allocate migr_rec buffer\n",
- __func__);
+ pr_err("%s could not allocate migr_rec buffer\n",
+ __func__);
free(super->buf);
free(super);
free(mpb_new);
for (d = super->missing; d; d = d->next)
missing++;
if (info->failed_disks > missing) {
- fprintf(stderr, Name": unable to add 'missing' disk to container\n");
+ pr_err("unable to add 'missing' disk to container\n");
return 0;
}
}
if (!check_name(super, name, 0))
return 0;
- dv = malloc(sizeof(*dv));
- if (!dv) {
- fprintf(stderr, Name ": failed to allocate device list entry\n");
- return 0;
- }
- dev = calloc(1, sizeof(*dev) + sizeof(__u32) * (info->raid_disks - 1));
- if (!dev) {
- free(dv);
- fprintf(stderr, Name": could not allocate raid device\n");
- return 0;
- }
-
+ dv = xmalloc(sizeof(*dv));
+ dev = xcalloc(1, sizeof(*dev) + sizeof(__u32) * (info->raid_disks - 1));
strncpy((char *) dev->volume, name, MAX_RAID_SERIAL_LEN);
array_blocks = calc_array_size(info->level, info->raid_disks,
info->layout, info->chunk_size,
if (info->level == 1 && info->raid_disks > 2) {
free(dev);
free(dv);
- fprintf(stderr, Name": imsm does not support more than 2 disks"
+ pr_err("imsm does not support more than 2 disks"
"in a raid1 volume\n");
return 0;
}
super = NULL;
}
if (!super) {
- fprintf(stderr, Name
- ": %s could not allocate superblock\n", __func__);
+ pr_err("%s could not allocate superblock\n", __func__);
return 0;
}
if (posix_memalign(&super->migr_rec_buf, 512, MIGR_REC_BUF_SIZE) != 0) {
- fprintf(stderr, Name
- ": %s could not allocate migr_rec buffer\n", __func__);
+ pr_err("%s could not allocate migr_rec buffer\n", __func__);
free(super->buf);
free(super);
return 0;
map = get_imsm_map(dev, MAP_0);
if (! (dk->state & (1<<MD_DISK_SYNC))) {
- fprintf(stderr, Name ": %s: Cannot add spare devices to IMSM volume\n",
+ pr_err("%s: Cannot add spare devices to IMSM volume\n",
devname);
return 1;
}
}
if (!dl) {
- fprintf(stderr, Name ": %s is not a member of the same container\n", devname);
+ pr_err("%s is not a member of the same container\n", devname);
return 1;
}
slot = get_imsm_disk_slot(map, dl->index);
if (slot >= 0 &&
(get_imsm_ord_tbl_ent(dev, slot, MAP_X) & IMSM_ORD_REBUILD) == 0) {
- fprintf(stderr, Name ": %s has been included in this array twice\n",
+ pr_err("%s has been included in this array twice\n",
devname);
return 1;
}
_disk = __get_imsm_disk(mpb, dl->index);
if (!_dev || !_disk) {
- fprintf(stderr, Name ": BUG mpb setup error\n");
+ pr_err("BUG mpb setup error\n");
return 1;
}
*_dev = *dev;
return add_to_super_imsm_volume(st, dk, fd, devname);
fstat(fd, &stb);
- dd = malloc(sizeof(*dd));
- if (!dd) {
- fprintf(stderr,
- Name ": malloc failed %s:%d.\n", __func__, __LINE__);
- return 1;
- }
- memset(dd, 0, sizeof(*dd));
+ dd = xcalloc(sizeof(*dd), 1);
dd->major = major(stb.st_rdev);
dd->minor = minor(stb.st_rdev);
- dd->devname = devname ? strdup(devname) : NULL;
+ dd->devname = devname ? xstrdup(devname) : NULL;
dd->fd = fd;
dd->e = NULL;
dd->action = DISK_ADD;
rv = imsm_read_serial(fd, devname, dd->serial);
if (rv) {
- fprintf(stderr,
- Name ": failed to retrieve scsi serial, aborting\n");
+ pr_err("failed to retrieve scsi serial, aborting\n");
free(dd);
abort();
}
* is prepared.
*/
if (!st->update_tail) {
- fprintf(stderr,
- Name ": %s shall be used in mdmon context only"
- "(line %d).\n", __func__, __LINE__);
+ pr_err("%s shall be used in mdmon context only"
+ "(line %d).\n", __func__, __LINE__);
return 1;
}
- dd = malloc(sizeof(*dd));
- if (!dd) {
- fprintf(stderr,
- Name ": malloc failed %s:%d.\n", __func__, __LINE__);
- return 1;
- }
- memset(dd, 0, sizeof(*dd));
+ dd = xcalloc(1, sizeof(*dd));
dd->major = dk->major;
dd->minor = dk->minor;
dd->fd = -1;
len = sizeof(*u) - sizeof(*dev) + sizeof_imsm_dev(dev, 0) +
sizeof(*inf) * map->num_members;
- u = malloc(len);
- if (!u) {
- fprintf(stderr, "%s: failed to allocate update buffer\n",
- __func__);
- return 1;
- }
-
+ u = xmalloc(len);
u->type = update_create_array;
u->dev_idx = dev_idx;
imsm_copy_dev(&u->dev, dev);
return 0;
len = sizeof(*u);
- u = malloc(len);
- if (!u) {
- fprintf(stderr, "%s: failed to allocate update buffer\n",
- __func__);
- return 1;
- }
-
+ u = xmalloc(len);
u->type = update_add_remove_disk;
append_metadata_update(st, u, len);
fd = open(dev, O_RDONLY|O_EXCL, 0);
if (fd < 0) {
if (verbose)
- fprintf(stderr, Name ": imsm: Cannot open %s: %s\n",
+ pr_err("imsm: Cannot open %s: %s\n",
dev, strerror(errno));
return 0;
}
* note that there is no fd for the disks in array.
*/
super = alloc_super();
- if (!super) {
- fprintf(stderr,
- Name ": malloc of %zu failed.\n",
- sizeof(*super));
- close(fd);
- return 0;
- }
-
rv = find_intel_hba_capability(fd, super, verbose ? dev : NULL);
if (rv != 0) {
#if DEBUG
if (super->orom) {
if (raiddisks > super->orom->tds) {
if (verbose)
- fprintf(stderr, Name ": %d exceeds maximum number of"
+ pr_err("%d exceeds maximum number of"
" platform supported disks: %d\n",
raiddisks, super->orom->tds);
free_imsm(super);
if ((super->orom->attr & IMSM_OROM_ATTR_2TB_DISK) == 0 &&
(ldsize >> 9) >> 32 > 0) {
if (verbose)
- fprintf(stderr, Name ": %s exceeds maximum platform supported size\n", dev);
+ pr_err("%s exceeds maximum platform supported size\n", dev);
free_imsm(super);
return 0;
}
* 'maxsize' given the "all disks in an array must share a common start
* offset" constraint
*/
- struct extent *e = calloc(sum_extents, sizeof(*e));
+ struct extent *e = xcalloc(sum_extents, sizeof(*e));
struct dl *dl;
int i, j;
int start_extent;
unsigned long long maxsize;
unsigned long reserve;
- if (!e)
- return 0;
-
/* coalesce and sort all extents. also, check to see if we need to
* reserve space between member arrays
*/
struct dev_member *dev = memb->members;
int fd = -1;
while(dev && (fd < 0)) {
- char *path = malloc(strlen(dev->name) + strlen("/dev/") + 1);
- if (path) {
- num = sprintf(path, "%s%s", "/dev/", dev->name);
- if (num > 0)
- fd = open(path, O_RDONLY, 0);
- if ((num <= 0) || (fd < 0)) {
- pr_vrb(": Cannot open %s: %s\n",
- dev->name, strerror(errno));
- }
- free(path);
+ char *path = xmalloc(strlen(dev->name) + strlen("/dev/") + 1);
+ num = sprintf(path, "%s%s", "/dev/", dev->name);
+ if (num > 0)
+ fd = open(path, O_RDONLY, 0);
+ if ((num <= 0) || (fd < 0)) {
+ pr_vrb(": Cannot open %s: %s\n",
+ dev->name, strerror(errno));
}
+ free(path);
dev = dev->next;
}
found = 0;
}
}
if (*devlist && (found < dpa)) {
- dv = calloc(1, sizeof(*dv));
- if (dv == NULL)
- fprintf(stderr, Name ": calloc failed\n");
- else {
- dv->devname = malloc(strlen(memb->dev) + strlen("/dev/") + 1);
- if (dv->devname != NULL) {
- sprintf(dv->devname, "%s%s", "/dev/", memb->dev);
- dv->found = found;
- dv->used = 0;
- dv->next = *devlist;
- *devlist = dv;
- } else
- free(dv);
- }
+ dv = xcalloc(1, sizeof(*dv));
+ dv->devname = xmalloc(strlen(memb->dev) + strlen("/dev/") + 1);
+ sprintf(dv->devname, "%s%s", "/dev/", memb->dev);
+ dv->found = found;
+ dv->used = 0;
+ dv->next = *devlist;
+ *devlist = dv;
}
}
if (fd >= 0)
struct md_list *dv = NULL;
for(i = 0; i < 12; i++) {
- dv = calloc(1, sizeof(*dv));
- if (dv == NULL) {
- fprintf(stderr, Name ": calloc failed\n");
- break;
- }
- dv->devname = malloc(40);
- if (dv->devname == NULL) {
- fprintf(stderr, Name ": malloc failed\n");
- free(dv);
- break;
- }
+ dv = xcalloc(1, sizeof(*dv));
+ dv->devname = xmalloc(40);
sprintf(dv->devname, "/dev/loop%d", i);
dv->next = devlist;
devlist = dv;
fd2devname(fd, buf);
close(fd);
} else {
- fprintf(stderr, Name ": cannot open device: %s\n",
+ pr_err("cannot open device: %s\n",
ent->d_name);
continue;
}
- dv = calloc(1, sizeof(*dv));
- if (dv == NULL) {
- fprintf(stderr, Name ": malloc failed\n");
- err = 1;
- break;
- }
- dv->devname = strdup(buf);
- if (dv->devname == NULL) {
- fprintf(stderr, Name ": malloc failed\n");
- err = 1;
- free(dv);
- break;
- }
+ dv = xcalloc(1, sizeof(*dv));
+ dv->devname = xstrdup(buf);
dv->next = devlist;
devlist = dv;
}
free(dv);
}
}
+ closedir(dir);
return devlist;
}
mpb = super->anchor;
if (!validate_geometry_imsm_orom(super, level, layout, raiddisks, chunk, size, verbose)) {
- fprintf(stderr, Name ": RAID gemetry validation failed. "
+ pr_err("RAID gemetry validation failed. "
"Cannot proceed with the action(s).\n");
return 0;
}
}
if (dcnt < raiddisks) {
if (verbose)
- fprintf(stderr, Name ": imsm: Not enough "
+ pr_err("imsm: Not enough "
"devices with space for this array "
"(%d < %d)\n",
dcnt, raiddisks);
}
if (!dl) {
if (verbose)
- fprintf(stderr, Name ": %s is not in the "
+ pr_err("%s is not in the "
"same imsm set\n", dev);
return 0;
} else if (super->orom && dl->index < 0 && mpb->num_raid_devs) {
* understand this configuration (all member disks must be
* members of each array in the container).
*/
- fprintf(stderr, Name ": %s is a spare and a volume"
+ pr_err("%s is a spare and a volume"
" is already defined for this container\n", dev);
- fprintf(stderr, Name ": The option-rom requires all member"
+ pr_err("The option-rom requires all member"
" disks to be a member of all volumes\n");
return 0;
} else if (super->orom && mpb->num_raid_devs > 0 &&
mpb->num_disks != raiddisks) {
- fprintf(stderr, Name ": The option-rom requires all member"
+ pr_err("The option-rom requires all member"
" disks to be a member of all volumes\n");
return 0;
}
dl->extent_cnt = i;
} else {
if (verbose)
- fprintf(stderr, Name ": unable to determine free space for: %s\n",
+ pr_err("unable to determine free space for: %s\n",
dev);
return 0;
}
if (maxsize < size) {
if (verbose)
- fprintf(stderr, Name ": %s not enough space (%llu < %llu)\n",
+ pr_err("%s not enough space (%llu < %llu)\n",
dev, maxsize, size);
return 0;
}
if (!check_env("IMSM_NO_PLATFORM") &&
mpb->num_raid_devs > 0 && size && size != maxsize) {
- fprintf(stderr, Name ": attempting to create a second "
+ pr_err("attempting to create a second "
"volume with size less then remaining space. "
"Aborting...\n");
return 0;
if (maxsize < size || maxsize == 0) {
if (verbose) {
if (maxsize == 0)
- fprintf(stderr, Name ": no free space"
+ pr_err("no free space"
" left on device. Aborting...\n");
else
- fprintf(stderr, Name ": not enough space"
+ pr_err("not enough space"
" to create volume of given size"
" (%llu < %llu). Aborting...\n",
maxsize, size);
(super->orom && used && used != raiddisks) ||
maxsize < minsize ||
maxsize == 0) {
- fprintf(stderr, Name ": not enough devices with space to create array.\n");
+ pr_err("not enough devices with space to create array.\n");
return 0; /* No enough free spaces large enough */
}
}
if (!check_env("IMSM_NO_PLATFORM") &&
mpb->num_raid_devs > 0 && size && size != maxsize) {
- fprintf(stderr, Name ": attempting to create a second "
+ pr_err("attempting to create a second "
"volume with size less then remaining space. "
"Aborting...\n");
return 0;
fd = open(dev, O_RDONLY|O_EXCL, 0);
if (fd >= 0) {
if (verbose)
- fprintf(stderr,
- Name ": Cannot create this array on device %s\n",
- dev);
+ pr_err("Cannot create this array on device %s\n",
+ dev);
close(fd);
return 0;
}
if (errno != EBUSY || (fd = open(dev, O_RDONLY, 0)) < 0) {
if (verbose)
- fprintf(stderr, Name ": Cannot open %s: %s\n",
+ pr_err("Cannot open %s: %s\n",
dev, strerror(errno));
return 0;
}
close(fd);
if (cfd < 0) {
if (verbose)
- fprintf(stderr, Name ": Cannot use %s: It is busy\n",
+ pr_err("Cannot use %s: It is busy\n",
dev);
return 0;
}
}
if (verbose)
- fprintf(stderr, Name ": failed container membership check\n");
+ pr_err("failed container membership check\n");
close(cfd);
return 0;
continue;
sprintf(subarray, "%u", i);
if (is_subarray_active(subarray, st->devname)) {
- fprintf(stderr,
- Name ": deleting subarray-%d would change the UUID of active subarray-%d, aborting\n",
- current_vol, i);
+ pr_err("deleting subarray-%d would change the UUID of active subarray-%d, aborting\n",
+ current_vol, i);
return 2;
}
}
if (st->update_tail) {
- struct imsm_update_kill_array *u = malloc(sizeof(*u));
+ struct imsm_update_kill_array *u = xmalloc(sizeof(*u));
- if (!u)
- return 2;
u->type = update_kill_array;
u->dev_idx = current_vol;
append_metadata_update(st, u, sizeof(*u));
int vol;
if (is_subarray_active(subarray, st->devname)) {
- fprintf(stderr,
- Name ": Unable to update name of active subarray\n");
+ pr_err("Unable to update name of active subarray\n");
return 2;
}
return 2;
if (st->update_tail) {
- struct imsm_update_rename_array *u = malloc(sizeof(*u));
+ struct imsm_update_rename_array *u = xmalloc(sizeof(*u));
- if (!u)
- return 2;
u->type = update_rename_array;
u->dev_idx = vol;
snprintf((char *) u->name, MAX_RAID_SERIAL_LEN, "%s", name);
/* do not assemble arrays when not all attributes are supported */
if (imsm_check_attributes(mpb->attributes) == 0) {
sb_errors = 1;
- fprintf(stderr, Name ": Unsupported attributes in IMSM metadata."
+ pr_err("Unsupported attributes in IMSM metadata."
"Arrays activation is blocked.\n");
}
/* check for bad blocks */
if (imsm_bbm_log_size(super->anchor)) {
- fprintf(stderr, Name ": BBM log found in IMSM metadata."
- "Arrays activation is blocked.\n");
+ pr_err("BBM log found in IMSM metadata."
+ "Arrays activation is blocked.\n");
sb_errors = 1;
}
*/
if (dev->vol.migr_state &&
(migr_type(dev) == MIGR_STATE_CHANGE)) {
- fprintf(stderr, Name ": cannot assemble volume '%.16s':"
+ pr_err("cannot assemble volume '%.16s':"
" unsupported migration in progress\n",
dev->volume);
continue;
* OROM/EFI
*/
- this = malloc(sizeof(*this));
- if (!this) {
- fprintf(stderr, Name ": failed to allocate %zu bytes\n",
- sizeof(*this));
- break;
- }
+ this = xmalloc(sizeof(*this));
super->current_vol = i;
getinfo_super_imsm_volume(st, this, NULL);
map->num_members, /* raid disks */
&chunk, join_u32(dev->size_low, dev->size_high),
1 /* verbose */)) {
- fprintf(stderr, Name ": IMSM RAID geometry validation"
+ pr_err("IMSM RAID geometry validation"
" failed. Array %s activation is blocked.\n",
dev->volume);
this->array.state |=
if (skip)
continue;
- info_d = calloc(1, sizeof(*info_d));
- if (!info_d) {
- fprintf(stderr, Name ": failed to allocate disk"
- " for volume %.16s\n", dev->volume);
- info_d = this->devs;
- while (info_d) {
- struct mdinfo *d = info_d->next;
-
- free(info_d);
- info_d = d;
- }
- free(this);
- this = rest;
- break;
- }
+ info_d = xcalloc(1, sizeof(*info_d));
info_d->next = this->devs;
this->devs = info_d;
struct imsm_dev *dev = get_imsm_dev(super, inst);
struct imsm_map *map = get_imsm_map(dev, MAP_0);
struct imsm_disk *disk;
+ struct mdinfo *mdi;
+ int recovery_not_finished = 0;
int failed;
__u32 ord;
__u8 map_state;
dprintf("normal: ");
if (is_rebuilding(dev)) {
dprintf("while rebuilding");
+ /* check if recovery is really finished */
+ for (mdi = a->info.devs; mdi ; mdi = mdi->next)
+ if (mdi->recovery_start != MaxSector) {
+ recovery_not_finished = 1;
+ break;
+ }
+ if (recovery_not_finished) {
+ dprintf("\nimsm: Rebuild has not finished yet, "
+ "state not changed");
+ if (a->last_checkpoint < mdi->recovery_start) {
+ a->last_checkpoint = mdi->recovery_start;
+ super->updates_pending++;
+ }
+ break;
+ }
end_migration(dev, super, map_state);
map = get_imsm_map(dev, MAP_0);
map->failed_disk_num = ~0;
continue;
/* found a usable disk with enough space */
- di = malloc(sizeof(*di));
- if (!di)
- continue;
- memset(di, 0, sizeof(*di));
+ di = xcalloc(1, sizeof(*di));
/* dl->index will be -1 in the case we are activating a
* pristine spare. imsm_process_update() will create a
* Create a metadata_update record to update the
* disk_ord_tbl for the array
*/
- mu = malloc(sizeof(*mu));
- if (mu) {
- mu->buf = malloc(sizeof(struct imsm_update_activate_spare) * num_spares);
- if (mu->buf == NULL) {
- free(mu);
- mu = NULL;
- }
- }
- if (!mu) {
- while (rv) {
- struct mdinfo *n = rv->next;
-
- free(rv);
- rv = n;
- }
- return NULL;
- }
-
+ mu = xmalloc(sizeof(*mu));
+ mu->buf = xcalloc(num_spares,
+ sizeof(struct imsm_update_activate_spare));
mu->space = NULL;
mu->space_list = NULL;
mu->len = sizeof(struct imsm_update_activate_spare) * num_spares;
int num_members = map->num_members;
void *space;
int size, i;
- int err = 0;
/* allocate memory for added disks */
for (i = 0; i < num_members; i++) {
size = sizeof(struct dl);
- space = malloc(size);
- if (!space) {
- err++;
- break;
- }
+ space = xmalloc(size);
*tail = space;
tail = space;
*tail = NULL;
/* allocate memory for new device */
size = sizeof_imsm_dev(super->devlist->dev, 0) +
(num_members * sizeof(__u32));
- space = malloc(size);
- if (!space)
- err++;
- else {
- *tail = space;
- tail = space;
- *tail = NULL;
- }
- if (!err) {
- len = disks_to_mpb_size(num_members * 2);
- } else {
- /* if allocation didn't success, free buffer */
- while (update->space_list) {
- void **sp = update->space_list;
- update->space_list = *sp;
- free(sp);
- }
- }
+ space = xmalloc(size);
+ *tail = space;
+ tail = space;
+ *tail = NULL;
+ len = disks_to_mpb_size(num_members * 2);
}
break;
if (u->new_raid_disks > u->old_raid_disks)
size += sizeof(__u32)*2*
(u->new_raid_disks - u->old_raid_disks);
- s = malloc(size);
- if (!s)
- break;
+ s = xmalloc(size);
*space_tail = s;
space_tail = s;
*space_tail = NULL;
if (u->new_raid_disks > u->old_raid_disks)
size += sizeof(__u32)*2*
(u->new_raid_disks - u->old_raid_disks);
- s = malloc(size);
- if (!s)
- break;
+ s = xmalloc(size);
*space_tail = s;
space_tail = s;
*space_tail = NULL;
/* add space for disk in update
*/
size = sizeof(struct dl);
- s = malloc(size);
- if (!s) {
- free(update->space_list);
- update->space_list = NULL;
- break;
- }
+ s = xmalloc(size);
*space_tail = s;
space_tail = s;
*space_tail = NULL;
inf = get_disk_info(u);
len = sizeof_imsm_dev(dev, 1);
/* allocate a new super->devlist entry */
- dv = malloc(sizeof(*dv));
- if (dv) {
- dv->dev = malloc(len);
- if (dv->dev)
- update->space = dv;
- else {
- free(dv);
- update->space = NULL;
- }
- }
+ dv = xmalloc(sizeof(*dv));
+ dv->dev = xmalloc(len);
+ update->space = dv;
/* count how many spares will be converted to members */
for (i = 0; i < map->num_members; i++) {
unsigned long long start;
int data_disks = imsm_num_data_members(dev, MAP_0);
- targets = malloc(new_disks * sizeof(int));
- if (!targets)
- goto abort;
+ targets = xmalloc(new_disks * sizeof(int));
for (i = 0; i < new_disks; i++)
targets[i] = -1;
- target_offsets = malloc(new_disks * sizeof(unsigned long long));
- if (!target_offsets)
- goto abort;
+ target_offsets = xcalloc(new_disks, sizeof(unsigned long long));
start = info->reshape_progress * 512;
for (i = 0; i < new_disks; i++) {
start,
length,
buf) != 0) {
- fprintf(stderr, Name ": Error restoring stripes\n");
+ pr_err("Error restoring stripes\n");
goto abort;
}
unit_len = __le32_to_cpu(migr_rec->dest_depth_per_unit) * 512;
if (posix_memalign((void **)&buf, 512, unit_len) != 0)
goto abort;
- targets = malloc(new_disks * sizeof(int));
- if (!targets)
- goto abort;
+ targets = xcalloc(new_disks, sizeof(int));
if (open_backup_targets(info, new_disks, targets, super, id->dev)) {
- fprintf(stderr,
- Name ": Cannot open some devices belonging to array.\n");
+ pr_err("Cannot open some devices belonging to array.\n");
goto abort;
}
continue;
}
if (lseek64(targets[i], read_offset, SEEK_SET) < 0) {
- fprintf(stderr,
- Name ": Cannot seek to block: %s\n",
- strerror(errno));
+ pr_err("Cannot seek to block: %s\n",
+ strerror(errno));
skipped_disks++;
continue;
}
if ((unsigned)read(targets[i], buf, unit_len) != unit_len) {
- fprintf(stderr,
- Name ": Cannot read copy area block: %s\n",
- strerror(errno));
+ pr_err("Cannot read copy area block: %s\n",
+ strerror(errno));
skipped_disks++;
continue;
}
if (lseek64(targets[i], write_offset, SEEK_SET) < 0) {
- fprintf(stderr,
- Name ": Cannot seek to block: %s\n",
- strerror(errno));
+ pr_err("Cannot seek to block: %s\n",
+ strerror(errno));
skipped_disks++;
continue;
}
if ((unsigned)write(targets[i], buf, unit_len) != unit_len) {
- fprintf(stderr,
- Name ": Cannot restore block: %s\n",
- strerror(errno));
+ pr_err("Cannot restore block: %s\n",
+ strerror(errno));
skipped_disks++;
continue;
}
new_disks,
super,
id->dev)) {
- fprintf(stderr,
- Name ": Cannot restore data from backup."
- " Too many failed disks\n");
+ pr_err("Cannot restore data from backup."
+ " Too many failed disks\n");
goto abort;
}
/* now add space for spare disks that we need to add. */
update_memory_size += sizeof(u->new_disks[0]) * (delta_disks - 1);
- u = calloc(1, update_memory_size);
- if (u == NULL) {
- dprintf("error: "
- "cannot get memory for imsm_update_reshape update\n");
- return 0;
- }
+ u = xcalloc(1, update_memory_size);
u->type = update_reshape_container_disks;
u->old_raid_disks = old_raid_disks;
u->new_raid_disks = geo->raid_disks;
if (spares == NULL
|| delta_disks > spares->array.spare_disks) {
- fprintf(stderr, Name ": imsm: ERROR: Cannot get spare devices "
+ pr_err("imsm: ERROR: Cannot get spare devices "
"for %s.\n", geo->dev_name);
i = -1;
goto abort;
/* size of all update data without anchor */
update_memory_size = sizeof(struct imsm_update_size_change);
- u = calloc(1, update_memory_size);
- if (u == NULL) {
- dprintf("error: cannot get memory for "
- "imsm_create_metadata_update_for_size_change\n");
- return 0;
- }
+ u = xcalloc(1, update_memory_size);
u->type = update_size_change;
u->subdev = super->current_vol;
u->new_size = geo->size;
/* size of all update data without anchor */
update_memory_size = sizeof(struct imsm_update_reshape_migration);
- u = calloc(1, update_memory_size);
- if (u == NULL) {
- dprintf("error: cannot get memory for "
- "imsm_create_metadata_update_for_migration\n");
- return 0;
- }
+ u = xcalloc(1, update_memory_size);
u->type = update_reshape_migration;
u->subdev = super->current_vol;
u->new_level = geo->level;
struct imsm_dev *dev;
struct intel_super *super;
long long current_size;
+ unsigned long long free_size;
+ long long max_size;
+ int rv;
getinfo_super_imsm_volume(st, &info, NULL);
if ((geo->level != info.array.level) &&
if (geo->level == 5) {
change = CH_MIGRATION;
if (geo->layout != ALGORITHM_LEFT_ASYMMETRIC) {
- fprintf(stderr,
- Name " Error. Requested Layout "
- "not supported (left-asymmetric layout "
- "is supported only)!\n");
+ pr_err("Error. Requested Layout "
+ "not supported (left-asymmetric layout "
+ "is supported only)!\n");
change = -1;
goto analyse_change_exit;
}
break;
}
if (change == -1) {
- fprintf(stderr,
- Name " Error. Level Migration from %d to %d "
- "not supported!\n",
- info.array.level, geo->level);
+ pr_err("Error. Level Migration from %d to %d "
+ "not supported!\n",
+ info.array.level, geo->level);
goto analyse_change_exit;
}
} else
geo->layout = 0;
geo->level = 5;
} else {
- fprintf(stderr,
- Name " Error. Layout Migration from %d to %d "
- "not supported!\n",
- info.array.layout, geo->layout);
+ pr_err("Error. Layout Migration from %d to %d "
+ "not supported!\n",
+ info.array.layout, geo->layout);
change = -1;
goto analyse_change_exit;
}
if ((current_size != geo->size) && (geo->size >= 0)) {
if (change != -1) {
- fprintf(stderr,
- Name " Error. Size change should be the only "
+ pr_err("Error. Size change should be the only "
"one at a time.\n");
change = -1;
goto analyse_change_exit;
}
if ((super->current_vol + 1) != super->anchor->num_raid_devs) {
- fprintf(stderr,
- Name " Error. The last volume in container "
- "can be expanded only (%i/%i).\n",
- super->current_vol, st->devnum);
+ pr_err("Error. The last volume in container "
+ "can be expanded only (%i/%i).\n",
+ super->current_vol, st->devnum);
goto analyse_change_exit;
}
+ /* check the maximum available size
+ */
+ rv = imsm_get_free_size(st, dev->vol.map->num_members,
+ 0, chunk, &free_size);
+ if (rv == 0)
+ /* Cannot find maximum available space
+ */
+ max_size = 0;
+ else {
+ max_size = free_size + current_size;
+ /* align component size
+ */
+ max_size = imsm_component_size_aligment_check(
+ get_imsm_raid_level(dev->vol.map),
+ chunk * 1024,
+ max_size);
+ }
if (geo->size == 0) {
/* requested size change to the maximum available size
*/
- unsigned long long freesize;
- int rv;
-
- rv = imsm_get_free_size(st, dev->vol.map->num_members,
- 0, chunk, &freesize);
- if (rv == 0) {
- fprintf(stderr, Name " Error. Cannot find "
+ if (max_size == 0) {
+ pr_err("Error. Cannot find "
"maximum available space.\n");
change = -1;
goto analyse_change_exit;
- }
- geo->size = freesize + current_size;
-
- /* align component size
- */
- geo->size = imsm_component_size_aligment_check(
- get_imsm_raid_level(dev->vol.map),
- chunk * 1024,
- geo->size);
+ } else
+ geo->size = max_size;
}
if ((direction == ROLLBACK_METADATA_CHANGES)) {
dprintf("Prepare update for size change to %llu\n",
geo->size );
if (current_size >= geo->size) {
- fprintf(stderr,
- Name " Error. Size expanssion is "
- "supported only (current size is %llu, "
- "requested size /rounded/ is %llu).\n",
- current_size, geo->size);
+ pr_err("Error. Size expansion is "
+ "supported only (current size is %llu, "
+ "requested size /rounded/ is %llu).\n",
+ current_size, geo->size);
+ goto analyse_change_exit;
+ }
+ if (max_size && geo->size > max_size) {
+ pr_err("Error. Requested size is larger "
+ "than maximum available size (maximum "
+ "available size is %llu, "
+ "requested size /rounded/ is %llu).\n",
+ max_size, geo->size);
goto analyse_change_exit;
}
}
struct imsm_super *mpb = super->anchor;
if (mpb->num_raid_devs > 1) {
- fprintf(stderr,
- Name " Error. Cannot perform operation on %s"
- "- for this operation it MUST be single "
- "array in container\n",
- geo->dev_name);
+ pr_err("Error. Cannot perform operation on %s"
+ "- for this operation it MUST be single "
+ "array in container\n",
+ geo->dev_name);
change = -1;
}
}
struct intel_super *super = st->sb;
struct imsm_update_takeover *u;
- u = malloc(sizeof(struct imsm_update_takeover));
- if (u == NULL)
- return 1;
+ u = xmalloc(sizeof(struct imsm_update_takeover));
u->type = update_takeover;
u->subarray = super->current_vol;
free(u);
} else {
- fprintf(stderr, Name ": (imsm) Operation "
+ pr_err("(imsm) Operation "
"is not allowed on this container\n");
}
} else {
dev = dev->next;
}
if (dev == NULL) {
- fprintf(stderr, Name " Cannot find %s (%i) subarray\n",
+ pr_err("Cannot find %s (%i) subarray\n",
geo.dev_name, geo.dev_id);
goto exit_imsm_reshape_super;
}
int degraded)
{
unsigned long long new_degraded;
- sysfs_get_ll(info, NULL, "degraded", &new_degraded);
- if (new_degraded != (unsigned long long)degraded) {
+ int rv;
+
+ rv = sysfs_get_ll(info, NULL, "degraded", &new_degraded);
+ if ((rv == -1) || (new_degraded != (unsigned long long)degraded)) {
/* check each device to ensure it is still working */
struct mdinfo *sd;
new_degraded = 0;
}
/* Only one volume can migrate at the same time */
if (migr_vol_qan != 1) {
- fprintf(stderr, Name " : %s", migr_vol_qan ?
+ pr_err(": %s", migr_vol_qan ?
"Number of migrating volumes greater than 1\n" :
"There is no volume during migrationg\n");
goto abort;