Linux Device Mapper development
 help / color / mirror / Atom feed
From: Benjamin Marzinski <bmarzins@redhat.com>
To: device-mapper development <dm-devel@redhat.com>
Cc: Christophe Varoqui <christophe.varoqui@gmail.com>
Subject: [PATCH V3 04/18] multipath: make devt2devname use lstat to check
Date: Sat, 12 Jan 2013 00:04:41 -0600	[thread overview]
Message-ID: <1357970695-3396-4-git-send-email-bmarzins@redhat.com> (raw)
In-Reply-To: <1357970695-3396-1-git-send-email-bmarzins@redhat.com>

dm_reassign wasn't working correctly for me because devt2devname used stat()
to check if /sys/dev/block/major:minor was a symlink.  But stat() never returns
a symlink, if follows it. It needs to use lstat() instead.  Also, I made
multipath log a message when a dm device gets reassigned to use multipath.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 libmultipath/devmapper.c | 4 +++-
 libmultipath/sysfs.c     | 6 ++++--
 libmultipath/util.c      | 3 ++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
index a6e7150..89615b0 100644
--- a/libmultipath/devmapper.c
+++ b/libmultipath/devmapper.c
@@ -1394,8 +1394,10 @@ int dm_reassign(const char *mapname)
 		return 1;
 	}
 
-	if (!(dmt = dm_task_create(DM_DEVICE_DEPS)))
+	if (!(dmt = dm_task_create(DM_DEVICE_DEPS))) {
+		condlog(3, "%s: couldn't make dm task", mapname);
 		return 0;
+	}
 
 	if (!dm_task_set_name(dmt, mapname))
 		goto out;
diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c
index 9c554dd..d33747f 100644
--- a/libmultipath/sysfs.c
+++ b/libmultipath/sysfs.c
@@ -125,8 +125,10 @@ int sysfs_check_holders(char * check_devt, char * new_devt)
 		return 0;
 	}
 
-	if (devt2devname(check_dev, PATH_SIZE, check_devt))
+	if (devt2devname(check_dev, PATH_SIZE, check_devt)) {
+		condlog(1, "can't get devname for %s", check_devt);
 		return 0;
+	}
 
 	condlog(3, "%s: checking holder", check_dev);
 
@@ -153,7 +155,7 @@ int sysfs_check_holders(char * check_devt, char * new_devt)
 		}
 		table_name = dm_mapname(major, table_minor);
 
-		condlog(3, "%s: reassign table %s old %s new %s", check_dev,
+		condlog(0, "%s: reassign table %s old %s new %s", check_dev,
 			table_name, check_devt, new_devt);
 
 		dm_reassign_table(table_name, check_devt, new_devt);
diff --git a/libmultipath/util.c b/libmultipath/util.c
index 7cdfd28..3ac018c 100644
--- a/libmultipath/util.c
+++ b/libmultipath/util.c
@@ -161,6 +161,7 @@ devt2devname (char *devname, int devname_len, char *devt)
 	struct stat statbuf;
 
 	memset(block_path, 0, sizeof(block_path));
+	memset(dev, 0, sizeof(dev));
 	if (sscanf(devt, "%u:%u", &major, &minor) != 2) {
 		condlog(0, "Invalid device number %s", devt);
 		return 1;
@@ -172,7 +173,7 @@ devt2devname (char *devname, int devname_len, char *devt)
 	if (stat("/sys/dev/block", &statbuf) == 0) {
 		/* Newer kernels have /sys/dev/block */
 		sprintf(block_path,"/sys/dev/block/%u:%u", major, minor);
-		if (stat(block_path, &statbuf) == 0) {
+		if (lstat(block_path, &statbuf) == 0) {
 			if (S_ISLNK(statbuf.st_mode) &&
 			    readlink(block_path, dev, FILE_NAME_SIZE) > 0) {
 				char *p = strrchr(dev, '/');
-- 
1.8.0

  parent reply	other threads:[~2013-01-12  6:04 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-12  6:04 [PATCH V3 01/18] multipath: default fast_io_fail to 5 seconds Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 02/18] multipath: remove default options from built-in Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 03/18] multipath: change default path_selector to Benjamin Marzinski
2013-01-12  6:04 ` Benjamin Marzinski [this message]
2013-01-12  6:04 ` [PATCH V3 05/18] multipath: add support for Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 06/18] multipath: remove duplicates from multipath Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 07/18] multipath: add detect_prio option to autodetect Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 08/18] multipath: update netapp config Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 09/18] multipath: fix set_oom_adj Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 10/18] multipath: rely on udev device creation for kpartx Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 11/18] multipath: update documentation Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 12/18] multipath: make multipathd work with new dm/lvm Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 13/18] multipath: make reservation_key print out correctly Benjamin Marzinski
2013-01-21  5:50   ` Chauhan, Vijay
2013-01-12  6:04 ` [PATCH V3 14/18] multipath: storagetek 6180 config Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 15/18] multipath: Fix kpartx and udevd race Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 16/18] multipath: Check blacklists as soon as possible Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 17/18] multipath: check for NULL from udev_device_get_* Benjamin Marzinski
2013-01-12  6:04 ` [PATCH V3 18/18] multipath: make path devices readonly again Benjamin Marzinski
2013-01-12 13:16 ` [PATCH V3 01/18] multipath: default fast_io_fail to 5 seconds Christophe Varoqui
2013-01-14  7:03   ` Hannes Reinecke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1357970695-3396-4-git-send-email-bmarzins@redhat.com \
    --to=bmarzins@redhat.com \
    --cc=christophe.varoqui@gmail.com \
    --cc=dm-devel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox