Re: Option noac not working correctly?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Trond Myklebust wrote:
On Wed, 2009-03-18 at 15:36 +0100, Diego Moreno wrote:
Hello everyone,

I've been testing the noac mount option in several kernels (2.6.27.10, 2.6.29-rc8) for NFSv3 and NFSv4. The next commands do not work properly:

rm -f /export/B; ls -l /tmp/nfs_client_tcp/B ; uname -a > /export/B; ls -l /tmp/nfs_client_tcp/B

Result is usually:

ls: /tmp/nfs_client_tcp/B: No such file or directory
ls: /tmp/nfs_client_tcp/B: No such file or directory

Actually the result should be always:

ls: /tmp/nfs_client_tcp/B: No such file or directory
-rw-r--r-- 1 root root 89 Mar 18 14:02 /tmp/nfs_client_tcp/B

Network traces show me that client is not making any lookup in the server for the second 'ls'. A client with noac option should always make a lookup on server, isn't it?

My /etc/exports file:

/export  *(rw,fsid=0,insecure,no_subtree_check)

Relevant information from cat /proc/mounts:

pwrd:/ /tmp/nfs_client_tcp nfs4 rw,sync,vers=4,rsize=1048576,wsize=1048576,namlen=255,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,hard,nointr,noac,proto=tcp,timeo=600,retrans=2,sec=sys

NFS debug trace of the second ls command:

NFS call  access
NFS: nfs_update_inode(0:17/2 ct=2 info=0x6)
NFS reply access: 0
NFS: permission(0:17/2), mask=0x1, res=0
NFS: revalidating (0:17/2)
NFS call  getattr
NFS reply getattr: 0
NFS: nfs_update_inode(0:17/2 ct=2 info=0x6)
NFS: nfs3_forget_cached_acls(0:17/2)
NFS: (0:17/2) revalidation complete
NFS: nfs_lookup_revalidate(/B) is valid
NFS: dentry_delete(/B, 8)

Is there anything I'm not doing well? Is this a known bug for the last kernel version? Thanks,

The above behaviour is perfectly correct _if_ the mtime
on /tmp/nfs_client_tcp doesn't change between your 'rm' and the creation
of B. Given that most Linux filesystems have poor (1 second) resolution
on mtime, then for it not to change in the above test is an extremely
likely event.

Note that there is a better option for controlling lookup behaviour in
newer kernels: -olookupcache=all or -olookupcache=positive should both
cause your test above to pass irrespective of whether or not mtime
changed.

Trond

Thanks for your quick reply Trond. I've seen the only way to pass my test is using (for kernel 2.6.29-rc8): -olookupcache=positive,noac. If I use -olookupcache=positive or -olookupcache=all or -olookupcache=all,noac my test doesn't pass.

BTW, is there any way of passing this test for a kernel like 2.6.27 (there is no lookupcache mount option). In kernels like 2.6.19 or 2.6.20 I think I passed my test just using noac option. These kernels where the first kernels with the patch (commit b0b539739fe9b7d75002412a787cfdf4efddbc33) treating the special case of nfsi->attrtimeo==0. That means 'noac' or/and actimeo=0 mount options.

Thanks,

Diego
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux