The superblocks probe bails out early with no results in some cases. If
this happens, blkid_do_probe needs to go to the next chain, rather than
entering an infinite loop calling superblocks_probe over and over again.
[kzak@redhat.com: - print debug message always when leaving
superblocks_probe()]
Addresses: https://bugs.launchpad.net/bugs/528073
Signed-off-by: Colin Watson <cjwatson@canonical.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
/* we go to the next chain only when the previous probing
* result was nothing (rc == 1) and when the current chain is
* disabled or we are at end of the current chain (chain->idx +
- * 1 == sizeof chain)
+ * 1 == sizeof chain) or the current chain bailed out right at
+ * the start (chain->idx == -1)
*/
else if (rc == 1 && (chn->enabled == FALSE ||
- chn->idx + 1 == chn->driver->nidinfos)) {
+ chn->idx + 1 == chn->driver->nidinfos ||
+ chn->idx == -1)) {
int idx = chn->driver->id + 1;
/* Ignore very very small block devices or regular files (e.g.
* extended partitions). Note that size of the UBI char devices
* is 1 byte */
- return 1;
+ goto nothing;
i = chn->idx + 1;
id->name, chn->idx));
return 0;
}
+
+nothing:
DBG(DEBUG_LOWPROBE,
printf("<-- leaving probing loop (failed) [SUBLKS idx=%d]\n",
chn->idx));