Re: NFS Permission denied instead of EROFS

From: Trond Myklebust
Date: Thu Oct 27 2005 - 17:54:49 EST


to den 27.10.2005 klokka 22:57 (+0200) skreiv Jan Engelhardt:

> # grep export /etc/exports
> /export *(ro,async,no_root_squash)
> # mount localhost:/export /mnt -t nfs -oro
> # logout
> $ cat /proc/mounts | grep nfs
> localhost:/export /mnt nfs ro,v3,rsize=32768,wsize=32768,hard,tcp,lock,addr=localhost 0 0
> $ ls -l /mnt/file
> -rw-r--r-- 1 root root 0 Oct 27 22:42 /mnt/file
> $ touch /mnt/file
> touch: cannot touch `file': Read-only file system
> $ strace -e trace=file touch /mnt/file
> open("/mnt/file", O_WRONLY|O_NONBLOCK|O_CREAT|O_NOCTTY|O_LARGEFILE, 0666) =
> -1 EACCES (Permission denied)
> utimes("/mnt/file", NULL) = -1 EACCES (Permission denied)
> ...
> touch: cannot touch `/mnt/file': Permission denied

This is on a filesystem that has been mounted with the -ro flag? That
would be a client bug.

Hmm... The client code does look a bit dodgy there (particularly NFSv4).
I'll see if I can come up with a patch.

> If the file does not exist however, everything is ok:
> $ touch /mnt/file
> touch: cannot touch /mnt/file': Read-only file system
> $ strace -e trace=file touch /mnt/file
> open("/mnt/file", O_WRONLY|O_NONBLOCK|O_CREAT|O_NOCTTY|O_LARGEFILE, 0666) =
> -1 EROFS (Read-only file system)
> utimes("/mnt/file", NULL) = -1 ENOENT (No such file or directory)
>
>
> Which brings me right to question... should mountd or knfsd be adjusted to
> refuse a rw mount request if an nfs export is only available as ro? Like it is
> already the case with normal block devices:

How would knfsd or mountd know? There is no way for the client to
communicate to the server that it is mounting for read-write.

Cheers,
Trond

-
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/