|
@@ -21,6 +21,7 @@
|
|
|
#include <sys/types.h>
|
|
|
#include <sys/poll.h>
|
|
|
#include <sys/ioctl.h>
|
|
|
+#include <sys/stat.h>
|
|
|
#include <fcntl.h>
|
|
|
#include <stdio.h>
|
|
|
#include <mntent.h>
|
|
@@ -30,6 +31,7 @@
|
|
|
#include <ctype.h>
|
|
|
#include <errno.h>
|
|
|
#include <linux/fs.h>
|
|
|
+#include <linux/major.h>
|
|
|
#include <linux/hyperv.h>
|
|
|
#include <syslog.h>
|
|
|
#include <getopt.h>
|
|
@@ -70,6 +72,7 @@ static int vss_operate(int operation)
|
|
|
char match[] = "/dev/";
|
|
|
FILE *mounts;
|
|
|
struct mntent *ent;
|
|
|
+ struct stat sb;
|
|
|
char errdir[1024] = {0};
|
|
|
unsigned int cmd;
|
|
|
int error = 0, root_seen = 0, save_errno = 0;
|
|
@@ -92,6 +95,10 @@ static int vss_operate(int operation)
|
|
|
while ((ent = getmntent(mounts))) {
|
|
|
if (strncmp(ent->mnt_fsname, match, strlen(match)))
|
|
|
continue;
|
|
|
+ if (stat(ent->mnt_fsname, &sb) == -1)
|
|
|
+ continue;
|
|
|
+ if (S_ISBLK(sb.st_mode) && major(sb.st_rdev) == LOOP_MAJOR)
|
|
|
+ continue;
|
|
|
if (hasmntopt(ent, MNTOPT_RO) != NULL)
|
|
|
continue;
|
|
|
if (strcmp(ent->mnt_type, "vfat") == 0)
|