[BUG?] ubi.fm_autoconvert=1 on first boot

Submitted by Richard Weinberger on Jan. 25, 2017, 8:58 a.m.

Details

Message ID 6708b0f4-63e4-663f-794a-13b95f38a928@nod.at
State New
Delegated to: Richard Weinberger
Headers show

Commit Message

Richard Weinberger Jan. 25, 2017, 8:58 a.m.
Steffen,

Am 25.11.2016 um 14:51 schrieb Steffen Trumtrar:
> [    3.167543] ubi1: scanning is finished
> [    3.190860] ubi1 error: ubi_refill_pools: no free eraseblocks
> [    3.196670] ubi1 error: ubi_update_fastmap: could not find any anchor PEB
> [    3.203608] ubi1 warning: ubi_update_fastmap: Unable to write new fastmap, err=-28
> [    3.211299] ubi1 error: ubi_refill_pools: no free eraseblocks
> [    3.217082] ubi1 error: ubi_update_fastmap: could not find any anchor PEB
> [    3.223965] ubi1 warning: ubi_update_fastmap: Unable to write new fastmap, err=-28
> [    3.231632] ubi1 error: ubi_wl_get_peb: Unable to get a free PEB from user WL pool
> [    3.239320] ubi1 warning: ubi_eba_atomic_leb_change: switch to read-only mode
> [    3.246484] CPU: 0 PID: 1 Comm: swapper Not tainted 4.9.0-rc6 #45
> [    3.255341] Hardware name: Freescale MXS (Device Tree)
> [    3.260616] [<c000ed60>] (unwind_backtrace) from [<c000d0a4>] (show_stack+0x10/0x14)
> [    3.268483] [<c000d0a4>] (show_stack) from [<c020d364>] (ubi_eba_atomic_leb_change+0x3c4/0x3e0)
> [    3.277232] [<c020d364>] (ubi_eba_atomic_leb_change) from [<c020470c>] (ubi_update_layout_vol+0x38/0x54)
> [    3.286826] [<c020470c>] (ubi_update_layout_vol) from [<c0204e00>] (ubi_change_vtbl_record+0x8c/0x110)
> [    3.296247] [<c0204e00>] (ubi_change_vtbl_record) from [<c0206a60>] (ubi_resize_volume+0x158/0x2e0)
> [    3.305406] [<c0206a60>] (ubi_resize_volume) from [<c02079f4>] (autoresize+0x68/0x130)
> [    3.313437] [<c02079f4>] (autoresize) from [<c0208518>] (ubi_attach_mtd_dev+0x4c4/0xd54)
> [    3.321641] [<c0208518>] (ubi_attach_mtd_dev) from [<c0452828>] (ubi_init+0x1bc/0x25c)
> [    3.329688] [<c0452828>] (ubi_init) from [<c0009594>] (do_one_initcall+0x3c/0x17c)
> [    3.337306] [<c0009594>] (do_one_initcall) from [<c0440cf0>] (kernel_init_freeable+0x108/0x1d0)
> [    3.346123] [<c0440cf0>] (kernel_init_freeable) from [<c0345a98>] (kernel_init+0x8/0xf8)
> [    3.354331] [<c0345a98>] (kernel_init) from [<c000a2d0>] (ret_from_fork+0x14/0x24)
> [    3.362017] ubi1 error: autoresize: cannot auto-resize volume 0
> [    3.369308] UBI error: cannot attach mtd8[    3.373284] stmp3xxx-rtc 80056000.rtc: setting system clock to 1970-01-01 00:57:18 UTC (3438)
> [    3.382547] usb0_vbus: disabling
> [    3.386189] uart-pl011 80074000.serial: no DMA platform data
> [    3.394947] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 40
> [    3.482996] UBIFS (ubi0:0): recovery needed
> [    3.739605] UBIFS (ubi0:0): recovery completed
> [    3.744224] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "root"
> [    3.751583] UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
> [    3.761600] UBIFS (ubi0:0): FS size: 61837312 bytes (58 MiB, 487 LEBs), journal size 9023488 bytes (8 MiB, 72 LEBs)
> [    3.772122] UBIFS (ubi0:0): reserved for root: 0 bytes (0 KiB)
> [    3.778051] UBIFS (ubi0:0): media format: w4/r0 (latest is w4/r0), UUID 79048B39-39D6-4BA2-89CF-8F2A0C699060, small LPT model
> [    3.791974] VFS: Mounted root (ubifs filesystem) on device 0:14.
> [    3.801380] devtmpfs: mounted
> [    3.805096] Freeing unused kernel memory: 144K (c0440000 - c0464000)
> [    3.811571] This architecture does not have kernel memory protection.
> mounting filesystems...[    4.463895] UBIFS error (pid: 44): cannot open "ubi1:data", error -19done.

Can you please give the attached patch a try?
It is untested since I cannot reproduce.

Thanks,
//richard

Comments

Steffen Trumtrar Jan. 30, 2017, 9:23 a.m.
Hi Richard!

Richard Weinberger <richard@nod.at> writes:

> Steffen,
>
> Am 25.11.2016 um 14:51 schrieb Steffen Trumtrar:
>> [    3.167543] ubi1: scanning is finished
>> [    3.190860] ubi1 error: ubi_refill_pools: no free eraseblocks
>> [    3.196670] ubi1 error: ubi_update_fastmap: could not find any anchor PEB
>> [    3.203608] ubi1 warning: ubi_update_fastmap: Unable to write new fastmap, err=-28
>> [    3.211299] ubi1 error: ubi_refill_pools: no free eraseblocks
>> [    3.217082] ubi1 error: ubi_update_fastmap: could not find any anchor PEB
>> [    3.223965] ubi1 warning: ubi_update_fastmap: Unable to write new fastmap, err=-28
>> [    3.231632] ubi1 error: ubi_wl_get_peb: Unable to get a free PEB from user WL pool
>> [    3.239320] ubi1 warning: ubi_eba_atomic_leb_change: switch to read-only mode
>> [    3.246484] CPU: 0 PID: 1 Comm: swapper Not tainted 4.9.0-rc6 #45
>> [    3.255341] Hardware name: Freescale MXS (Device Tree)
>> [    3.260616] [<c000ed60>] (unwind_backtrace) from [<c000d0a4>] (show_stack+0x10/0x14)
>> [    3.268483] [<c000d0a4>] (show_stack) from [<c020d364>] (ubi_eba_atomic_leb_change+0x3c4/0x3e0)
>> [    3.277232] [<c020d364>] (ubi_eba_atomic_leb_change) from [<c020470c>] (ubi_update_layout_vol+0x38/0x54)
>> [    3.286826] [<c020470c>] (ubi_update_layout_vol) from [<c0204e00>] (ubi_change_vtbl_record+0x8c/0x110)
>> [    3.296247] [<c0204e00>] (ubi_change_vtbl_record) from [<c0206a60>] (ubi_resize_volume+0x158/0x2e0)
>> [    3.305406] [<c0206a60>] (ubi_resize_volume) from [<c02079f4>] (autoresize+0x68/0x130)
>> [    3.313437] [<c02079f4>] (autoresize) from [<c0208518>] (ubi_attach_mtd_dev+0x4c4/0xd54)
>> [    3.321641] [<c0208518>] (ubi_attach_mtd_dev) from [<c0452828>] (ubi_init+0x1bc/0x25c)
>> [    3.329688] [<c0452828>] (ubi_init) from [<c0009594>] (do_one_initcall+0x3c/0x17c)
>> [    3.337306] [<c0009594>] (do_one_initcall) from [<c0440cf0>] (kernel_init_freeable+0x108/0x1d0)
>> [    3.346123] [<c0440cf0>] (kernel_init_freeable) from [<c0345a98>] (kernel_init+0x8/0xf8)
>> [    3.354331] [<c0345a98>] (kernel_init) from [<c000a2d0>] (ret_from_fork+0x14/0x24)
>> [    3.362017] ubi1 error: autoresize: cannot auto-resize volume 0
>> [    3.369308] UBI error: cannot attach mtd8[    3.373284] stmp3xxx-rtc 80056000.rtc: setting system clock to 1970-01-01 00:57:18 UTC (3438)
>> [    3.382547] usb0_vbus: disabling
>> [    3.386189] uart-pl011 80074000.serial: no DMA platform data
>> [    3.394947] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 40
>> [    3.482996] UBIFS (ubi0:0): recovery needed
>> [    3.739605] UBIFS (ubi0:0): recovery completed
>> [    3.744224] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "root"
>> [    3.751583] UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
>> [    3.761600] UBIFS (ubi0:0): FS size: 61837312 bytes (58 MiB, 487 LEBs), journal size 9023488 bytes (8 MiB, 72 LEBs)
>> [    3.772122] UBIFS (ubi0:0): reserved for root: 0 bytes (0 KiB)
>> [    3.778051] UBIFS (ubi0:0): media format: w4/r0 (latest is w4/r0), UUID 79048B39-39D6-4BA2-89CF-8F2A0C699060, small LPT model
>> [    3.791974] VFS: Mounted root (ubifs filesystem) on device 0:14.
>> [    3.801380] devtmpfs: mounted
>> [    3.805096] Freeing unused kernel memory: 144K (c0440000 - c0464000)
>> [    3.811571] This architecture does not have kernel memory protection.
>> mounting filesystems...[    4.463895] UBIFS error (pid: 44): cannot open "ubi1:data", error -19done.
>
> Can you please give the attached patch a try?
> It is untested since I cannot reproduce.
>

Thank you for the patch, I will get back to you once I found the time
to test it.

Thanks,
Steffen
Sascha Hauer Feb. 28, 2017, 2:50 p.m.
Hi Richard,

On Wed, Jan 25, 2017 at 09:58:34AM +0100, Richard Weinberger wrote:
> Steffen,
> 
> Am 25.11.2016 um 14:51 schrieb Steffen Trumtrar:
> > [    3.167543] ubi1: scanning is finished
> > [    3.190860] ubi1 error: ubi_refill_pools: no free eraseblocks
> > [    3.196670] ubi1 error: ubi_update_fastmap: could not find any anchor PEB
> > [    3.203608] ubi1 warning: ubi_update_fastmap: Unable to write new fastmap, err=-28
> > [    3.211299] ubi1 error: ubi_refill_pools: no free eraseblocks
> > [    3.217082] ubi1 error: ubi_update_fastmap: could not find any anchor PEB
> > [    3.223965] ubi1 warning: ubi_update_fastmap: Unable to write new fastmap, err=-28
> > [    3.231632] ubi1 error: ubi_wl_get_peb: Unable to get a free PEB from user WL pool
> > [    3.239320] ubi1 warning: ubi_eba_atomic_leb_change: switch to read-only mode
> > [    3.246484] CPU: 0 PID: 1 Comm: swapper Not tainted 4.9.0-rc6 #45
> > [    3.255341] Hardware name: Freescale MXS (Device Tree)
> > [    3.260616] [<c000ed60>] (unwind_backtrace) from [<c000d0a4>] (show_stack+0x10/0x14)
> > [    3.268483] [<c000d0a4>] (show_stack) from [<c020d364>] (ubi_eba_atomic_leb_change+0x3c4/0x3e0)
> > [    3.277232] [<c020d364>] (ubi_eba_atomic_leb_change) from [<c020470c>] (ubi_update_layout_vol+0x38/0x54)
> > [    3.286826] [<c020470c>] (ubi_update_layout_vol) from [<c0204e00>] (ubi_change_vtbl_record+0x8c/0x110)
> > [    3.296247] [<c0204e00>] (ubi_change_vtbl_record) from [<c0206a60>] (ubi_resize_volume+0x158/0x2e0)
> > [    3.305406] [<c0206a60>] (ubi_resize_volume) from [<c02079f4>] (autoresize+0x68/0x130)
> > [    3.313437] [<c02079f4>] (autoresize) from [<c0208518>] (ubi_attach_mtd_dev+0x4c4/0xd54)
> > [    3.321641] [<c0208518>] (ubi_attach_mtd_dev) from [<c0452828>] (ubi_init+0x1bc/0x25c)
> > [    3.329688] [<c0452828>] (ubi_init) from [<c0009594>] (do_one_initcall+0x3c/0x17c)
> > [    3.337306] [<c0009594>] (do_one_initcall) from [<c0440cf0>] (kernel_init_freeable+0x108/0x1d0)
> > [    3.346123] [<c0440cf0>] (kernel_init_freeable) from [<c0345a98>] (kernel_init+0x8/0xf8)
> > [    3.354331] [<c0345a98>] (kernel_init) from [<c000a2d0>] (ret_from_fork+0x14/0x24)
> > [    3.362017] ubi1 error: autoresize: cannot auto-resize volume 0
> > [    3.369308] UBI error: cannot attach mtd8[    3.373284] stmp3xxx-rtc 80056000.rtc: setting system clock to 1970-01-01 00:57:18 UTC (3438)
> > [    3.382547] usb0_vbus: disabling
> > [    3.386189] uart-pl011 80074000.serial: no DMA platform data
> > [    3.394947] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 40
> > [    3.482996] UBIFS (ubi0:0): recovery needed
> > [    3.739605] UBIFS (ubi0:0): recovery completed
> > [    3.744224] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "root"
> > [    3.751583] UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
> > [    3.761600] UBIFS (ubi0:0): FS size: 61837312 bytes (58 MiB, 487 LEBs), journal size 9023488 bytes (8 MiB, 72 LEBs)
> > [    3.772122] UBIFS (ubi0:0): reserved for root: 0 bytes (0 KiB)
> > [    3.778051] UBIFS (ubi0:0): media format: w4/r0 (latest is w4/r0), UUID 79048B39-39D6-4BA2-89CF-8F2A0C699060, small LPT model
> > [    3.791974] VFS: Mounted root (ubifs filesystem) on device 0:14.
> > [    3.801380] devtmpfs: mounted
> > [    3.805096] Freeing unused kernel memory: 144K (c0440000 - c0464000)
> > [    3.811571] This architecture does not have kernel memory protection.
> > mounting filesystems...[    4.463895] UBIFS error (pid: 44): cannot open "ubi1:data", error -19done.
> 
> Can you please give the attached patch a try?
> It is untested since I cannot reproduce.

The patch works. I also had problems reproducing this until I realized
the difference is in ubiformat vs. plain flash_erase/nandwrite. When flashed
with ubiformat everything works fine. When we use plain nandwrite the scanned
empty PEBs do not have a ec header and go to the erase list instead of the
free list. Now the autoresize operation triggers a ubi_update_fastmap
which does not find a free block because all potentially free blocks are
sitting on the erase list.

Doing the volume resize after the wear leveling thread has been started
as you suggested works, so:

Tested-by: Sascha Hauer <s.hauer@pengutronix.de>

For reference: To reproduce try the following:

ubi.ini:
--------
[volume]
mode=ubi
vol_id=1
vol_size=30MiB
vol_type=dynamic
vol_name=volume1
vol_alignment=1
vol_flags=autoresize

ubinize -m 2048 -s 2048 -o ubi.img ubi.ini -p 131072
echo Y > /sys/module/ubi/parameters/fm_autoconvert
flash_erase /dev/mtd0 0 0
nandwrite /dev/mtd0 ubi.img
ubiattach -m 0

Sascha

> diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
> index 85d54f37e28f..264734c4b892 100644
> --- a/drivers/mtd/ubi/build.c
> +++ b/drivers/mtd/ubi/build.c
> @@ -986,12 +986,6 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
>  		goto out_free;
>  	}
>  
> -	if (ubi->autoresize_vol_id != -1) {
> -		err = autoresize(ubi, ubi->autoresize_vol_id);
> -		if (err)
> -			goto out_detach;
> -	}
> -
>  	/* Make device "available" before it becomes accessible via sysfs */
>  	ubi_devices[ubi_num] = ubi;
>  
> @@ -1039,9 +1033,17 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
>  	wake_up_process(ubi->bgt_thread);
>  	spin_unlock(&ubi->wl_lock);
>  
> +	if (ubi->autoresize_vol_id != -1) {
> +		err = autoresize(ubi, ubi->autoresize_vol_id);
> +		if (err)
> +			goto out_kthread;
> +	}
> +
>  	ubi_notify_all(ubi, UBI_VOLUME_ADDED, NULL);
>  	return ubi_num;
>  
> +out_kthread:
> +	kthread_stop(ubi->bgt_thread);
>  out_debugfs:
>  	ubi_debugfs_exit_dev(ubi);
>  out_uif:
Sascha Hauer March 1, 2017, 9:42 a.m.
On Tue, Feb 28, 2017 at 03:50:45PM +0100, Sascha Hauer wrote:
> Hi Richard,
> 
> On Wed, Jan 25, 2017 at 09:58:34AM +0100, Richard Weinberger wrote:
> > Steffen,
> > 
> > Am 25.11.2016 um 14:51 schrieb Steffen Trumtrar:
> > > [    3.167543] ubi1: scanning is finished
> > > [    3.190860] ubi1 error: ubi_refill_pools: no free eraseblocks
> > > [    3.196670] ubi1 error: ubi_update_fastmap: could not find any anchor PEB
> > > [    3.203608] ubi1 warning: ubi_update_fastmap: Unable to write new fastmap, err=-28
> > > [    3.211299] ubi1 error: ubi_refill_pools: no free eraseblocks
> > > [    3.217082] ubi1 error: ubi_update_fastmap: could not find any anchor PEB
> > > [    3.223965] ubi1 warning: ubi_update_fastmap: Unable to write new fastmap, err=-28
> > > [    3.231632] ubi1 error: ubi_wl_get_peb: Unable to get a free PEB from user WL pool
> > > [    3.239320] ubi1 warning: ubi_eba_atomic_leb_change: switch to read-only mode
> > > [    3.246484] CPU: 0 PID: 1 Comm: swapper Not tainted 4.9.0-rc6 #45
> > > [    3.255341] Hardware name: Freescale MXS (Device Tree)
> > > [    3.260616] [<c000ed60>] (unwind_backtrace) from [<c000d0a4>] (show_stack+0x10/0x14)
> > > [    3.268483] [<c000d0a4>] (show_stack) from [<c020d364>] (ubi_eba_atomic_leb_change+0x3c4/0x3e0)
> > > [    3.277232] [<c020d364>] (ubi_eba_atomic_leb_change) from [<c020470c>] (ubi_update_layout_vol+0x38/0x54)
> > > [    3.286826] [<c020470c>] (ubi_update_layout_vol) from [<c0204e00>] (ubi_change_vtbl_record+0x8c/0x110)
> > > [    3.296247] [<c0204e00>] (ubi_change_vtbl_record) from [<c0206a60>] (ubi_resize_volume+0x158/0x2e0)
> > > [    3.305406] [<c0206a60>] (ubi_resize_volume) from [<c02079f4>] (autoresize+0x68/0x130)
> > > [    3.313437] [<c02079f4>] (autoresize) from [<c0208518>] (ubi_attach_mtd_dev+0x4c4/0xd54)
> > > [    3.321641] [<c0208518>] (ubi_attach_mtd_dev) from [<c0452828>] (ubi_init+0x1bc/0x25c)
> > > [    3.329688] [<c0452828>] (ubi_init) from [<c0009594>] (do_one_initcall+0x3c/0x17c)
> > > [    3.337306] [<c0009594>] (do_one_initcall) from [<c0440cf0>] (kernel_init_freeable+0x108/0x1d0)
> > > [    3.346123] [<c0440cf0>] (kernel_init_freeable) from [<c0345a98>] (kernel_init+0x8/0xf8)
> > > [    3.354331] [<c0345a98>] (kernel_init) from [<c000a2d0>] (ret_from_fork+0x14/0x24)
> > > [    3.362017] ubi1 error: autoresize: cannot auto-resize volume 0
> > > [    3.369308] UBI error: cannot attach mtd8[    3.373284] stmp3xxx-rtc 80056000.rtc: setting system clock to 1970-01-01 00:57:18 UTC (3438)
> > > [    3.382547] usb0_vbus: disabling
> > > [    3.386189] uart-pl011 80074000.serial: no DMA platform data
> > > [    3.394947] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 40
> > > [    3.482996] UBIFS (ubi0:0): recovery needed
> > > [    3.739605] UBIFS (ubi0:0): recovery completed
> > > [    3.744224] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "root"
> > > [    3.751583] UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
> > > [    3.761600] UBIFS (ubi0:0): FS size: 61837312 bytes (58 MiB, 487 LEBs), journal size 9023488 bytes (8 MiB, 72 LEBs)
> > > [    3.772122] UBIFS (ubi0:0): reserved for root: 0 bytes (0 KiB)
> > > [    3.778051] UBIFS (ubi0:0): media format: w4/r0 (latest is w4/r0), UUID 79048B39-39D6-4BA2-89CF-8F2A0C699060, small LPT model
> > > [    3.791974] VFS: Mounted root (ubifs filesystem) on device 0:14.
> > > [    3.801380] devtmpfs: mounted
> > > [    3.805096] Freeing unused kernel memory: 144K (c0440000 - c0464000)
> > > [    3.811571] This architecture does not have kernel memory protection.
> > > mounting filesystems...[    4.463895] UBIFS error (pid: 44): cannot open "ubi1:data", error -19done.
> > 
> > Can you please give the attached patch a try?
> > It is untested since I cannot reproduce.
> 
> The patch works.

Hm, this patch works on mainline, but not on my 3.10 Frankenkernel. I
wonder if there's anything in mainline that makes sure that the wearlevel
worker has actually produced free PEBs before they are needed?

Sascha
Richard Weinberger March 3, 2017, 8:15 a.m.
Sascha,

Am 01.03.2017 um 10:42 schrieb Sascha Hauer:
>> The patch works.
> 
> Hm, this patch works on mainline, but not on my 3.10 Frankenkernel. I
> wonder if there's anything in mainline that makes sure that the wearlevel
> worker has actually produced free PEBs before they are needed?

So it works every tine on mainline but never on 3.10?
Just trying to make sure that it is not a timing issue.

In 3.10 Fastmap was very buggy and saw in later kernels many fixes,
did you backport all of them? Sadly in the early days of Fastmap
we did not mark patches for stable because it was experimental.
...which was a major error on our side.
In doubt you can backport the whole UBI subsystem.
This is rather easy because it has not much dependencies and does not change
that fast.

Thanks,
//richard
Sascha Hauer March 3, 2017, 9:46 a.m.
Hi Richard,

On Fri, Mar 03, 2017 at 09:15:55AM +0100, Richard Weinberger wrote:
> Sascha,
> 
> Am 01.03.2017 um 10:42 schrieb Sascha Hauer:
> >> The patch works.
> > 
> > Hm, this patch works on mainline, but not on my 3.10 Frankenkernel. I
> > wonder if there's anything in mainline that makes sure that the wearlevel
> > worker has actually produced free PEBs before they are needed?
> 
> So it works every tine on mainline but never on 3.10?
> Just trying to make sure that it is not a timing issue.

It works on 3.10 when I add a mdelay(100) between starting the wearlevel
thread and autoresizing the volume, so indeed I assume it's a timing
issue.
Maybe I can provoke the failure on mainline with your patch applied by
adding a delay in the wear level thread.

> 
> In 3.10 Fastmap was very buggy and saw in later kernels many fixes,
> did you backport all of them? Sadly in the early days of Fastmap
> we did not mark patches for stable because it was experimental.
> ...which was a major error on our side.
> In doubt you can backport the whole UBI subsystem.
> This is rather easy because it has not much dependencies and does not change
> that fast.

My 3.10 has UBI/UBIFS patches backported from roughly 4.0, so
Frankenkernel is the right term to call it ;)
I remember backporting newer UBI patches at some point becomes difficult
because some newer kernel functions/macros are missing.

Sascha

Patch hide | download patch | download mbox

diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 85d54f37e28f..264734c4b892 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -986,12 +986,6 @@  int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
 		goto out_free;
 	}
 
-	if (ubi->autoresize_vol_id != -1) {
-		err = autoresize(ubi, ubi->autoresize_vol_id);
-		if (err)
-			goto out_detach;
-	}
-
 	/* Make device "available" before it becomes accessible via sysfs */
 	ubi_devices[ubi_num] = ubi;
 
@@ -1039,9 +1033,17 @@  int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
 	wake_up_process(ubi->bgt_thread);
 	spin_unlock(&ubi->wl_lock);
 
+	if (ubi->autoresize_vol_id != -1) {
+		err = autoresize(ubi, ubi->autoresize_vol_id);
+		if (err)
+			goto out_kthread;
+	}
+
 	ubi_notify_all(ubi, UBI_VOLUME_ADDED, NULL);
 	return ubi_num;
 
+out_kthread:
+	kthread_stop(ubi->bgt_thread);
 out_debugfs:
 	ubi_debugfs_exit_dev(ubi);
 out_uif: