[PATCH v4] nvme/069: add a test for multipath cdev lifetime

John Garry john.g.garry at oracle.com
Fri Jul 17 02:06:09 PDT 2026


On 17/07/2026 08:00, Nilay Shroff wrote:
> On 7/16/26 10: 06 PM, John Garry wrote: > On 16/07/2026 16: 16, Nilay Shroff
> wrote: >>> +    kill(getppid(), SIGUSR2); >>> +    count = 0; >>> +    for (;;)
> { >>> +        fd1 = open(argv[1], O_RDONLY); >>>
> 
> 
> On 7/16/26 10:06 PM, John Garry wrote:
>> On 16/07/2026 16:16, Nilay Shroff wrote:
>>>> +    kill(getppid(), SIGUSR2);
>>>> +    count = 0;
>>>> +    for (;;) {
>>>> +        fd1 = open(argv[1], O_RDONLY);
>>>> +        usleep(500000);
>>>> +        if (fd1 < 0)
>>>> +            break;
>>>
>>> Does it make sense to check for errno set to ENODEV or ENOENT
>>> before breaking out here?
>> 
>> ehh, if the errno is not ENODEV or ENOENT, then how to handle? Would it to fail the test due to unexpected errno?
> 
> I think yes, something like below:
> 
> for (;;) {
>            fd1 = open(argv[1], O_RDONLY);
>            if (fd1 < 0) {
>                    if (errno == EINTR)
>                            continue;
> 
>                    if (errno == ENOENT || errno == ENODEV)
>                            break;
> 
>                    perror("open");

if fd1 < 0, how is it open? Or maybe this message is too vague...

>                    return EINVAL;

So are ENOENT, ENODEV, and EINTR the only expected error codes? Others 
are just unsupported and we fail the test (if and when we get them), right?

>            }
> 
>            close(fd1);
>            usleep(500000);
> 
>            if (++count > 10) {
>                    fprintf(stderr, "%s still present\n", argv[0]);
>                    return EINVAL;
>            }
> }
> 
> Thanks,
> --Nilay
> 




More information about the Linux-nvme mailing list