int loopcxt_setup_device(struct loopdev_cxt *lc)
{
int file_fd, dev_fd, mode = O_RDWR, rc = -1, cnt = 0;
+ int errsv = 0;
if (!lc || !*lc->device || !lc->filename)
return -EINVAL;
*/
if (ioctl(dev_fd, LOOP_SET_FD, file_fd) < 0) {
rc = -errno;
+ errsv = errno;
DBG(SETUP, ul_debugobj(lc, "LOOP_SET_FD failed: %m"));
goto err;
}
DBG(SETUP, ul_debugobj(lc, "LOOP_SET_FD: OK"));
if (ioctl(dev_fd, LOOP_SET_STATUS64, &lc->info)) {
+ rc = -errno;
+ errsv = errno;
DBG(SETUP, ul_debugobj(lc, "LOOP_SET_STATUS64 failed: %m"));
goto err;
}
close(file_fd);
if (dev_fd >= 0 && rc != -EBUSY)
ioctl(dev_fd, LOOP_CLR_FD, 0);
+ if (errsv)
+ errno = errsv;
DBG(SETUP, ul_debugobj(lc, "failed [rc=%d]", rc));
return rc;