Hello community, here is the log from the commit of package iprutils for openSUSE:Factory checked in at 2016-08-26 23:14:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/iprutils (Old) and /work/SRC/openSUSE:Factory/.iprutils.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "iprutils" Changes: -------- --- /work/SRC/openSUSE:Factory/iprutils/iprutils.changes 2016-08-11 18:53:15.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.iprutils.new/iprutils.changes 2016-08-26 23:14:49.000000000 +0200 @@ -1,0 +2,6 @@ +Tue Aug 23 05:58:13 UTC 2016 - [email protected] + +- version update to 2.4.13 + - Additional fixes for tracking known zeroed state + +------------------------------------------------------------------- Old: ---- iprutils-2.4.12.tar.gz New: ---- iprutils-2.4.13.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ iprutils.spec ++++++ --- /var/tmp/diff_new_pack.s0pSMe/_old 2016-08-26 23:14:50.000000000 +0200 +++ /var/tmp/diff_new_pack.s0pSMe/_new 2016-08-26 23:14:50.000000000 +0200 @@ -19,7 +19,7 @@ Name: iprutils # NOTE: package's changelog is hidden in % changelog section # in file iprutils/spec/iprutils.spec -Version: 2.4.12 +Version: 2.4.13 Release: 0 %define ibmformat %(sed 's/\\./-/g' <<< %{version}) Summary: Utilities for the IBM Power Linux RAID Adapters ++++++ iprutils-2.4.12.tar.gz -> iprutils-2.4.13.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils-rel-2-4-12/configure.ac new/iprutils-rel-2-4-13/configure.ac --- old/iprutils-rel-2-4-12/configure.ac 2016-08-04 13:17:49.000000000 +0200 +++ new/iprutils-rel-2-4-13/configure.ac 2016-08-16 16:47:13.000000000 +0200 @@ -10,7 +10,7 @@ AC_PREREQ([2.63]) # For RC releases, version should be set to 2.4.10.0.rc1, 2.4.10.0.rc2, etc. # For GA releases, version should be set to 2.4.10.1, 2.4.10.2, etc. -AC_INIT([iprutils], [2.4.12.1], [[email protected]]) +AC_INIT([iprutils], [2.4.13.1], [[email protected]]) AM_INIT_AUTOMAKE([1.9 foreign]) AC_CONFIG_MACRO_DIR([build-aux]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils-rel-2-4-12/iprconfig.c new/iprutils-rel-2-4-13/iprconfig.c --- old/iprutils-rel-2-4-12/iprconfig.c 2016-08-04 13:17:49.000000000 +0200 +++ new/iprutils-rel-2-4-13/iprconfig.c 2016-08-16 16:47:13.000000000 +0200 @@ -37,6 +37,7 @@ struct devs_to_init_t { struct ipr_dev *dev; struct ipr_ioa *ioa; + u64 device_id; int new_block_size; int cmplt; int do_init; @@ -222,6 +223,63 @@ return 1; } +static int wait_for_formatted_af_dasd(int timeout_in_secs) +{ + struct devs_to_init_t *dev = dev_init_head; + struct scsi_dev_data *scsi_devs; + struct scsi_dev_data *scsi_dev_data; + int num_devs, j, af_found, jbod2af_formats, num_secs; + u64 device_id; + + for (num_secs = 0; num_secs < timeout_in_secs; timeout_in_secs++) { + af_found = 0; + jbod2af_formats = 0; + scsi_devs = NULL; + + num_devs = get_scsi_dev_data(&scsi_devs); + + for_each_dev_to_init(dev) { + if (!dev->dev || !dev->ioa) + continue; + if (!dev->dev->scsi_dev_data) + continue; + if (dev->dev_type != IPR_JBOD_DASD_DEVICE) + continue; + if (!ipr_is_af_blk_size(dev->ioa, dev->new_block_size)) + continue; + if (!dev->do_init) + continue; + + jbod2af_formats++; + device_id = dev->dev->scsi_dev_data->device_id; + + for (j = 0, scsi_dev_data = scsi_devs; + j < num_devs; j++, scsi_dev_data++) { + if (scsi_dev_data->host != dev->ioa->host_num) + continue; + if (get_sg_name(scsi_dev_data)) + continue; + if (scsi_dev_data->type != IPR_TYPE_AF_DISK) + continue; + if (dev->device_id != scsi_dev_data->device_id) + continue; + + scsi_dbg(dev->dev, "Format complete. AF DASD found. New Device ID=%lx, Old Device ID=%lx\n", + scsi_dev_data->device_id, dev->device_id); + af_found++; + break; + } + } + + free(scsi_devs); + if (af_found == jbod2af_formats) + break; + sleep(1); + } + + return ((af_found == jbod2af_formats) ? 0 : -ETIMEDOUT); +} + /** * flush_stdscr - * @@ -6556,6 +6614,10 @@ dev_init_tail->dev_type = IPR_JBOD_DASD_DEVICE; dev_init_tail->new_block_size = blk_size; dev_init_tail->dev = dev; + dev_init_tail->device_id = dev->scsi_dev_data->device_id; + + scsi_dbg(dev, "Formatting device to %d bytes/block. Device ID=%lx\n", + blk_size, dev_init_tail->device_id); } /** @@ -8840,8 +8902,9 @@ return 51 | EXIT_FLAG; } - format_done = 1; - check_current_config(false); + format_done = 1; + wait_for_formatted_af_dasd(30); + check_current_config(false); if (!pid) exit(0); @@ -14012,7 +14075,6 @@ } rc = send_dev_inits(NULL); - set_devs_format_completed(); free_devs_to_init(); return IPR_XLATE_DEV_FMT_RC(rc); } @@ -14197,8 +14259,8 @@ for (sdev = head_sdev; sdev; sdev = sdev->next) { dev = ipr_sysfs_dev_to_dev(sdev); if (!dev) { - syslog(LOG_ERR, _("Cannot find device: %s\n"), - sdev->sysfs_device_name); + syslog(LOG_ERR, _("Cannot find device: %lx\n"), + sdev->device_id); return -EIO; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils-rel-2-4-12/iprlib.c new/iprutils-rel-2-4-13/iprlib.c --- old/iprutils-rel-2-4-12/iprlib.c 2016-08-04 13:17:49.000000000 +0200 +++ new/iprutils-rel-2-4-13/iprlib.c 2016-08-16 16:47:13.000000000 +0200 @@ -569,8 +569,7 @@ return NULL; for (sdev = head; sdev; sdev = sdev->next) { - if (!strcmp(sdev->sysfs_device_name, - dev->scsi_dev_data->sysfs_device_name)) + if (sdev->device_id == dev->scsi_dev_data->device_id) break; } @@ -593,8 +592,7 @@ for_each_dev(ioa, dev) { if (!dev->scsi_dev_data) continue; - if (!strcmp(sdev->sysfs_device_name, - dev->scsi_dev_data->sysfs_device_name)) + if (sdev->device_id == dev->scsi_dev_data->device_id) return dev; } } @@ -647,8 +645,7 @@ if (!sdev) { sdev = calloc(1, sizeof(struct sysfs_dev)); - strcpy(sdev->sysfs_device_name, - dev->scsi_dev_data->sysfs_device_name); + sdev->device_id = dev->scsi_dev_data->device_id; if (!(*head)) { *tail = *head = sdev; @@ -3758,7 +3755,7 @@ return -ENOENT; if (dev->locked) { - scsi_err(dev, "Device already locked\n"); + scsi_dbg(dev, "Device already locked\n"); return -EINVAL; } @@ -3769,7 +3766,7 @@ return errno; } - rc = flock(fd, LOCK_EX); + rc = flock(fd, LOCK_EX | LOCK_NB); if (rc) { if (!strcmp(tool_name, "iprconfig") || ipr_debug) @@ -5873,6 +5870,32 @@ return -ETIMEDOUT; } +int get_sg_name(struct scsi_dev_data *scsi_dev) +{ + int i, rc = -ENXIO; + DIR *dirfd; + struct dirent *dent; + char devpath[PATH_MAX]; + + sprintf(devpath, "/sys/class/scsi_device/%s/device/scsi_generic", + scsi_dev->sysfs_device_name); + dirfd = opendir(devpath); + if (!dirfd) + return -ENXIO; + while((dent = readdir(dirfd)) != NULL) { + if (dent->d_name[0] == '.') + continue; + if (strncmp(dent->d_name, "sg", 2)) + continue; + sprintf(scsi_dev->gen_name, "/dev/%s", + dent->d_name); + rc = 0; + break; + } + closedir(dirfd); + return rc; +} + /** * get_sg_names - waits for sg devices to become available * @num_devs: number of devices @@ -5883,27 +5906,8 @@ static void get_sg_names(int num_devs) { int i; - DIR *dirfd; - struct dirent *dent; - char devpath[PATH_MAX]; - - for (i = 0; i < num_devs; i++) { - sprintf(devpath, "/sys/class/scsi_device/%s/device/scsi_generic", - scsi_dev_table[i].sysfs_device_name); - dirfd = opendir(devpath); - if (!dirfd) - continue; - while((dent = readdir(dirfd)) != NULL) { - if (dent->d_name[0] == '.') - continue; - if (strncmp(dent->d_name, "sg", 2)) - continue; - sprintf(scsi_dev_table[i].gen_name, "/dev/%s", - dent->d_name); - break; - } - closedir(dirfd); - } + for (i = 0; i < num_devs; i++) + get_sg_name(&scsi_dev_table[i]); } /** @@ -7492,14 +7496,24 @@ int ipr_set_format_completed_bit(struct ipr_dev *dev) { - int len; + int len, retries = 5; struct ipr_mode_pages mode_pages; struct ipr_ioa_mode_page *page; + scsi_dbg(dev, "Setting device formatted bit. Device ID=%lx\n", dev->scsi_dev_data->device_id); + memset(&mode_pages, 0, sizeof(mode_pages)); - if (ipr_mode_sense(dev, 0x20, &mode_pages)) + do { + if (!ipr_mode_sense(dev, 0x20, &mode_pages)) + break; + sleep(1); + } while (retries--); + + if (!retries) { + scsi_info(dev, "Page 20 mode sense failed. Device ID=%lx\n", dev->scsi_dev_data->device_id); return -EIO; + } page = (struct ipr_ioa_mode_page *) (((u8 *)&mode_pages) + mode_pages.hdr.block_desc_len + @@ -7513,8 +7527,16 @@ mode_pages.hdr.device_spec_parms = 0; page->hdr.parms_saveable = 0; - if (ipr_mode_select(dev, &mode_pages, len)) + do { + if (!ipr_mode_select(dev, &mode_pages, len)) + break; + sleep(1); + } while (retries--); + + if (!retries) { + scsi_info(dev, "Page 20 mode select failed. Device ID=%lx\n", dev->scsi_dev_data->device_id); return -EIO; + } return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils-rel-2-4-12/iprlib.h new/iprutils-rel-2-4-13/iprlib.h --- old/iprutils-rel-2-4-12/iprlib.h 2016-08-04 13:17:49.000000000 +0200 +++ new/iprutils-rel-2-4-13/iprlib.h 2016-08-16 16:47:13.000000000 +0200 @@ -297,7 +297,7 @@ extern enum system_p_mode power_cur_mode; struct sysfs_dev { - char sysfs_device_name[PATH_MAX]; + u64 device_id; struct sysfs_dev *next, *prev; }; @@ -2953,6 +2953,8 @@ int ipr_max_queue_depth(struct ipr_ioa *ioa, int num_devs, int num_ssd_devs); void ipr_count_devices_in_vset(struct ipr_dev *, int *num_devs, int *ssd_num_devs); int ipr_known_zeroed_is_saved(struct ipr_dev *); +int get_sg_name(struct scsi_dev_data *); +int ipr_sg_inquiry(struct scsi_dev_data *, u8, void *, u8); static inline u32 ipr_get_dev_res_handle(struct ipr_ioa *ioa, struct ipr_dev_record *dev_rcd) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils-rel-2-4-12/spec/iprutils.spec new/iprutils-rel-2-4-13/spec/iprutils.spec --- old/iprutils-rel-2-4-12/spec/iprutils.spec 2016-08-04 13:17:49.000000000 +0200 +++ new/iprutils-rel-2-4-13/spec/iprutils.spec 2016-08-16 16:47:13.000000000 +0200 @@ -1,6 +1,6 @@ Summary: Utilities for the IBM Power Linux RAID adapters Name: iprutils -Version: 2.4.12 +Version: 2.4.13 # For RC releases, release_prefix should be set to 0.rc1, 0.rc2, etc. # For GA releases, release_prefix should be set to 1, 2, 3, etc. %define release_prefix 1 @@ -322,6 +322,8 @@ %endif #WITH_STATIC %changelog +* Tue Aug 16 2016 Brian King <[email protected]> 2.4.13 +- Additional fixes for tracking known zeroed state * Thu Aug 04 2016 Brian King <[email protected]> 2.4.12 - Display higher link rates in path details - Flush unused multipaths prior to array delete
