From: Alex Zhuravlev Date: Tue, 5 Jun 2012 05:40:19 +0000 (+0400) Subject: LU-1581 utils: more common helpers X-Git-Tag: 2.2.60~27 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=a0b83ae3120e79fc6ea6eba7e6bff7e3720209d5;p=fs%2Flustre-release.git LU-1581 utils: more common helpers check_mtab_entry() and update_mtab_entry() this time Signed-off-by: Alex Zhuravlev Change-Id: Idcb4d75c4fe202d41f468085f792519b1c431666 Reviewed-on: http://review.whamcloud.com/3218 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Li Wei Reviewed-by: Andreas Dilger --- diff --git a/lustre/utils/mkfs_lustre.c b/lustre/utils/mkfs_lustre.c index 4236a4c..2c20ac9 100644 --- a/lustre/utils/mkfs_lustre.c +++ b/lustre/utils/mkfs_lustre.c @@ -133,31 +133,6 @@ void usage(FILE *out) 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) @@ -688,8 +663,8 @@ int main(int argc, char *const argv[]) 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) { diff --git a/lustre/utils/mount_lustre.c b/lustre/utils/mount_lustre.c index 375dc99..6d28857 100644 --- a/lustre/utils/mount_lustre.c +++ b/lustre/utils/mount_lustre.c @@ -48,10 +48,6 @@ #include #include #include -#include -#include -#include -#include #include "obdctl.h" #include #include @@ -103,61 +99,6 @@ void usage(FILE *out) 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) diff --git a/lustre/utils/mount_utils.c b/lustre/utils/mount_utils.c index edb07fe..e6769ea 100644 --- a/lustre/utils/mount_utils.c +++ b/lustre/utils/mount_utils.c @@ -157,6 +157,62 @@ char *strscpy(char *dst, char *src, int buflen) 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; diff --git a/lustre/utils/mount_utils.h b/lustre/utils/mount_utils.h index 671de7e..01a7795 100644 --- a/lustre/utils/mount_utils.h +++ b/lustre/utils/mount_utils.h @@ -77,6 +77,9 @@ int add_param(char *buf, char *key, char *val); 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);