]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/afs/inode.c
[SCSI] sym53c8xx: fix resid calculation
[linux-2.6-omap-h63xx.git] / fs / afs / inode.c
index 515a5d12d8fb5d49d69a6f896ac33c2dfdbdf859..08db82e1343a1555fcc911fb4d42954db3fad1a0 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 {
@@ -195,10 +196,7 @@ struct inode *afs_iget(struct super_block *sb, struct key *key,
 
        /* failure */
 bad_inode:
-       make_bad_inode(inode);
-       unlock_new_inode(inode);
-       iput(inode);
-
+       iget_failed(inode);
        _leave(" = %d [bad]", ret);
        return ERR_PTR(ret);
 }
@@ -209,11 +207,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 +298,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;