All of lore.kernel.org
 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 v2] multipath: make devt2devname use lstat to check sysfs	links
Date: Thu, 10 Jan 2013 14:06:19 -0600	[thread overview]
Message-ID: <20130110200619.GP19059@ether.msp.redhat.com> (raw)

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(-)

Index: multipath-tools-130109/libmultipath/devmapper.c
===================================================================
--- multipath-tools-130109.orig/libmultipath/devmapper.c
+++ multipath-tools-130109/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;
Index: multipath-tools-130109/libmultipath/sysfs.c
===================================================================
--- multipath-tools-130109.orig/libmultipath/sysfs.c
+++ multipath-tools-130109/libmultipath/sysfs.c
@@ -125,8 +125,10 @@ int sysfs_check_holders(char * check_dev
 		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_dev
 		}
 		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);
Index: multipath-tools-130109/libmultipath/util.c
===================================================================
--- multipath-tools-130109.orig/libmultipath/util.c
+++ multipath-tools-130109/libmultipath/util.c
@@ -161,6 +161,7 @@ devt2devname (char *devname, int devname
 	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
 	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, '/');

             reply	other threads:[~2013-01-10 20:06 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-10 20:06 Benjamin Marzinski [this message]
2013-01-11  7:01 ` [PATCH v2] multipath: make devt2devname use lstat to check sysfs links 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=20130110200619.GP19059@ether.msp.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.