From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthias Koenig Subject: Re: [PATCH] nested mounts with loop Date: Tue, 02 Oct 2007 11:37:42 +0200 Message-ID: References: <1190743449.3116.20.camel@raven.themaw.net> <1190821748.12109.33.camel@raven.themaw.net> <1191302365.26331.36.camel@raven.themaw.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1191302365.26331.36.camel@raven.themaw.net> (Ian Kent's message of "Tue\, 02 Oct 2007 13\:19\:25 +0800") List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autofs-bounces@linux.kernel.org Errors-To: autofs-bounces@linux.kernel.org To: Ian Kent Cc: autofs mailing list Ian Kent writes: > On Wed, 2007-09-26 at 12:02 -0400, Jeff Moyer wrote: >> Ian Kent writes: >> >> > On Wed, 2007-09-26 at 17:32 +0200, Matthias Koenig wrote: >> >> Ian Kent writes: >> >> >> >> > On Tue, 2007-09-25 at 18:21 +0200, Matthias Koenig wrote: >> >> >> Hi, >> >> >> >> >> >> we noticed a problem concerning loop mounts on locations that >> >> >> have to be mounted before. E.g. consider the following situation, >> >> >> a NFS server exporting a cd image, which we want to loop mount >> >> >> locally to get access to the content: >> >> >> >> >> >> auto.master: >> >> >> /cdimage auto.cdimage >> >> >> /cdcontent auto.cdcontent >> >> >> >> >> >> auto.cdimage: >> >> >> foo nfsserver:/cdimage/foo.img >> >> >> >> >> >> auto.cdcontent: >> >> >> foo -fstype=auto,loop :/cdimage/foo/foo.img >> >> >> >> >> >> The access to /cdcontent/foo will fail, when /cdimage/foo is not >> >> >> mounted before, because spawn_mount does not use SPAWN_OPT_ACCESS >> >> >> in this case. >> >> >> The patch below fixes this problem. >> >> > >> >> > I can't remember now. >> >> > I wonder why I don't always call access? >> >> > I must have had a reason, let me think about it for a while. >> >> >> >> Yes, I first tried to set SPAWN_OPT_ACCESS as default, but this did >> >> not work and had the negative effect, that NFS mounts could not >> >> be mounted anymore, because an access() has been done on the >> >> NFS location description "nfsserver:/cdimage", which then fails. >> > >> > Of course, I'll go with you're patch. >> >> Are you sure the argument positions will be the same for all of the >> mount modules? Is this really the best way to fix this? > > Yes, it's possible that the "-o" could end up in a different position if > the code is modified at some later time without thinking. Maybe it is better to iterate over the options? Matthias Index: autofs-git20070924/daemon/spawn.c =================================================================== --- autofs-git20070924.orig/daemon/spawn.c +++ autofs-git20070924/daemon/spawn.c @@ -293,6 +293,14 @@ int spawn_mount(logger *log, ...) while ((*p++ = va_arg(arg, char *))); va_end(arg); +#ifndef ENABLE_MOUNT_LOCKING + /* validate loop mounts as they could be on some location to be + * mounted first */ + for (p = argv; *(p+1); p++) + if (!strcmp(*p, "-o") && strstr(*(p+1), "loop")) + options = SPAWN_OPT_ACCESS; +#endif + while (retries--) { ret = do_spawn(log, options, prog, (const char **) argv); if (ret & MTAB_NOTUPDATED)