Whamcloud - gitweb
LU-12387 utils: Avoid passing symlink to tune_block_dev 71/35371/2
authorChris Horn <hornc@cray.com>
Wed, 5 Jun 2019 00:14:47 +0000 (19:14 -0500)
committerOleg Drokin <green@whamcloud.com>
Fri, 12 Jul 2019 05:25:12 +0000 (05:25 +0000)
In tune_block_dev_slaves we iterate over the directories inside the
slaves subdirectory for the multipath device that is being tuned. For
example:

 $ /usr/sbin/l_tunedisk /dev/mapper/mpathc

Suppose mpathc maps to /dev/dm-2. tune_block_dev will initially set
the value of
/sys/devices/virtual/block/dm-2/queue/max_sectors_kb
equal to the value of
/sys/devices/virtual/block/dm-2/queue/max_hw_sectors_kb

Then it looks at the entries in /sys/devices/virtual/block/dm-2/slaves
Suppose the slave devices are as follows:

 $ ls /sys/devices/virtual/block/dm-2/slaves
 sdc  sdh  sdm  sdr
 $

It then calls tune_block_dev recursively, passing
/sys/devices/virtual/block/dm-2/slaves/sdc,
/sys/devices/virtual/block/dm-2/slaves/sdh, etc. However, these are
symlinks that point to directories and as such tune_block_dev will not
tune them because stat does not identify them as block devices.

Instead we should contruct the path argument for these recursive calls
as /dev/<d_name>. In this example, /dev/sdc, /dev/sdh, etc.

Lustre-change: https://review.whamcloud.com/35065
Lustre-commit: c632a238e6d0c4a3240959a894d36a8a409d64f8

Cray-bug-id: LUS-7358
Signed-off-by: Chris Horn <hornc@cray.com>
Change-Id: I63bc073a82384d68648ff23a56b7d43d6656159b
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Nathaniel Clark <nclark@whamcloud.com>
Reviewed-by: Gu Zheng <gzheng@ddn.com>
Signed-off-by: Minh Diep <mdiep@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/35371
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/utils/libmount_utils_ldiskfs.c

index a75bf4d..7ed5f03 100644 (file)
@@ -1218,7 +1218,7 @@ static int tune_block_dev_slaves(const char *sys_path, struct mount_opts *mop)
                if (d->d_type != DT_LNK)
                        continue;
 
-               snprintf(path, sizeof(path), "%s/%s", slaves_path, d->d_name);
+               snprintf(path, sizeof(path), "/dev/%s", d->d_name);
                rc2 = tune_block_dev(path, mop);
                if (rc2 != 0)
                        rc = rc2;