|
@@ -81,6 +81,7 @@ static int vss_operate(int operation)
|
|
char match[] = "/dev/";
|
|
char match[] = "/dev/";
|
|
FILE *mounts;
|
|
FILE *mounts;
|
|
struct mntent *ent;
|
|
struct mntent *ent;
|
|
|
|
+ char errdir[1024] = {0};
|
|
unsigned int cmd;
|
|
unsigned int cmd;
|
|
int error = 0, root_seen = 0, save_errno = 0;
|
|
int error = 0, root_seen = 0, save_errno = 0;
|
|
|
|
|
|
@@ -115,6 +116,8 @@ static int vss_operate(int operation)
|
|
goto err;
|
|
goto err;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ endmntent(mounts);
|
|
|
|
+
|
|
if (root_seen) {
|
|
if (root_seen) {
|
|
error |= vss_do_freeze("/", cmd);
|
|
error |= vss_do_freeze("/", cmd);
|
|
if (error && operation == VSS_OP_FREEZE)
|
|
if (error && operation == VSS_OP_FREEZE)
|
|
@@ -124,16 +127,19 @@ static int vss_operate(int operation)
|
|
goto out;
|
|
goto out;
|
|
err:
|
|
err:
|
|
save_errno = errno;
|
|
save_errno = errno;
|
|
|
|
+ if (ent) {
|
|
|
|
+ strncpy(errdir, ent->mnt_dir, sizeof(errdir)-1);
|
|
|
|
+ endmntent(mounts);
|
|
|
|
+ }
|
|
vss_operate(VSS_OP_THAW);
|
|
vss_operate(VSS_OP_THAW);
|
|
/* Call syslog after we thaw all filesystems */
|
|
/* Call syslog after we thaw all filesystems */
|
|
if (ent)
|
|
if (ent)
|
|
syslog(LOG_ERR, "FREEZE of %s failed; error:%d %s",
|
|
syslog(LOG_ERR, "FREEZE of %s failed; error:%d %s",
|
|
- ent->mnt_dir, save_errno, strerror(save_errno));
|
|
|
|
|
|
+ errdir, save_errno, strerror(save_errno));
|
|
else
|
|
else
|
|
syslog(LOG_ERR, "FREEZE of / failed; error:%d %s", save_errno,
|
|
syslog(LOG_ERR, "FREEZE of / failed; error:%d %s", save_errno,
|
|
strerror(save_errno));
|
|
strerror(save_errno));
|
|
out:
|
|
out:
|
|
- endmntent(mounts);
|
|
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|