Commit 0b7580c7 authored by Fabio Massimo Di Nitto's avatar Fabio Massimo Di Nitto Committed by Steven Whitehouse

[GFS2] Check for installation of mount helpers for DLM mounts

The patch is a fix to abort mount if the mount.gfs* and possible
umount.* are missing from /sbin.

While we do what we can to guarantee that they are installed properly in
userland (CVS HEAD), we want to make sure that mount still aborts properly.

The only sign of missing helpers is that lock_dlm will receive no mount options
at all. According to David the problem does not exist for lock_nolock as the
helpers are not required.

The patch has been tested for both gfs and gfs2 and it works as expected. The
lack of mount.gfs* will generate an error that is propagated to mount:

oot@node1:~# mount -t  gfs2 /dev/nbd2 /mnt/
mount: wrong fs type, bad option, bad superblock on /dev/nbd2,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

[ 3513.303346] GFS2: fsid=: Trying to join cluster "lock_dlm", "gutsy:gfs2"
[ 3513.304546] DLM/GFS2/GFS ERROR: (u)mount helpers are not installed properly!
[ 3513.306290] GFS2: fsid=: can't mount proto=lock_dlm, table=gutsy:gfs2, hostdata=

You might want to notice that it will also avoid mount to hang or fail silently
or with strange errors that will require the cluster to reboot/restart before
you can actually mount the filesystem again.
Signed-off-by: default avatarFabio M. Di Nitto <fabbione@ubuntu.com>
Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent e35b9211
...@@ -67,6 +67,12 @@ static int make_args(struct gdlm_ls *ls, char *data_arg, int *nodir) ...@@ -67,6 +67,12 @@ static int make_args(struct gdlm_ls *ls, char *data_arg, int *nodir)
memset(data, 0, 256); memset(data, 0, 256);
strncpy(data, data_arg, 255); strncpy(data, data_arg, 255);
if (!strlen(data)) {
printk(KERN_ERR
"DLM/GFS2/GFS ERROR: (u)mount helpers are not installed!\n");
return -EINVAL;
}
for (options = data; (x = strsep(&options, ":")); ) { for (options = data; (x = strsep(&options, ":")); ) {
if (!*x) if (!*x)
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment