summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2020-07-01 16:27:16 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2020-07-01 16:40:49 -0400
commit04818f1e83ab633f99df720a675494303ba26301 (patch)
tree216b95e05b9d5fdab622712b5e44fccd41e4b354
parent00bac487b0f105a875819faaa6bc0e450b80650a (diff)
-rw-r--r--quotasys.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/quotasys.c b/quotasys.c
index a19aebb..1decc4f 100644
--- a/quotasys.c
+++ b/quotasys.c
@@ -935,18 +935,23 @@ struct quota_handle **create_handle_list(int count, char **mntpoints, int type,
if (init_mounts_scan(count, mntpoints, mntflags) < 0)
die(2, _("Cannot initialize mountpoint scan.\n"));
while ((mnt = get_next_mount())) {
+ printf("got type %s at %s\n", mnt->me_type, mnt->me_dir);
+
#ifndef RPC
if (nfs_fstype(mnt->me_type))
continue;
#endif
if (fmt == -1 || count) {
add_entry:
+ printf("adding type %s at %s\n", mnt->me_type, mnt->me_dir);
if (gotmnt+1 >= hlist_allocated) {
hlist_allocated += START_MNT_POINTS;
hlist = srealloc(hlist, hlist_allocated * sizeof(struct quota_handle *));
}
if (!(hlist[gotmnt] = init_io(mnt, type, fmt, ioflags)))
continue;
+
+ printf("added type %s at %s\n", mnt->me_type, mnt->me_dir);
gotmnt++;
}
else {
@@ -1278,8 +1283,11 @@ alloc:
char *opt;
int qfmt[MAXQUOTAS];
+ printf("saw %s %s %s\n", mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type);
+
if (!(devname = get_device_name(mnt->mnt_fsname))) {
errstr(_("Cannot get device name for %s\n"), mnt->mnt_fsname);
+ printf("skip1\n");
continue;
}
@@ -1301,9 +1309,10 @@ alloc:
}
if (i < autofsdircnt) {
free((char *)devname);
+ printf("skip2\n");
continue;
}
-
+
if (flags & MS_NO_AUTOFS && !strcmp(mnt->mnt_type, MNTTYPE_AUTOFS)) { /* Autofs dir to remember? */
if (autofsdircnt == autofsdir_allocated) {
autofsdir_allocated += ALLOC_ENTRIES_NUM;
@@ -1314,19 +1323,23 @@ alloc:
strcat(autofsdir[autofsdircnt], "/");
autofsdircnt++;
free((char *)devname);
+ printf("skip3\n");
continue;
}
if (flags & MS_LOCALONLY && nfs_fstype(mnt->mnt_type)) {
free((char *)devname);
+ printf("skip4\n");
continue;
}
if (hasmntopt(mnt, MNTOPT_NOQUOTA)) {
free((char *)devname);
+ printf("skip5\n");
continue;
}
if (hasmntopt(mnt, MNTOPT_BIND)) {
free((char *)devname);
+ printf("skip6\n");
continue; /* We just ignore bind mounts... */
}
if ((opt = hasmntoptarg(mnt->mnt_opts, MNTOPT_LOOP))) {
@@ -1344,23 +1357,27 @@ alloc:
if (qfmt[USRQUOTA] < 0 && qfmt[GRPQUOTA] < 0 &&
qfmt[PRJQUOTA] < 0) {
free((char *)devname);
+ printf("skip7\n");
continue;
}
if (!realpath(mnt->mnt_dir, mntpointbuf)) {
errstr(_("Cannot resolve mountpoint path %s: %s\n"), mnt->mnt_dir, strerror(errno));
free((char *)devname);
+ printf("skip8\n");
continue;
}
if (statfs(mntpointbuf, &fsstat) != 0) {
errstr(_("Cannot statfs() %s: %s\n"), mntpointbuf, strerror(errno));
free((char *)devname);
+ printf("skip9\n");
continue;
}
/* Do not scan quotas on "magic" automount points */
if (fsstat.f_blocks == 0 && fsstat.f_bfree == 0 && fsstat.f_bavail == 0) {
free((char *)devname);
+ printf("skip10\n");
continue;
}
@@ -1368,11 +1385,13 @@ alloc:
if (stat(devname, &st) < 0) { /* Can't stat mounted device? */
errstr(_("Cannot stat() mounted device %s: %s\n"), devname, strerror(errno));
free((char *)devname);
+ printf("skip10\n");
continue;
}
if (!S_ISBLK(st.st_mode) && !S_ISCHR(st.st_mode)) {
errstr(_("Device (%s) filesystem is mounted on unsupported device type. Skipping.\n"), devname);
free((char *)devname);
+ printf("skip11\n");
continue;
}
dev = st.st_rdev;
@@ -1383,6 +1402,7 @@ alloc:
if (stat(mnt->mnt_dir, &st) < 0) { /* Can't stat mountpoint? We have better ignore it... */
errstr(_("Cannot stat() mountpoint %s: %s\n"), mnt->mnt_dir, strerror(errno));
free((char *)devname);
+ printf("skip12\n");
continue;
}
if (nfs_fstype(mnt->mnt_type)) {
@@ -1548,7 +1568,14 @@ restart:
if (++act_checked == check_dirs_cnt)
return 0;
sd = check_dirs + act_checked;
+ printf("searching for %u %lu %lu %s\n",
+ sd->sd_dir, sd->sd_dev, sd->sd_ino, sd->sd_name);
+
for (i = 0; i < mnt_entries_cnt; i++) {
+ printf("comparing against %lu %lu %s\n",
+ mnt_entries[i].me_dev,
+ mnt_entries[i].me_ino,
+ mnt_entries[i].me_dir);
if (sd->sd_dir) {
if (sd->sd_dev == mnt_entries[i].me_dev && sd->sd_ino == mnt_entries[i].me_ino)
break;