| From 714fb87e8bc05ff78255afc0dca981e8c5242785 Mon Sep 17 00:00:00 2001 |
| From: Iosif Harutyunov <iharutyunov@SonicWALL.com> |
| Date: Fri, 22 Jul 2016 23:22:42 +0000 |
| Subject: ubi: Fix race condition between ubi device creation and udev |
| |
| From: Iosif Harutyunov <iharutyunov@SonicWALL.com> |
| |
| commit 714fb87e8bc05ff78255afc0dca981e8c5242785 upstream. |
| |
| Install the UBI device object before we arm sysfs. |
| Otherwise udev tries to read sysfs attributes before UBI is ready and |
| udev rules will not match. |
| |
| Signed-off-by: Iosif Harutyunov <iharutyunov@sonicwall.com> |
| [rw: massaged commit message] |
| Signed-off-by: Richard Weinberger <richard@nod.at> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/mtd/ubi/build.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/mtd/ubi/build.c |
| +++ b/drivers/mtd/ubi/build.c |
| @@ -987,6 +987,9 @@ int ubi_attach_mtd_dev(struct mtd_info * |
| goto out_detach; |
| } |
| |
| + /* Make device "available" before it becomes accessible via sysfs */ |
| + ubi_devices[ubi_num] = ubi; |
| + |
| err = uif_init(ubi, &ref); |
| if (err) |
| goto out_detach; |
| @@ -1031,7 +1034,6 @@ int ubi_attach_mtd_dev(struct mtd_info * |
| wake_up_process(ubi->bgt_thread); |
| spin_unlock(&ubi->wl_lock); |
| |
| - ubi_devices[ubi_num] = ubi; |
| ubi_notify_all(ubi, UBI_VOLUME_ADDED, NULL); |
| return ubi_num; |
| |
| @@ -1042,6 +1044,7 @@ out_uif: |
| ubi_assert(ref); |
| uif_close(ubi); |
| out_detach: |
| + ubi_devices[ubi_num] = NULL; |
| ubi_wl_close(ubi); |
| ubi_free_internal_volumes(ubi); |
| vfree(ubi->vtbl); |