From 531fc5e280516df553ec912b0d3d61c59a202065 Mon Sep 17 00:00:00 2001 From: Weiwen Chen Date: Tue, 4 Sep 2018 13:50:43 +0800 Subject: [PATCH] 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 : [] 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 --- drivers/md/dm-table.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 47a54deb8cb1..2f631630cc39 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -785,6 +785,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)