Re: mkdir on read-only NFS is broken in 2.6.18

From: Thomas Zeitlhofer
Date: Mon Oct 23 2006 - 09:21:09 EST


On Mon, Oct 23, 2006 at 06:33:42AM -0400, Trond Myklebust wrote:
> On Mon, 2006-10-23 at 11:23 +0200, Thomas Zeitlhofer wrote:
> > Hello,
> >
> > there is a problem in 2.6.18/.1 when mkdir is called for an existing
> > directory on a read-only mounted NFS filesystem.
> >
> > Lets consider a server that exports the directory /export which contains
> > the directory-tree a/b/c:
> >
> > 1) If /export is mounted ro and the first access to a, b, or c is
> > mkdir, then this directory and all directories underneath become
> > inaccessible:
> >
> > client:# mount server:/export /mnt -o ro
> > client:# mkdir /mnt/a/b
> > mkdir: cannot create directory `/mnt/a/b': Read-only file system
> > client:# find /mnt
> > /mnt
> > /mnt/a
> > find: /mnt/a/b: No such file or directory
[...]
> > As a consequence of 1), autofs does not work with mountpoints on NFS
> > (ro) because the automount daemon calls mkdir for all directories in the
> > path to the mountpoint. This seems related to the discussion [1], and,
> > as suggested in [1], the issue is fixed by reverting the patch:
>
> There should already be a fix for this issue in 2.6.19-rc1. See
>
> http://kernel.org/git/gitweb.cgi?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fd6840714d9cf6e93f1d42b904860a94df316b85

Yes, this patch fixes the issue for 2.6.18 too.

Just a note, there still seems to be some inconsistency regarding the
errno returned by mkdir:

client:# mount server:/export /mnt -o ro
client:# mkdir /mnt/a/b
mkdir: cannot create directory `/mnt/a/b': Read-only file system
client:# find /mnt
/mnt
/mnt/a
/mnt/a/b
/mnt/a/b/c
client:# mkdir /mnt/a/b
mkdir: cannot create directory `/mnt/a/b': File exists

Depending on the context, mkdir returns EROFS or EEXIST - shouldn't we
get always the same errno? Using the patch from my previous mail (or a
2.6.17 kernel), mkdir will always return EEXIST in this case.

Thanks,
Thomas
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/