From: Christoph Hellwig <hch@infradead.org>
To: xfs@oss.sgi.com
Subject: [PATCH] xfs_fsr: use /proc/mounts if available
Date: Sun, 12 Sep 2010 12:34:28 -0400 [thread overview]
Message-ID: <20100912163428.GA10843@infradead.org> (raw)
Prefer /proc/mounts if it exists over /etc/mtab to get a correct picture
of the kernels mount table for this process. This works arounds some
userspace like pam_mount polluting /etc/mtab with incorrect entries.
Also remove the "mtab" global variable and instead pass it explicitly
to fsrallfs, like we already do for other functions.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Index: xfsprogs-dev/fsr/xfs_fsr.c
===================================================================
--- xfsprogs-dev.orig/fsr/xfs_fsr.c 2010-09-11 20:06:15.000000000 +0000
+++ xfsprogs-dev/fsr/xfs_fsr.c 2010-09-12 16:28:17.000000000 +0000
@@ -42,7 +42,9 @@
#define XFS_XFLAG_NODEFRAG 0x00002000 /* src dependancy, remove later */
#endif
-#define _PATH_FSRLAST "/var/tmp/.fsrlast_xfs"
+#define _PATH_FSRLAST "/var/tmp/.fsrlast_xfs"
+#define _PATH_PROC_MOUNTS "/proc/mounts"
+
char *progname;
@@ -79,7 +81,6 @@ static __int64_t minimumfree = 2048;
static time_t howlong = 7200; /* default seconds of reorganizing */
static char *leftofffile = _PATH_FSRLAST; /* where we left off last */
-static char *mtab = MOUNTED;
static time_t endtime;
static time_t starttime;
static xfs_ino_t leftoffino = 0;
@@ -94,7 +95,7 @@ static int packfile(char *fname, char *
static void fsrdir(char *dirname);
static int fsrfs(char *mntdir, xfs_ino_t ino, int targetrange);
static void initallfs(char *mtab);
-static void fsrallfs(int howlong, char *leftofffile);
+static void fsrallfs(char *mtab, int howlong, char *leftofffile);
static void fsrall_cleanup(int timeout);
static int getnextents(int);
int xfsrtextsize(int fd);
@@ -187,6 +188,7 @@ main(int argc, char **argv)
struct mntent mntpref;
register struct mntent *mntp;
struct mntent ment;
+ char *mtab = NULL;
register FILE *mtabp;
setlinebuf(stdout);
@@ -198,7 +200,7 @@ main(int argc, char **argv)
gflag = ! isatty(0);
- while ((c = getopt(argc, argv, "C:p:e:MgsdnvTt:f:m:b:N:FV")) != -1 )
+ while ((c = getopt(argc, argv, "C:p:e:MgsdnvTt:f:m:b:N:FV")) != -1) {
switch (c) {
case 'M':
Mflag = 1;
@@ -250,6 +252,22 @@ main(int argc, char **argv)
default:
usage(1);
}
+ }
+
+ /*
+ * If the user did not specify an explicit mount table, try to use
+ * /proc/mounts if it is available, else /etc/mtab. We prefer
+ * /proc/mounts because it is kernel controlled, while /etc/mtab
+ * may contain garbage that userspace tools like pam_mounts wrote
+ * into it.
+ */
+ if (!mtab) {
+ if (access(_PATH_PROC_MOUNTS, R_OK) == 0)
+ mtab = _PATH_PROC_MOUNTS;
+ else
+ mtab = _PATH_MOUNTED;
+ }
+
if (vflag)
setbuf(stdout, NULL);
@@ -330,7 +348,7 @@ main(int argc, char **argv)
}
} else {
initallfs(mtab);
- fsrallfs(howlong, leftofffile);
+ fsrallfs(mtab, howlong, leftofffile);
}
return 0;
}
@@ -447,7 +465,7 @@ initallfs(char *mtab)
}
static void
-fsrallfs(int howlong, char *leftofffile)
+fsrallfs(char *mtab, int howlong, char *leftofffile)
{
int fd;
int error;
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next reply other threads:[~2010-09-12 16:33 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-12 16:34 Christoph Hellwig [this message]
2010-09-13 4:35 ` [PATCH] xfs_fsr: use /proc/mounts if available Eric Sandeen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100912163428.GA10843@infradead.org \
--to=hch@infradead.org \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.