UBI: cleanup usage of try_module_get
The use of try_module_get(THIS_MODULE) in ubi_get_device_info does not offer real protection against unexpected driver unloads, since we could be preempted before try_modules_get gets executed. It is the caller who should manipulate the refcounts. Besides, ubi_get_device_info is an exported symbol which guarantees protection when accessed through symbol_get. Signed-off-by: Fernando Luis Vazquez Cao <fernando@oss.ntt.co.jp> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
parent
d08c3b78b8
commit
2db61c95c0
|
@ -37,12 +37,8 @@ int ubi_get_device_info(int ubi_num, struct ubi_device_info *di)
|
||||||
{
|
{
|
||||||
const struct ubi_device *ubi;
|
const struct ubi_device *ubi;
|
||||||
|
|
||||||
if (!try_module_get(THIS_MODULE))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES ||
|
if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES ||
|
||||||
!ubi_devices[ubi_num]) {
|
!ubi_devices[ubi_num]) {
|
||||||
module_put(THIS_MODULE);
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +48,6 @@ int ubi_get_device_info(int ubi_num, struct ubi_device_info *di)
|
||||||
di->min_io_size = ubi->min_io_size;
|
di->min_io_size = ubi->min_io_size;
|
||||||
di->ro_mode = ubi->ro_mode;
|
di->ro_mode = ubi->ro_mode;
|
||||||
di->cdev = MKDEV(ubi->major, 0);
|
di->cdev = MKDEV(ubi->major, 0);
|
||||||
module_put(THIS_MODULE);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(ubi_get_device_info);
|
EXPORT_SYMBOL_GPL(ubi_get_device_info);
|
||||||
|
|
Loading…
Reference in New Issue