]> err.no Git - linux-2.6/blobdiff - fs/afs/inode.c
dlm: recover locks waiting for overlap replies
[linux-2.6] / fs / afs / inode.c
index 515a5d12d8fb5d49d69a6f896ac33c2dfdbdf859..84750c8e9f95be1b07ba30ed7ab4778cf1ae9599 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/slab.h>
 #include <linux/fs.h>
 #include <linux/pagemap.h>
+#include <linux/sched.h>
 #include "internal.h"
 
 struct afs_iget_data {
@@ -209,11 +210,15 @@ bad_inode:
  */
 void afs_zap_data(struct afs_vnode *vnode)
 {
-       _enter("zap data {%x:%u}", vnode->fid.vid, vnode->fid.vnode);
+       _enter("{%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);
+        * written back in a regular file and completely discard the pages in a
+        * directory or symlink */
+       if (S_ISREG(vnode->vfs_inode.i_mode))
+               invalidate_remote_inode(&vnode->vfs_inode);
+       else
+               invalidate_inode_pages2(vnode->vfs_inode.i_mapping);
 }
 
 /*
@@ -296,7 +301,8 @@ int afs_getattr(struct vfsmount *mnt, struct dentry *dentry,
 
        inode = dentry->d_inode;
 
-       _enter("{ ino=%lu v=%lu }", inode->i_ino, inode->i_version);
+       _enter("{ ino=%lu v=%llu }", inode->i_ino,
+               (unsigned long long)inode->i_version);
 
        generic_fillattr(inode, stat);
        return 0;