From 67958e6080c7e1f46ed9a6bd0ccf633dff4b6568 Mon Sep 17 00:00:00 2001 From: Bob Glossman Date: Mon, 4 Nov 2013 08:53:22 -0800 Subject: [PATCH] LU-3763 utils: set multipath devices recursively Make set_blockdev_tunables() set tunables recursively to reach slaves' slaves. Lustre-commit: aeb887ab0d4b15d17f3b96bf0e7be3b746edcf8e Lustre-change: http://review.whamcloud.com/7337 Signed-off-by: Bob Glossman Signed-off-by: Bobi Jam Reviewed-by: Fan Yong Reviewed-by: Oleg Drokin Change-Id: I8f8e8fb1e3500591e33fc745ea9d6cdc05043be8 Reviewed-on: http://review.whamcloud.com/8163 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Bobi Jam --- lustre/utils/mount_utils_ldiskfs.c | 60 ++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/lustre/utils/mount_utils_ldiskfs.c b/lustre/utils/mount_utils_ldiskfs.c index 45c491e..5d07ac9 100644 --- a/lustre/utils/mount_utils_ldiskfs.c +++ b/lustre/utils/mount_utils_ldiskfs.c @@ -821,7 +821,7 @@ int write_file(char *path, char *buf) /* This is to tune the kernel for good SCSI performance. * For that we set the value of /sys/block/{dev}/queue/max_sectors_kb * to the value of /sys/block/{dev}/queue/max_hw_sectors_kb */ -int set_blockdev_tunables(char *source, struct mount_opts *mop, int fan_out) +int set_blockdev_tunables(char *source, struct mount_opts *mop) { glob_t glob_info = { 0 }; struct stat stat_buf; @@ -832,6 +832,7 @@ int set_blockdev_tunables(char *source, struct mount_opts *mop, int fan_out) char real_path[PATH_MAX] = {'\0'}; int i, rc = 0; int major, minor; + char *slave = NULL; if (!source) return -EINVAL; @@ -970,45 +971,42 @@ set_params: } } - if (fan_out) { - char *slave = NULL; - glob_info.gl_pathc = 0; - glob_info.gl_offs = 0; - /* if device is multipath device, tune its slave devices */ - snprintf(real_path, sizeof(real_path), "%s/slaves/*", path); - rc = glob(real_path, GLOB_NOSORT, NULL, &glob_info); - - for (i = 0; rc == 0 && i < glob_info.gl_pathc; i++){ - slave = basename(glob_info.gl_pathv[i]); - snprintf(real_path, sizeof(real_path), "/dev/%s", slave); - rc = set_blockdev_tunables(real_path, mop, 0); - } + /* if device is multipath device, tune its slave devices */ + glob_info.gl_pathc = 0; + glob_info.gl_offs = 0; + snprintf(real_path, sizeof(real_path), "%s/slaves/*", path); + rc = glob(real_path, GLOB_NOSORT, NULL, &glob_info); - if (rc == GLOB_NOMATCH) { - /* no slave device is not an error */ - rc = 0; - } else if (rc && verbose) { - if (slave == NULL) { - fprintf(stderr, "warning: %s, failed to read" - " entries under %s/slaves\n", - strerror(errno), path); - } else { - fprintf(stderr, "unable to set tunables for" - " slave device %s (slave would be" - " unable to handle IO request from" - " master %s)\n", - real_path, source); - } + for (i = 0; rc == 0 && i < glob_info.gl_pathc; i++) { + slave = basename(glob_info.gl_pathv[i]); + snprintf(real_path, sizeof(real_path), "/dev/%s", slave); + rc = set_blockdev_tunables(real_path, mop); + } + + if (rc == GLOB_NOMATCH) { + /* no slave device is not an error */ + rc = 0; + } else if (rc && verbose) { + if (slave == NULL) { + fprintf(stderr, "warning: %s, failed to read" + " entries under %s/slaves\n", + strerror(errno), path); + } else { + fprintf(stderr, "unable to set tunables for" + " slave device %s (slave would be" + " unable to handle IO request from" + " master %s)\n", + real_path, source); } - globfree(&glob_info); } + globfree(&glob_info); return rc; } int ldiskfs_tune_lustre(char *dev, struct mount_opts *mop) { - return set_blockdev_tunables(dev, mop, 1); + return set_blockdev_tunables(dev, mop); } int ldiskfs_label_lustre(struct mount_opts *mop) -- 1.8.3.1