Re: [PATCH] Monitor: don't assume mdadm parameter is a block device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> 在 2017年6月19日,17:16,Tomasz Majchrzak <tomasz.majchrzak@xxxxxxxxx> 写道:
> 
>> On Sun, Jun 18, 2017 at 10:10:02PM +0800, Zhilong Liu wrote:
>> 
>> 
>>> 在 2017年6月16日,22:02,Tomasz Majchrzak <tomasz.majchrzak@xxxxxxxxx> 写道:
>>> 
>>> 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@xxxxxxxxx>
>>> ---
>>> 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
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux