From mboxrd@z Thu Jan 1 00:00:00 1970 From: teigland@sourceware.org Date: 25 Jul 2006 13:58:17 -0000 Subject: [Cluster-devel] cluster/gfs2/mount mount.gfs2.c umount.gfs2.c Message-ID: <20060725135817.1325.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Changes by: teigland at sourceware.org 2006-07-25 13:58:17 Modified files: gfs2/mount : mount.gfs2.c umount.gfs2.c Log message: From: fabbione at ubuntu.com This one was a nasty bug that was causing several issues. For example: mount -t gfs /dev/foo /mnt -> ok mount -t gfs /dev/foo /mnt/ -> nok failing with: can't find /proc/mounts entry for directory /mnt/ (caused by read_proc_mounts in util.c when comparing with /proc/mounts that does not reference the trailing /). Other bugs are also fixed by making mo->dir consistent. mount -t gfs /dev/foo /mnt -> ok umount /mnt/ -> nok: /sbin/umount.gfs: lock_dlm_leave: gfs_controld leave error: -1 because the mo->dir is also registered in lock_dlm daemon. This was causing a severe inconsistence that was blocking mounting/umounting or other volumes/devices. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/mount/mount.gfs2.c.diff?cvsroot=cluster&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/mount/umount.gfs2.c.diff?cvsroot=cluster&r1=1.10&r2=1.11 --- cluster/gfs2/mount/mount.gfs2.c 2006/07/20 20:19:04 1.14 +++ cluster/gfs2/mount/mount.gfs2.c 2006/07/25 13:58:16 1.15 @@ -37,6 +37,7 @@ { int cont = 1; int optchar; + int l; /* FIXME: check for "quiet" option and don't print in that case */ @@ -80,8 +81,12 @@ ++optind; - if (optind < argc && argv[optind]) + if (optind < argc && argv[optind]) { strncpy(mo->dir, argv[optind], PATH_MAX); + l = strlen(mo->dir); + if (mo->dir[l-1] == '/') + mo->dir[l-1] = 0; + } log_debug("mount %s %s", mo->dev, mo->dir); } --- cluster/gfs2/mount/umount.gfs2.c 2006/07/20 20:19:04 1.10 +++ cluster/gfs2/mount/umount.gfs2.c 2006/07/25 13:58:16 1.11 @@ -32,6 +32,7 @@ { int cont = 1; int optchar; + int l; /* FIXME: check for "quiet" option and don't print in that case */ @@ -65,8 +66,12 @@ } } - if (optind < argc && argv[optind]) + if (optind < argc && argv[optind]) { strncpy(mo->dir, argv[optind], PATH_MAX); + l = strlen(mo->dir); + if (mo->dir[l-1] == '/') + mo->dir[l-1] = 0; + } log_debug("umount %s", mo->dir); }