return;
}
-/*================ utility functions =====================*/
-
-static int check_mtab_entry(char *spec)
-{
- FILE *fp;
- struct mntent *mnt;
-
- fp = setmntent(MOUNTED, "r");
- if (fp == NULL)
- return(0);
-
- while ((mnt = getmntent(fp)) != NULL) {
- if (strcmp(mnt->mnt_fsname, spec) == 0) {
- endmntent(fp);
- fprintf(stderr, "%s: according to %s %s is "
- "already mounted on %s\n",
- progname, MOUNTED, spec, mnt->mnt_dir);
- return(EEXIST);
- }
- }
- endmntent(fp);
-
- return(0);
-}
-
/* ==================== Lustre config functions =============*/
void print_ldd(char *str, struct lustre_disk_data *ldd)
goto out;
}
- if (check_mtab_entry(mop.mo_device))
- return(EEXIST);
+ if (check_mtab_entry(mop.mo_device, mop.mo_device, NULL, NULL))
+ return(EEXIST);
/* Create the loopback file */
if (mop.mo_flags & MO_IS_LOOP) {
#include <fcntl.h>
#include <errno.h>
#include <string.h>
-#include <sys/mount.h>
-#include <linux/fs.h>
-#include <mntent.h>
-#include <getopt.h>
#include "obdctl.h"
#include <lustre_ver.h>
#include <glob.h>
exit((out != stdout) ? EINVAL : 0);
}
-static int check_mtab_entry(char *spec1, char *spec2, char *mtpt, char *type)
-{
- FILE *fp;
- struct mntent *mnt;
-
- fp = setmntent(MOUNTED, "r");
- if (fp == NULL)
- return(0);
-
- while ((mnt = getmntent(fp)) != NULL) {
- if ((strcmp(mnt->mnt_fsname, spec1) == 0 ||
- strcmp(mnt->mnt_fsname, spec2) == 0) &&
- strcmp(mnt->mnt_dir, mtpt) == 0 &&
- strcmp(mnt->mnt_type, type) == 0) {
- endmntent(fp);
- return(EEXIST);
- }
- }
- endmntent(fp);
-
- return(0);
-}
-
-static int
-update_mtab_entry(char *spec, char *mtpt, char *type, char *opts,
- int flags, int freq, int pass)
-{
- FILE *fp;
- struct mntent mnt;
- int rc = 0;
-
- mnt.mnt_fsname = spec;
- mnt.mnt_dir = mtpt;
- mnt.mnt_type = type;
- mnt.mnt_opts = opts ? opts : "";
- mnt.mnt_freq = freq;
- mnt.mnt_passno = pass;
-
- fp = setmntent(MOUNTED, "a+");
- if (fp == NULL) {
- fprintf(stderr, "%s: setmntent(%s): %s:",
- progname, MOUNTED, strerror (errno));
- rc = 16;
- } else {
- if ((addmntent(fp, &mnt)) == 1) {
- fprintf(stderr, "%s: addmntent: %s:",
- progname, strerror (errno));
- rc = 16;
- }
- endmntent(fp);
- }
-
- return rc;
-}
-
/* Get rid of symbolic hostnames for tcp, since kernel can't do lookups */
#define MAXNIDSTR 1024
static char *convert_hostnames(char *s1)
return strscat(dst, src, buflen);
}
+int check_mtab_entry(char *spec1, char *spec2, char *mtpt, char *type)
+{
+ FILE *fp;
+ struct mntent *mnt;
+
+ fp = setmntent(MOUNTED, "r");
+ if (fp == NULL)
+ return 0;
+
+ while ((mnt = getmntent(fp)) != NULL) {
+ if ((strcmp(mnt->mnt_fsname, spec1) == 0 ||
+ strcmp(mnt->mnt_fsname, spec2) == 0) &&
+ (mtpt == NULL || strcmp(mnt->mnt_dir, mtpt) == 0) &&
+ (type == NULL || strcmp(mnt->mnt_type, type) == 0)) {
+ endmntent(fp);
+ return(EEXIST);
+ }
+ }
+ endmntent(fp);
+
+ return 0;
+}
+
+int update_mtab_entry(char *spec, char *mtpt, char *type, char *opts,
+ int flags, int freq, int pass)
+{
+ FILE *fp;
+ struct mntent mnt;
+ int rc = 0;
+
+ mnt.mnt_fsname = spec;
+ mnt.mnt_dir = mtpt;
+ mnt.mnt_type = type;
+ mnt.mnt_opts = opts ? opts : "";
+ mnt.mnt_freq = freq;
+ mnt.mnt_passno = pass;
+
+ fp = setmntent(MOUNTED, "a+");
+ if (fp == NULL) {
+ fprintf(stderr, "%s: setmntent(%s): %s:",
+ progname, MOUNTED, strerror (errno));
+ rc = 16;
+ } else {
+ if ((addmntent(fp, &mnt)) == 1) {
+ fprintf(stderr, "%s: addmntent: %s:",
+ progname, strerror (errno));
+ rc = 16;
+ }
+ endmntent(fp);
+ }
+
+ return rc;
+}
+
+/* Search for opt in mntlist, returning true if found.
+ */
static int in_mntlist(char *opt, char *mntlist)
{
char *ml, *mlp, *item, *ctx = NULL;
int get_param(char *buf, char *key, char **val);
char *strscat(char *dst, char *src, int buflen);
char *strscpy(char *dst, char *src, int buflen);
+int check_mtab_entry(char *spec1, char *spec2, char *mntpt, char *type);
+int update_mtab_entry(char *spec, char *mtpt, char *type, char *opts,
+ int flags, int freq, int pass);
int check_mountfsoptions(char *mountopts, char *wanted_mountopts, int justwarn);
void trim_mountfsoptions(char *s);
__u64 get_device_size(char* device);