loopdev: Do not treat errors when detecting overlap as fatal

When looking for overlapping loop device we can fail getting some loop
device properties when we race with device autoclear. Just squelsh these
errors and try next loop device.

Signed-off-by: Jan Kara <jack@suse.cz>
pull/1581/head
Jan Kara 10 months ago committed by Karel Zak
parent fb4b6b1154
commit 562990b552
  1. 15
      lib/loopdev.c

@ -1777,10 +1777,13 @@ int loopcxt_find_overlap(struct loopdev_cxt *lc, const char *filename,
rc = loopcxt_is_used(lc, hasst ? &st : NULL,
filename, offset, sizelimit, 0);
if (!rc)
continue; /* unused */
if (rc < 0)
break; /* error */
/*
* Either the loopdev is unused or we've got an error which can
* happen when we are racing with device autoclear. Just ignore
* this loopdev...
*/
if (rc <= 0)
continue;
DBG(CXT, ul_debugobj(lc, "found %s backed by %s",
loopcxt_get_device(lc), filename));
@ -1789,13 +1792,13 @@ int loopcxt_find_overlap(struct loopdev_cxt *lc, const char *filename,
if (rc) {
DBG(CXT, ul_debugobj(lc, "failed to get offset for device %s",
loopcxt_get_device(lc)));
break;
continue;
}
rc = loopcxt_get_sizelimit(lc, &lc_sizelimit);
if (rc) {
DBG(CXT, ul_debugobj(lc, "failed to get sizelimit for device %s",
loopcxt_get_device(lc)));
break;
continue;
}
/* full match */

Loading…
Cancel
Save