Re: [PATCH] usb: f_mass_storage: test whether thread is running before starting another

From: Andrzej Pietrasiewicz
Date: Mon Apr 18 2016 - 05:26:58 EST

Hi MichaÅ,

W dniu 07.04.2016 o 18:40, Michal Nazarewicz pisze:
On Thu, 7 Apr 2016, Michal Nazarewicz wrote:
This makes me suspect itâs not possible to link a function instance to
the same configuration twice, but now that I think about it, Iâm not
quite sure what would happen if one did:

ln -s functions/mass_storage.0 configs/c.1/foo
ln -s functions/mass_storage.0 configs/c.1/bar

On Thu, Apr 07 2016, Alan Stern wrote:
Do you think it would be worthwhile to check for this possibility in
the driver and report an error?

I think this should be (if it isnât already) blocked on configfs side.
I cannot see a legitimate use of such configuration and I wouldnât be
surprised if other function drivers broke as well.

Sorry about late response.

The function responsible for verifying if a symlink can be made is
in drivers/usb/gadget/configfs.c: config_usb_cfg_link()

There is a comment from the author:

* Make sure this function is from within our _this_ gadget and not
* from another gadget or a random directory.
* Also a function instance can only be linked once.

This is the code fragment of interest:

list_for_each_entry(f, &cfg->func_list, list) {
if (f->fi == fi) {
ret = -EEXIST;
goto out;