summaryrefslogtreecommitdiff
path: root/fs/nfs/dir.c
AgeCommit message (Collapse)AuthorFilesLines
2008-07-16NFS: Remove the BKL from the inode creation operationsTrond Myklebust1-9/+0
nfs_instantiate() does not require the BKL, neither do the attribute updates or the RPC code. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-07-16NFS: Remove BKL usage from open()Trond Myklebust1-6/+0
All the NFSv4 stateful operations are already protected by other locks (in particular by the rpc_sequence locks. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-07-16NFS: Remove the BKL from the permission checking codeTrond Myklebust1-4/+0
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-07-16NFS: Protect inode->i_nlink updates using inode->i_lockTrond Myklebust1-2/+10
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-07-09NFS: Use NFSDBG_FILE for all fopsChuck Lever1-5/+5
Clean up: some fops use NFSDBG_FILE, some use NFSDBG_VFS. Let's use NFSDBG_FILE for all fops, and consistently report file names instead of inode numbers. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-07-09NFS: Make nfs_open methods consistentChuck Lever1-2/+5
Clean up: Report the same debugging info and count function calls the same for files and directories in nfs_opendir() and nfs_file_open(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-07-09NFS: Make nfs_llseek methods consistentChuck Lever1-2/+10
Clean up: Report the same debugging info in nfs_llseek_dir() and nfs_llseek_file(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-07-09NFS: Make nfs_fsync methods consistentChuck Lever1-1/+2
Clean up: Report the same debugging info, count function calls the same, and use similar function naming in nfs_fsync_dir() and nfs_fsync(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-07-08NFS: Fix readdir cache invalidationTrond Myklebust1-1/+1
invalidate_inode_pages2_range() takes page offset arguments, not byte ranges. Another thought is that individual pages might perhaps get evicted by VM pressure, in which case we might perhaps want to re-read not only the evicted page, but all subsequent pages too (in case the server returns more/less data per page so that the alignment of the next entry changes). We should therefore remove the condition that we only do this on page->index==0. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-05-16nfs: replace remaining __FUNCTION__ occurrencesHarvey Harrison1-9/+9
__FUNCTION__ is gcc-specific, use __func__ Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Cc: "J. Bruce Fields" <bfields@fieldses.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-04-24Merge branch 'devel'Trond Myklebust1-1/+1
2008-04-19[PATCH] r/o bind mounts: check mnt instead of superblock directlyDave Hansen1-1/+2
If we depend on the inodes for writeability, we will not catch the r/o mounts when implemented. This patches uses __mnt_want_write(). It does not guarantee that the mount will stay writeable after the check. But, this is OK for one of the checks because it is just for a printk(). The other two are probably unnecessary and duplicate existing checks in the VFS. This won't make them better checks than before, but it will make them detect r/o mounts. Acked-by: Al Viro <viro@ZenIV.linux.org.uk> Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2008-03-14SUNRPC: Add a helper rpcauth_lookup_generic_cred()Trond Myklebust1-1/+1
The NFSv4 protocol allows clients to negotiate security protocols on the fly in the case where an administrator on the server changes the export settings and/or in the case where we may have a filesystem migration event. Instead of having the NFS client code cache credentials that are tied to a particular AUTH method it is therefore preferable to have a generic credential that can be converted into whatever AUTH is in use by the RPC client when the read/write/sillyrename/... is put on the wire. We do this by means of the new "generic" credential, which basically just caches the minimal information that is needed to look up an RPCSEC_GSS, AUTH_SYS, or AUTH_NULL credential. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-03-07NFS: Fix dentry revalidation for NFSv4 referrals and mountpoint crossingsTrond Myklebust1-0/+2
As long as the directory contents haven't changed, we should just let the path walk proceed to cross the mountpoint. Apart from being an optimisation in the case of 'nohide' mountpoint traversals, it also fixes an issue with referrals: referral inodes don't have valid filehandles, so calling nfs_revalidate_inode() on them is a bug. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-02-14NFS: remove error field from nfs_readdir_descriptor_tJeff Layton1-5/+3
The error field in nfs_readdir_descriptor_t is never used outside of the function in which it is set. Remove the field and change the place that does use it to use an existing local variable. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-01-30NFS: Fix a potential race between umount and nfs_access_cache_shrinker()Trond Myklebust1-1/+8
Thanks to Yawei Niu for spotting the race. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-01-30NFS: Add an asynchronous delegreturn operation for use in nfs_clear_inodeTrond Myklebust1-1/+0
Otherwise, there is a potential deadlock if the last dput() from an NFSv4 close() or other asynchronous operation leads to nfs_clear_inode calling the synchronous delegreturn. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-01-30nfs: obliterate NFS_FLAGS macroBenny Halevy1-4/+4
use NFS_I(inode)->flags instead Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-01-30NFS: define a function to update nfsi->cache_change_attributeTrond Myklebust1-0/+15
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-01-30NFS: Ensure that we eject stale inodes as soon as possibleTrond Myklebust1-0/+4
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-01-30NFS: Handle -ENOENT errors in unlink()/rmdir()/rename()Trond Myklebust1-2/+13
If the server returns an ENOENT error, we still need to do a d_delete() in order to ensure that the dentry is deleted. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-01-30NFS: Fix a sillyrename race...Trond Myklebust1-6/+5
Ensure that readdir revalidates its data cache after blocking on sillyrename. Also fix a typo in nfs_do_call_unlink(): swap the ^= for an |=. The result is the same, since we've already checked that the flag is unset, but it makes the code more readable. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-11-27NFS: fs/nfs/dir.c should #include "internal.h"Adrian Bunk1-0/+1
Every file should include the headers containing the prototypes for its global functions (in this case nfs_access_cache_shrinker()). Signed-off-by: Adrian Bunk <bunk@kernel.org> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Cc: "J. Bruce Fields" <bfields@fieldses.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-20NFS: Fix a race in sillyrenameTrond Myklebust1-3/+11
lookup() and sillyrename() can race one another because the sillyrename() completion cannot take the parent directory's inode->i_mutex since the latter may be held by whoever is calling dput(). We therefore have little option but to add extra locking to ensure that nfs_lookup() and nfs_atomic_open() do not race with the sillyrename completion. If somebody has looked up the sillyrenamed file in the meantime, we just transfer the sillydelete information to the new dentry. Please refer to the bug-report at http://bugzilla.linux-nfs.org/show_bug.cgi?id=150 Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Add a boot parameter to disable 64 bit inode numbersTrond Myklebust1-1/+2
This boot parameter will allow legacy 32-bit applications which call stat() to continue to function even if the NFSv3/v4 server uses 64-bit inode numbers. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Get rid of some obsolete macrosTrond Myklebust1-1/+1
- NFS_READTIME, NFS_CHANGE_ATTR are completely unused. - Inline the few remaining uses of NFS_ATTRTIMEO, and remove. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Simplify filehandle revalidationTrond Myklebust1-0/+1
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Ensure that nfs_link() returns a hashed dentryTrond Myklebust1-1/+2
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Be strict about dentry revalidation when doing exclusive createTrond Myklebust1-15/+14
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Don't zap the readdir caches upon errorTrond Myklebust1-2/+0
If necessary, the caches will get zapped under normal revalidation. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Remove the redundant nfs_reval_fsid()Trond Myklebust1-15/+0
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFSv4: Fix nfs_atomic_open() to set the verifier on negative dentries tooTrond Myklebust1-8/+0
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFSv4: Use NFSv2/v3 rules for negative dentries in nfs_open_revalidateTrond Myklebust1-1/+5
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFSv4: Don't revalidate the directory in nfs_atomic_lookup()Trond Myklebust1-8/+0
Why bother, since the call to nfs4_atomic_open() will do it for us. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Optimise nfs_lookup_revalidate()Trond Myklebust1-7/+8
We don't need to call nfs_revalidate_inode() on the directory if we already know that the verifiers don't match. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Remove nfs_begin_data_update/nfs_end_data_updateTrond Myklebust1-34/+1
The lower level routines in fs/nfs/proc.c, fs/nfs/nfs3proc.c and fs/nfs/nfs4proc.c should already be dealing with the revalidation issues. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: NFS_CACHEINV() should not test for nfs_caches_unstable()Trond Myklebust1-1/+1
The fact that we're in the process of modifying the inode does not mean that we should not invalidate the attribute and data caches. The defensive thing is to always invalidate when we're confronted with inode mtime/ctime or change_attribute updates that we do not immediately recognise. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Remove bogus nfs_mark_for_revalidate() in nfs_lookupTrond Myklebust1-6/+0
The parent of the newly materialised dentry has just been revalidated... Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: don't cache the verifer across ->lookup() callsTrond Myklebust1-6/+2
If the ->lookup() call causes the directory verifier to change, then there is still no need to use the old verifier, since our dentry has been verified. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Fix a bug in nfs_open_revalidate()Trond Myklebust1-1/+1
We want to set the verifier when the call to nfs4_open_revalidate() _succeeds_. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Don't hash the negative dentry when optimising for an O_EXCL openTrond Myklebust1-2/+3
We don't want to leave an unverified hashed negative dentry if the exclusive create fails to complete. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: nfs_instantiate() should set the dentry verifierTrond Myklebust1-3/+1
That will also allow us to remove the calls in mknod and mkdir. In addition it will ensure that symlinks set it correctly. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Ensure nfs_instantiate() invalidates the parent dir on errorTrond Myklebust1-8/+15
Also ensure that it drops the dentry in this case. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Fix nfs_verify_change_attribute()Trond Myklebust1-1/+1
We don't care about whether or not some other process on our client is changing the directory while we're in nfs_lookup_revalidate(), because the dcache will take care of ensuring local atomicity. We can therefore remove the test for nfs_caches_unstable(). Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Fix atime revalidation in readdir()Trond Myklebust1-6/+0
NFSv3 will correctly update atime on a readdir call, so there is no need to set the NFS_INO_INVALID_ATIME flag unless the call to nfs_refresh_inode() fails. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Don't use readdirplus data if the page cache is invalidTrond Myklebust1-1/+10
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Fix dcache revalidation bugsTrond Myklebust1-7/+3
We don't need to force a dentry lookup just because we're making changes to the directory. Don't update nfsi->cache_change_attribute in nfs_end_data_update: that overrides the NFSv3/v4 weak consistency checking that tells us our update was the only one, and that tells us the dcache is still valid. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFSv4: Simplify _nfs4_do_access()Trond Myklebust1-2/+20
Currently, _nfs4_do_access() is just a copy of nfs_do_access() with added conversion of the open flags into an access mask. This patch merges the duplicate functionality. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Replace file->private_data with calls to nfs_file_open_context()Trond Myklebust1-2/+2
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2007-10-10NFS: Eliminate nfs_refresh_verifier()Chuck Lever1-11/+5
nfs_set_verifier() and nfs_refresh_verifier() do exactly the same thing, so replace one with the other. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>