* [PATCH] Monitor: don't assume mdadm parameter is a block device
@ 2017-06-16 14:02 Tomasz Majchrzak
[not found] ` <585FFF8D-0238-4AB3-AA77-4C3C00C3C55D@suse.com>
0 siblings, 1 reply; 5+ messages in thread
From: Tomasz Majchrzak @ 2017-06-16 14:02 UTC (permalink / raw)
To: linux-raid; +Cc: jes.sorensen, zlliu, Tomasz Majchrzak
If symlink (e.g. /dev/md/raid) is passed as a parameter to mdadm --wait,
it fails as it's not able to find a corresponding entry in /proc/mdstat
output. Get parameter file major:minor and look for block device name in
sysfs. This commit is partial revert of commit 9e04ac1c43e6
("mdadm/util: unify fstat checking blkdev into function").
Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
---
Monitor.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
v2:
next Zhilong Liu commit id
diff --git a/Monitor.c b/Monitor.c
index bef2f1b..c9f24bd 100644
--- a/Monitor.c
+++ b/Monitor.c
@@ -982,12 +982,21 @@ static void link_containers_with_subarrays(struct state *list)
int Wait(char *dev)
{
char devnm[32];
+ dev_t rdev;
+ char *tmp;
int rv = 1;
int frozen_remaining = 3;
- if (!stat_is_blkdev(dev, NULL))
+ if (!stat_is_blkdev(dev, &rdev))
+ return 2;
+
+ tmp = devid2devnm(rdev);
+ if (!tmp) {
+ pr_err("Cannot get md device name.\n");
return 2;
- strcpy(devnm, dev);
+ }
+
+ strcpy(devnm, tmp);
while(1) {
struct mdstat_ent *ms = mdstat_read(1, 0);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 5+ messages in thread[parent not found: <585FFF8D-0238-4AB3-AA77-4C3C00C3C55D@suse.com>]
* Re: [PATCH] Monitor: don't assume mdadm parameter is a block device [not found] ` <585FFF8D-0238-4AB3-AA77-4C3C00C3C55D@suse.com> @ 2017-06-19 9:16 ` Tomasz Majchrzak 2017-06-19 9:19 ` [PATCH v2] " Tomasz Majchrzak 2017-06-20 0:30 ` [PATCH] " Zhilong Liu 0 siblings, 2 replies; 5+ messages in thread From: Tomasz Majchrzak @ 2017-06-19 9:16 UTC (permalink / raw) To: Zhilong Liu; +Cc: linux-raid, jes.sorensen On Sun, Jun 18, 2017 at 10:10:02PM +0800, Zhilong Liu wrote: > > > > 在 2017年6月16日,22:02,Tomasz Majchrzak <tomasz.majchrzak@intel.com> 写道: > > > > If symlink (e.g. /dev/md/raid) is passed as a parameter to mdadm --wait, > > it fails as it's not able to find a corresponding entry in /proc/mdstat > > output. Get parameter file major:minor and look for block device name in > > sysfs. This commit is partial revert of commit 9e04ac1c43e6 > > ("mdadm/util: unify fstat checking blkdev into function"). > > > > Thanks very much for catching this. Just remind a typo in (commit title), correct fstat as stat. Will do. > > > Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com> > > --- > > Monitor.c | 13 +++++++++++-- > > 1 file changed, 11 insertions(+), 2 deletions(-) > > > > v2: > > next Zhilong Liu commit id > > > > diff --git a/Monitor.c b/Monitor.c > > index bef2f1b..c9f24bd 100644 > > --- a/Monitor.c > > +++ b/Monitor.c > > @@ -982,12 +982,21 @@ static void link_containers_with_subarrays(struct state *list) > > int Wait(char *dev) > > { > > char devnm[32]; > > + dev_t rdev; > > + char *tmp; > > int rv = 1; > > int frozen_remaining = 3; > > > > - if (!stat_is_blkdev(dev, NULL)) > > + if (!stat_is_blkdev(dev, &rdev)) > > + return 2; > > + > > + tmp = devid2devnm(rdev); > > + if (!tmp) { > > + pr_err("Cannot get md device name.\n"); > > return 2; > > - strcpy(devnm, dev); > > + } > > + > > + strcpy(devnm, tmp); > > > > Quite agreed with the code here, just a small question, I may use > > strcpy(devnm, devid2devnm(rdev)); > directly since stat_is_blkdev() has returned the major/minor devid. I don't know "get md device name " would be failed in which scenario. > I'm asking this question since I haven't been familiar with all raids situations. :-) > > Thanks again, > Zhilong Well, there could be a race and RAID array might get stopped between two calls (stat_is_blkdev, devid2devnm) so corresponding sysfs entry would not exist. Also I don't think we should assume devid2devnm implementation won't change one day. I just did it safe way, otherwise static code analyzers would complain. Tomek ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] Monitor: don't assume mdadm parameter is a block device 2017-06-19 9:16 ` Tomasz Majchrzak @ 2017-06-19 9:19 ` Tomasz Majchrzak 2017-07-10 17:40 ` Jes Sorensen 2017-06-20 0:30 ` [PATCH] " Zhilong Liu 1 sibling, 1 reply; 5+ messages in thread From: Tomasz Majchrzak @ 2017-06-19 9:19 UTC (permalink / raw) To: linux-raid; +Cc: jes.sorensen, zlliu, Tomasz Majchrzak If symlink (e.g. /dev/md/raid) is passed as a parameter to mdadm --wait, it fails as it's not able to find a corresponding entry in /proc/mdstat output. Get parameter file major:minor and look for block device name in sysfs. This commit is partial revert of commit 9e04ac1c43e6 ("mdadm/util: unify stat checking blkdev into function"). Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com> --- Monitor.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) v2: corrected referenced commit title in commit message diff --git a/Monitor.c b/Monitor.c index bef2f1b..c9f24bd 100644 --- a/Monitor.c +++ b/Monitor.c @@ -982,12 +982,21 @@ static void link_containers_with_subarrays(struct state *list) int Wait(char *dev) { char devnm[32]; + dev_t rdev; + char *tmp; int rv = 1; int frozen_remaining = 3; - if (!stat_is_blkdev(dev, NULL)) + if (!stat_is_blkdev(dev, &rdev)) + return 2; + + tmp = devid2devnm(rdev); + if (!tmp) { + pr_err("Cannot get md device name.\n"); return 2; - strcpy(devnm, dev); + } + + strcpy(devnm, tmp); while(1) { struct mdstat_ent *ms = mdstat_read(1, 0); -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] Monitor: don't assume mdadm parameter is a block device 2017-06-19 9:19 ` [PATCH v2] " Tomasz Majchrzak @ 2017-07-10 17:40 ` Jes Sorensen 0 siblings, 0 replies; 5+ messages in thread From: Jes Sorensen @ 2017-07-10 17:40 UTC (permalink / raw) To: Tomasz Majchrzak, linux-raid; +Cc: zlliu On 06/19/2017 05:19 AM, Tomasz Majchrzak wrote: > If symlink (e.g. /dev/md/raid) is passed as a parameter to mdadm --wait, > it fails as it's not able to find a corresponding entry in /proc/mdstat > output. Get parameter file major:minor and look for block device name in > sysfs. This commit is partial revert of commit 9e04ac1c43e6 > ("mdadm/util: unify stat checking blkdev into function"). > > Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com> > --- > Monitor.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > v2: > corrected referenced commit title in commit message Applied! Thanks, Jes ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Monitor: don't assume mdadm parameter is a block device 2017-06-19 9:16 ` Tomasz Majchrzak 2017-06-19 9:19 ` [PATCH v2] " Tomasz Majchrzak @ 2017-06-20 0:30 ` Zhilong Liu 1 sibling, 0 replies; 5+ messages in thread From: Zhilong Liu @ 2017-06-20 0:30 UTC (permalink / raw) To: Tomasz Majchrzak; +Cc: linux-raid, jes.sorensen > 在 2017年6月19日,17:16,Tomasz Majchrzak <tomasz.majchrzak@intel.com> 写道: > >> On Sun, Jun 18, 2017 at 10:10:02PM +0800, Zhilong Liu wrote: >> >> >>> 在 2017年6月16日,22:02,Tomasz Majchrzak <tomasz.majchrzak@intel.com> 写道: >>> >>> If symlink (e.g. /dev/md/raid) is passed as a parameter to mdadm --wait, >>> it fails as it's not able to find a corresponding entry in /proc/mdstat >>> output. Get parameter file major:minor and look for block device name in >>> sysfs. This commit is partial revert of commit 9e04ac1c43e6 >>> ("mdadm/util: unify fstat checking blkdev into function"). >>> >> >> Thanks very much for catching this. Just remind a typo in (commit title), correct fstat as stat. > > Will do. > >> >>> Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com> >>> --- >>> Monitor.c | 13 +++++++++++-- >>> 1 file changed, 11 insertions(+), 2 deletions(-) >>> >>> v2: >>> next Zhilong Liu commit id >>> >>> diff --git a/Monitor.c b/Monitor.c >>> index bef2f1b..c9f24bd 100644 >>> --- a/Monitor.c >>> +++ b/Monitor.c >>> @@ -982,12 +982,21 @@ static void link_containers_with_subarrays(struct state *list) >>> int Wait(char *dev) >>> { >>> char devnm[32]; >>> + dev_t rdev; >>> + char *tmp; >>> int rv = 1; >>> int frozen_remaining = 3; >>> >>> - if (!stat_is_blkdev(dev, NULL)) >>> + if (!stat_is_blkdev(dev, &rdev)) >>> + return 2; >>> + >>> + tmp = devid2devnm(rdev); >>> + if (!tmp) { >>> + pr_err("Cannot get md device name.\n"); >>> return 2; >>> - strcpy(devnm, dev); >>> + } >>> + >>> + strcpy(devnm, tmp); >>> >> >> Quite agreed with the code here, just a small question, I may use >>> strcpy(devnm, devid2devnm(rdev)); >> directly since stat_is_blkdev() has returned the major/minor devid. I don't know "get md device name " would be failed in which scenario. >> I'm asking this question since I haven't been familiar with all raids situations. :-) >> >> Thanks again, >> Zhilong > > Well, there could be a race and RAID array might get stopped between two > calls (stat_is_blkdev, devid2devnm) so corresponding sysfs entry would not > exist. Also I don't think we should assume devid2devnm implementation won't > change one day. I just did it safe way, otherwise static code analyzers > would complain. > Thanks very much for the correction. :-) Zhilong > Tomek > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-07-10 17:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-16 14:02 [PATCH] Monitor: don't assume mdadm parameter is a block device Tomasz Majchrzak
[not found] ` <585FFF8D-0238-4AB3-AA77-4C3C00C3C55D@suse.com>
2017-06-19 9:16 ` Tomasz Majchrzak
2017-06-19 9:19 ` [PATCH v2] " Tomasz Majchrzak
2017-07-10 17:40 ` Jes Sorensen
2017-06-20 0:30 ` [PATCH] " Zhilong Liu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).