Re: [PATCH v4] usbip: tools: add hint when no exported devices are found

Zongmin Zhou
2026-04-07T02:34:38Z

On 2026/4/7 05:12, Shuah Khan wrote:
> On 4/2/26 02:32, Zongmin Zhou wrote:
>> From: Zongmin Zhou <zhouzongmin@kylinos.cn>
>>
>> When refresh_exported_devices() finds no devices, it's helpful to
>> inform users about potential causes. This could be due to:
>>
>> 1. The usbip driver module is not loaded.
>> 2. No devices have been exported yet.
>>
>> Add an informational message to guide users when ndevs == 0.
>>
>> Also update the condition in usbip_host_driver_open() and
>> usbip_device_driver_open() to check both ret and ndevs == 0,
>> and change err() to info().
>>
>> Message visibility by scenario:
>> - usbipd (console mode): Show on console/serial, this allows instant
>>    visibility for debugging.
>> - usbipd -D (daemon mode): Message logged to syslog, can keep logs for
>>    later traceability in production. Also can use "journalctl -f" to
>>    trace on console.
>>
>> Suggested-by: Shuah Khan <skhan@linuxfoundation.org>
>> Signed-off-by: Zongmin Zhou <zhouzongmin@kylinos.cn>
>> ---
>> Changes in v4:
>> - Printing behavior adjusted as suggested.
>> Changes in v3:
>> - Just add an informational message when no devices are found.
>> Changes in v2:
>> - Use system calls directly instead of checking sysfs dir.
>>
>>   tools/usb/usbip/libsrc/usbip_device_driver.c | 6 +++---
>>   tools/usb/usbip/libsrc/usbip_host_common.c   | 3 +++
>>   tools/usb/usbip/libsrc/usbip_host_driver.c   | 7 ++++---
>>   3 files changed, 10 insertions(+), 6 deletions(-)
>>
>> diff --git a/tools/usb/usbip/libsrc/usbip_device_driver.c
>> b/tools/usb/usbip/libsrc/usbip_device_driver.c
>> index 927a151fa9aa..1dfbb76ab26c 100644
>> --- a/tools/usb/usbip/libsrc/usbip_device_driver.c
>> +++ b/tools/usb/usbip/libsrc/usbip_device_driver.c
>> @@ -137,9 +137,9 @@ static int usbip_device_driver_open(struct
>> usbip_host_driver *hdriver)
>>       INIT_LIST_HEAD(&hdriver->edev_list);
>>         ret = usbip_generic_driver_open(hdriver);
>> -    if (ret)
>> -        err("please load " USBIP_CORE_MOD_NAME ".ko and "
>> -            USBIP_DEVICE_DRV_NAME ".ko!");
>> +    if (ret || hdriver->ndevs == 0)
>> +        info("please load " USBIP_CORE_MOD_NAME ".ko and "
>> +             USBIP_DEVICE_DRV_NAME ".ko");
>>         return ret;
>>   }
>> diff --git a/tools/usb/usbip/libsrc/usbip_host_common.c
>> b/tools/usb/usbip/libsrc/usbip_host_common.c
>> index ca78aa368476..01599cb2fa7b 100644
>> --- a/tools/usb/usbip/libsrc/usbip_host_common.c
>> +++ b/tools/usb/usbip/libsrc/usbip_host_common.c
>> @@ -149,6 +149,9 @@ static int refresh_exported_devices(struct
>> usbip_host_driver *hdriver)
>>           }
>>       }
>>   +    if (hdriver->ndevs == 0)
>> +        info("Please load appropriate modules or export devices.");
>
> Is this message needed here in refresh_exported_devices()?
> usbip_host_driver_open() and usbip_device_driver_open(), the
> only two callers of refresh_exported_devices() print info
> message with this change?
Shuah,

Actually, refresh_exported_devices() has more than two callers:
1. usbip_generic_driver_open() (called by both usbip_host_driver_open()
and usbip_device_driver_open() functions)
2. usbip_generic_refresh_device_list() (called via usbip_refresh_device_list
from process_request())

As we discussed earlier, placing the message in refresh_exported_devices()
covers all scenarios: usbipd startup, usbip list -r, and usbip attach.

usbip_generic_driver_open() is called only once at initialization.

Best regards,
Zongmin
>
> thanks,
> -- Shuah