X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubox.git;a=blobdiff_plain;f=block.c;h=860a95cead30e087d2241794e15611d658b07806;hp=2108a8dab0d4eb557109b5b6b1d3337aed33db16;hb=0828095b1600fe19dc1112fbcde84a3cbfa8b2b5;hpb=01c0caf457a55488cfb749a0c17bbbd7e24d4328 diff --git a/block.c b/block.c index 2108a8d..860a95c 100644 --- a/block.c +++ b/block.c @@ -327,7 +327,7 @@ static int _cache_load(const char *path) struct blkid_struct_probe *pr = malloc(sizeof(struct blkid_struct_probe)); memset(pr, 0, sizeof(struct blkid_struct_probe)); probe_block(gl.gl_pathv[j], pr); - if (pr->err) + if (pr->err || !pr->id) free(pr); else list_add_tail(&pr->list, &devices); @@ -344,6 +344,10 @@ static void cache_load(int mtd) _cache_load("/dev/mtdblock*"); _cache_load("/dev/mmcblk*"); _cache_load("/dev/sd*"); + _cache_load("/dev/sdc*"); + _cache_load("/dev/hd*"); + _cache_load("/dev/md*"); + _cache_load("/dev/mapper/*"); } static int print_block_info(struct blkid_struct_probe *pr) @@ -377,7 +381,7 @@ static int print_block_uci(struct blkid_struct_probe *pr) if (pr->uuid[0]) printf("\toption\tuuid\t'%s'\n", pr->uuid); else - printf("\toption\tdevice\t'%s'\n", basename(pr->dev)); + printf("\toption\tdevice\t'%s'\n", pr->dev); printf("\toption\tenabled\t'0'\n\n"); return 0; @@ -477,11 +481,13 @@ static void check_filesystem(struct blkid_struct_probe *pr) static int mount_device(struct blkid_struct_probe *pr, int hotplug) { struct mount *m; - char *device = basename(pr->dev); + char *device; if (!pr) return -1; + device = basename(pr->dev); + if (!strcmp(pr->id->name, "swap")) { if (hotplug && !auto_swap) return -1; @@ -712,6 +718,8 @@ static int mount_extroot(char *cfg) if (!pr && delay_root){ fprintf(stderr, "extroot: is not ready yet, retrying in %ui seconds\n", delay_root); sleep(delay_root); + mkblkdev(); + cache_load(0); pr = find_block_info(m->uuid, m->label, NULL); } if (pr) {