diff options
author | Andrzej Pietrasiewicz <andrzej.p@samsung.com> | 2015-07-24 09:48:41 +0200 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2015-07-27 10:19:50 -0500 |
commit | 4248bd7d3e2c7c87ff695d812018b8c22b5a5ab1 (patch) | |
tree | 17c3be3e9f9375fd83220d27c1cbed9e730276b4 /drivers/usb | |
parent | 774cf72f8ad971031428f8057d2947c8780a7b8c (diff) |
usb: gadget: f_printer: actually limit the number of instances
There is a predefined maximum number of printer instances, currently 4.
A chrdev region is allocated accordingly, but with configfs the user
can create as many printer function directories as they like. To make the
number of printer instances consistent with the number of allocated
minors, the limit is enforced at directory creation time.
Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/gadget/function/f_printer.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c index 44173df27273..357f63f47b42 100644 --- a/drivers/usb/gadget/function/f_printer.c +++ b/drivers/usb/gadget/function/f_printer.c @@ -1248,7 +1248,15 @@ static struct config_item_type printer_func_type = { static inline int gprinter_get_minor(void) { - return ida_simple_get(&printer_ida, 0, 0, GFP_KERNEL); + int ret; + + ret = ida_simple_get(&printer_ida, 0, 0, GFP_KERNEL); + if (ret >= PRINTER_MINORS) { + ida_simple_remove(&printer_ida, ret); + ret = -ENODEV; + } + + return ret; } static inline void gprinter_put_minor(int minor) |