RE: [PATCH 04/10] usb/gadget: add some infracture to register/unregister functions

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

 



On Monday, October 22, 2012 1:03 PM Sebastian Andrzej Siewior wrote:

> * Andrzej Pietrasiewicz | 2012-10-18 13:17:18 [+0200]:
> 
> >Hello Sebastian,
> Hi Andrzej,
> 

<snip>


> 
> This should not happen, I should have put the module.
> 
> >Even if the caller did call usb_put_function, the uf->mod is not set
> >anyway, so module_put() is not called.
> >

<snip>

> 
> No, thanks for the hint. So with this in my tree
> | {
> |         struct usb_d_function *f;
> |         struct usb_function *uf;
> |
> |         mutex_lock(&func_lock);
> |         list_for_each_entry(f, &func_list, list) {
> |                 if (!strcmp(name, f->name)) {
> |                         bool ok;
> |                         ok = try_module_get(f->mod);
> |                         uf = ERR_PTR(-EBUSY);
> |                         if (!ok)
> |                                 goto out;
> |                         uf = f->alloc();
> |                         if (uf) {
> |                                 uf->mod = f->mod;
> |                         } else {
> |                                 module_put(f->mod);
> |                                 uf = ERR_PTR(-ENOMEM);
> |                         }
> |                         mutex_unlock(&func_lock);
> |                         return uf;
> |                 }
> |         }
> |         uf = ERR_PTR(-ENOENT);
> | out:
> |         mutex_unlock(&func_lock);
> |         return uf;
> | }
> 
> it should be fine, right?
> 

Looks good to me.

AP


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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux