diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-06-20 11:25:44 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-06-20 11:25:44 -0400 |
commit | af52739b922f656eb1f39016fabaabe4baeda2e2 (patch) | |
tree | 79a7aa810d0493cd0cf4adebac26d37f12e8b545 /drivers/mcb/mcb-core.c | |
parent | 25ed6a5e97809129a1bc852b6b5c7d03baa112c4 (diff) | |
parent | 33688abb2802ff3a230bd2441f765477b94cc89e (diff) |
Merge 4.7-rc4 into staging-next
We want the fixes in here, and we can resolve a merge issue in
drivers/iio/industrialio-trigger.c
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/mcb/mcb-core.c')
-rw-r--r-- | drivers/mcb/mcb-core.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c index b73c6e7d28e4..6f2c8522e14a 100644 --- a/drivers/mcb/mcb-core.c +++ b/drivers/mcb/mcb-core.c | |||
@@ -61,21 +61,36 @@ static int mcb_probe(struct device *dev) | |||
61 | struct mcb_driver *mdrv = to_mcb_driver(dev->driver); | 61 | struct mcb_driver *mdrv = to_mcb_driver(dev->driver); |
62 | struct mcb_device *mdev = to_mcb_device(dev); | 62 | struct mcb_device *mdev = to_mcb_device(dev); |
63 | const struct mcb_device_id *found_id; | 63 | const struct mcb_device_id *found_id; |
64 | struct module *carrier_mod; | ||
65 | int ret; | ||
64 | 66 | ||
65 | found_id = mcb_match_id(mdrv->id_table, mdev); | 67 | found_id = mcb_match_id(mdrv->id_table, mdev); |
66 | if (!found_id) | 68 | if (!found_id) |
67 | return -ENODEV; | 69 | return -ENODEV; |
68 | 70 | ||
69 | return mdrv->probe(mdev, found_id); | 71 | carrier_mod = mdev->dev.parent->driver->owner; |
72 | if (!try_module_get(carrier_mod)) | ||
73 | return -EINVAL; | ||
74 | |||
75 | get_device(dev); | ||
76 | ret = mdrv->probe(mdev, found_id); | ||
77 | if (ret) | ||
78 | module_put(carrier_mod); | ||
79 | |||
80 | return ret; | ||
70 | } | 81 | } |
71 | 82 | ||
72 | static int mcb_remove(struct device *dev) | 83 | static int mcb_remove(struct device *dev) |
73 | { | 84 | { |
74 | struct mcb_driver *mdrv = to_mcb_driver(dev->driver); | 85 | struct mcb_driver *mdrv = to_mcb_driver(dev->driver); |
75 | struct mcb_device *mdev = to_mcb_device(dev); | 86 | struct mcb_device *mdev = to_mcb_device(dev); |
87 | struct module *carrier_mod; | ||
76 | 88 | ||
77 | mdrv->remove(mdev); | 89 | mdrv->remove(mdev); |
78 | 90 | ||
91 | carrier_mod = mdev->dev.parent->driver->owner; | ||
92 | module_put(carrier_mod); | ||
93 | |||
79 | put_device(&mdev->dev); | 94 | put_device(&mdev->dev); |
80 | 95 | ||
81 | return 0; | 96 | return 0; |