mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
usb: f_mass_storage: limit number of reported LUNs
commit 8515bac01a upstream.
Mass storage function created via configfs always reports eight LUNs
to the hosts even if only one LUN has been configured. Adjust the
number when the USB function is allocated based on LUNs that user
has created.
Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
35dff3a0bd
commit
1fd1fe35f1
@@ -2786,7 +2786,7 @@ int fsg_common_set_nluns(struct fsg_common *common, int nluns)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
curlun = kcalloc(nluns, sizeof(*curlun), GFP_KERNEL);
|
||||
curlun = kcalloc(FSG_MAX_LUNS, sizeof(*curlun), GFP_KERNEL);
|
||||
if (unlikely(!curlun))
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -2796,8 +2796,6 @@ int fsg_common_set_nluns(struct fsg_common *common, int nluns)
|
||||
common->luns = curlun;
|
||||
common->nluns = nluns;
|
||||
|
||||
pr_info("Number of LUNs=%d\n", common->nluns);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fsg_common_set_nluns);
|
||||
@@ -3563,14 +3561,26 @@ static struct usb_function *fsg_alloc(struct usb_function_instance *fi)
|
||||
struct fsg_opts *opts = fsg_opts_from_func_inst(fi);
|
||||
struct fsg_common *common = opts->common;
|
||||
struct fsg_dev *fsg;
|
||||
unsigned nluns, i;
|
||||
|
||||
fsg = kzalloc(sizeof(*fsg), GFP_KERNEL);
|
||||
if (unlikely(!fsg))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
mutex_lock(&opts->lock);
|
||||
if (!opts->refcnt) {
|
||||
for (nluns = i = 0; i < FSG_MAX_LUNS; ++i)
|
||||
if (common->luns[i])
|
||||
nluns = i + 1;
|
||||
if (!nluns)
|
||||
pr_warn("No LUNS defined, continuing anyway\n");
|
||||
else
|
||||
common->nluns = nluns;
|
||||
pr_info("Number of LUNs=%u\n", common->nluns);
|
||||
}
|
||||
opts->refcnt++;
|
||||
mutex_unlock(&opts->lock);
|
||||
|
||||
fsg->function.name = FSG_DRIVER_DESC;
|
||||
fsg->function.bind = fsg_bind;
|
||||
fsg->function.unbind = fsg_unbind;
|
||||
|
||||
Reference in New Issue
Block a user