dm: add check target device probe completely

Because some mmc execute tuning should take more time,
so if dm target device is not probe completely before dm verity,
will trigger:

[    0.834803] device-mapper: init: attempting early device configuration.
[    0.836226] device-mapper: init: adding target '0 1031864 verity 1 PARTUUID=cfc90ed7-b23f-459b-896f-8135b56567a1 PARTUUID=cfc90ed7-b23f-459b-896f-8135b56567a1 4096 4096 128983 128983 sha1 d0f6e81bf584217e524e88b023d0c70422fb2f19 e939f8142d39394fb14f0df917de9346cb045b78 10 restart_on_corruption ignore_zero_blocks use_fec_from_device PARTUUID=cfc90ed7-b23f-459b-896f-8135b56567a1 fec_roots 2 fec_blocks 130000 fec_start 130000'
[    0.836341] device-mapper: table: 253:0: verity: Data device lookup failed
[    0.836355] device-mapper: init: starting dm-0 (vroot) failed
[    0.836916] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[    0.843161] pgd = c0004000
[    0.843415] [00000000] *pgd=00000000
[    0.843810] Internal error: Oops: 80000005 [#1] PREEMPT SMP ARM
[    0.844345] CPU: 2 PID: 1 Comm: swapper/0 Not tainted 4.4.77 #1
[    0.844870] Hardware name: Generic DT based system
[    0.845299] task: de4b0000 ti: de4b8000 task.ti: de4b8000
[    0.845782] PC is at 0x0
[    0.846018] LR is at generic_make_request+0xc8/0x220
[    0.846458] pc : [<00000000>]    lr : [<c03aae2c>]    psr: 60000013
[    0.846458] sp : de4b9b58  ip : 00000004  fp : de4b9d9c
[    0.847466] r10: 00000000  r9 : de7fb020  r8 : c100390c
[    0.847927] r7 : ffffffff  r6 : de4b9b5c  r5 : 00000000  r4 : dde71540
[    0.848508] r3 : 00000000  r2 : dc8ba64d  r1 : dde71540  r0 : de7fb020
[    0.849080] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[    0.849714] Control: 10c5387d  Table: 6000406a  DAC: 00000051

Change-Id: Idf9a33fd15adab8aa5e13f74c92b3270c9877035
Signed-off-by: Weiwen Chen <cww@rock-chips.com>
This commit is contained in:
Weiwen Chen 2018-09-04 13:50:43 +08:00 committed by Tao Huang
parent 2de215e4af
commit 5df5bb12d7

View File

@ -748,6 +748,16 @@ int dm_table_add_target(struct dm_table *t, const char *type,
goto bad;
}
#ifdef CONFIG_ARCH_ROCKCHIP
while (argv &&
strncmp(argv[1], "PARTUUID=", 9) == 0 &&
name_to_dev_t(argv[1]) == 0) {
DMINFO("%s: %s: Waiting for device %s ...",
dm_device_name(t->md), type, argv[1]);
msleep(100);
}
#endif
r = tgt->type->ctr(tgt, argc, argv);
kfree(argv);
if (r)