On Wed, Mar 07, 2012 at 02:56:30PM -0500, Steve Dickson wrote: > This problem can occur when multiple cluster services fail over > at the same time, causing missing high-available exports. > Having a lot of nfs-exports will trigger this issue easier. Isn't the locking in support/export/xtab.c supposed to take care of this? I may be confused--I forget what all these files are for.... --b. > > Signed-off-by: Steve Dickson <steved@xxxxxxxxxx> > --- > support/include/exportfs.h | 4 ++++ > utils/exportfs/exportfs.c | 24 ++++++++++++++++++++++++ > 2 files changed, 28 insertions(+), 0 deletions(-) > > diff --git a/support/include/exportfs.h b/support/include/exportfs.h > index 01e87dd..99916e5 100644 > --- a/support/include/exportfs.h > +++ b/support/include/exportfs.h > @@ -32,6 +32,10 @@ enum { > FSLOC_STUB > }; > > +#ifndef EXP_LOCKFILE > +#define EXP_LOCKFILE "/var/lib/nfs/export-lock" > +#endif > + > typedef struct mclient { > struct mclient * m_next; > char * m_hostname; > diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c > index 7432a65..769d438 100644 > --- a/utils/exportfs/exportfs.c > +++ b/utils/exportfs/exportfs.c > @@ -16,6 +16,7 @@ > #include <sys/stat.h> > #include <sys/vfs.h> > #include <sys/stat.h> > +#include <sys/file.h> > #include <unistd.h> > #include <stdbool.h> > #include <stdlib.h> > @@ -44,6 +45,23 @@ static void validate_export(nfs_export *exp); > static int matchhostname(const char *hostname1, const char *hostname2); > static void export_d_read(const char *dname); > > +static const char *lockfile = EXP_LOCKFILE; > +static int _lockfd = -1; > + > +void > +grab_lockfile() > +{ > + _lockfd = open(lockfile, O_CREAT|O_RDWR, 0666); > + if (_lockfd != -1) > + lockf(_lockfd, F_LOCK, 0); > +} > +void > +release_lockfile() > +{ > + if (_lockfd != -1) > + lockf(_lockfd, F_ULOCK, 0); > +} > + > int > main(int argc, char **argv) > { > @@ -129,6 +147,12 @@ main(int argc, char **argv) > return 0; > } > } > + /* > + * Serialize things as best we can > + */ > + grab_lockfile(); > + atexit(release_lockfile); > + > if (f_export && ! f_ignore) { > export_read(_PATH_EXPORTS); > export_d_read(_PATH_EXPORTS_D); > -- > 1.7.7.6 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html