AFS: AFS fixups
Make some miscellaneous changes to the AFS filesystem: (1) Assert RCU barriers on module exit to make sure RCU has finished with callbacks in this module. (2) Correctly handle the AFS server returning a zero-length read. (3) Split out data zapping calls into one function (afs_zap_data). (4) Rename some afs_file_*() functions to afs_*() where they apply to non-regular files too. (5) Be consistent about the presentation of volume ID:vnode ID in debugging output. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
ef71c15c46
commit
416351f28d
@@ -125,7 +125,7 @@ struct inode *afs_iget(struct super_block *sb, struct key *key,
|
||||
struct inode *inode;
|
||||
int ret;
|
||||
|
||||
_enter(",{%u,%u,%u},,", fid->vid, fid->vnode, fid->unique);
|
||||
_enter(",{%x:%u.%u},,", fid->vid, fid->vnode, fid->unique);
|
||||
|
||||
as = sb->s_fs_info;
|
||||
data.volume = as->volume;
|
||||
@@ -203,6 +203,19 @@ bad_inode:
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* mark the data attached to an inode as obsolete due to a write on the server
|
||||
* - might also want to ditch all the outstanding writes and dirty pages
|
||||
*/
|
||||
void afs_zap_data(struct afs_vnode *vnode)
|
||||
{
|
||||
kenter("zap data {%x:%u}", vnode->fid.vid, vnode->fid.vnode);
|
||||
|
||||
/* nuke all the non-dirty pages that aren't locked, mapped or being
|
||||
* written back */
|
||||
invalidate_remote_inode(&vnode->vfs_inode);
|
||||
}
|
||||
|
||||
/*
|
||||
* validate a vnode/inode
|
||||
* - there are several things we need to check
|
||||
@@ -258,10 +271,8 @@ int afs_validate(struct afs_vnode *vnode, struct key *key)
|
||||
|
||||
/* if the vnode's data version number changed then its contents are
|
||||
* different */
|
||||
if (test_and_clear_bit(AFS_VNODE_ZAP_DATA, &vnode->flags)) {
|
||||
_debug("zap data {%x:%d}", vnode->fid.vid, vnode->fid.vnode);
|
||||
invalidate_remote_inode(&vnode->vfs_inode);
|
||||
}
|
||||
if (test_and_clear_bit(AFS_VNODE_ZAP_DATA, &vnode->flags))
|
||||
afs_zap_data(vnode);
|
||||
|
||||
clear_bit(AFS_VNODE_MODIFIED, &vnode->flags);
|
||||
mutex_unlock(&vnode->validate_lock);
|
||||
@@ -278,7 +289,7 @@ error_unlock:
|
||||
/*
|
||||
* read the attributes of an inode
|
||||
*/
|
||||
int afs_inode_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
int afs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
struct kstat *stat)
|
||||
{
|
||||
struct inode *inode;
|
||||
@@ -301,7 +312,7 @@ void afs_clear_inode(struct inode *inode)
|
||||
|
||||
vnode = AFS_FS_I(inode);
|
||||
|
||||
_enter("{%x:%d.%d} v=%u x=%u t=%u }",
|
||||
_enter("{%x:%u.%d} v=%u x=%u t=%u }",
|
||||
vnode->fid.vid,
|
||||
vnode->fid.vnode,
|
||||
vnode->fid.unique,
|
||||
|
Reference in New Issue
Block a user