]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - fs/nfs/inode.c
89e98312599d0a0a01b059bb1c71d7eea19aaee9
[linux-2.6.git] / fs / nfs / inode.c
1 /*
2  *  linux/fs/nfs/inode.c
3  *
4  *  Copyright (C) 1992  Rick Sladkey
5  *
6  *  nfs inode and superblock handling functions
7  *
8  *  Modularised by Alan Cox <alan@lxorguk.ukuu.org.uk>, while hacking some
9  *  experimental NFS changes. Modularisation taken straight from SYS5 fs.
10  *
11  *  Change to nfs_read_super() to permit NFS mounts to multi-homed hosts.
12  *  J.S.Peatfield@damtp.cam.ac.uk
13  *
14  */
15
16 #include <linux/module.h>
17 #include <linux/init.h>
18 #include <linux/sched.h>
19 #include <linux/time.h>
20 #include <linux/kernel.h>
21 #include <linux/mm.h>
22 #include <linux/string.h>
23 #include <linux/stat.h>
24 #include <linux/errno.h>
25 #include <linux/unistd.h>
26 #include <linux/sunrpc/clnt.h>
27 #include <linux/sunrpc/stats.h>
28 #include <linux/sunrpc/metrics.h>
29 #include <linux/nfs_fs.h>
30 #include <linux/nfs_mount.h>
31 #include <linux/nfs4_mount.h>
32 #include <linux/lockd/bind.h>
33 #include <linux/seq_file.h>
34 #include <linux/mount.h>
35 #include <linux/nfs_idmap.h>
36 #include <linux/vfs.h>
37 #include <linux/inet.h>
38 #include <linux/nfs_xdr.h>
39
40 #include <asm/system.h>
41 #include <asm/uaccess.h>
42
43 #include "nfs4_fs.h"
44 #include "callback.h"
45 #include "delegation.h"
46 #include "iostat.h"
47 #include "internal.h"
48 #include "fscache.h"
49 #include "dns_resolve.h"
50
51 #define NFSDBG_FACILITY         NFSDBG_VFS
52
53 #define NFS_64_BIT_INODE_NUMBERS_ENABLED        1
54
55 /* Default is to see 64-bit inode numbers */
56 static int enable_ino64 = NFS_64_BIT_INODE_NUMBERS_ENABLED;
57
58 static void nfs_invalidate_inode(struct inode *);
59 static int nfs_update_inode(struct inode *, struct nfs_fattr *);
60
61 static struct kmem_cache * nfs_inode_cachep;
62
63 static inline unsigned long
64 nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
65 {
66         return nfs_fileid_to_ino_t(fattr->fileid);
67 }
68
69 /**
70  * nfs_wait_bit_killable - helper for functions that are sleeping on bit locks
71  * @word: long word containing the bit lock
72  */
73 int nfs_wait_bit_killable(void *word)
74 {
75         if (fatal_signal_pending(current))
76                 return -ERESTARTSYS;
77         schedule();
78         return 0;
79 }
80
81 /**
82  * nfs_compat_user_ino64 - returns the user-visible inode number
83  * @fileid: 64-bit fileid
84  *
85  * This function returns a 32-bit inode number if the boot parameter
86  * nfs.enable_ino64 is zero.
87  */
88 u64 nfs_compat_user_ino64(u64 fileid)
89 {
90         int ino;
91
92         if (enable_ino64)
93                 return fileid;
94         ino = fileid;
95         if (sizeof(ino) < sizeof(fileid))
96                 ino ^= fileid >> (sizeof(fileid)-sizeof(ino)) * 8;
97         return ino;
98 }
99
100 void nfs_clear_inode(struct inode *inode)
101 {
102         /*
103          * The following should never happen...
104          */
105         BUG_ON(nfs_have_writebacks(inode));
106         BUG_ON(!list_empty(&NFS_I(inode)->open_files));
107         nfs_zap_acl_cache(inode);
108         nfs_access_zap_cache(inode);
109         nfs_fscache_release_inode_cookie(inode);
110 }
111
112 /**
113  * nfs_sync_mapping - helper to flush all mmapped dirty data to disk
114  */
115 int nfs_sync_mapping(struct address_space *mapping)
116 {
117         int ret;
118
119         if (mapping->nrpages == 0)
120                 return 0;
121         unmap_mapping_range(mapping, 0, 0, 0);
122         ret = filemap_write_and_wait(mapping);
123         if (ret != 0)
124                 goto out;
125         ret = nfs_wb_all(mapping->host);
126 out:
127         return ret;
128 }
129
130 /*
131  * Invalidate the local caches
132  */
133 static void nfs_zap_caches_locked(struct inode *inode)
134 {
135         struct nfs_inode *nfsi = NFS_I(inode);
136         int mode = inode->i_mode;
137
138         nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
139
140         nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
141         nfsi->attrtimeo_timestamp = jiffies;
142
143         memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_COOKIEVERF(inode)));
144         if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))
145                 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE;
146         else
147                 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE;
148 }
149
150 void nfs_zap_caches(struct inode *inode)
151 {
152         spin_lock(&inode->i_lock);
153         nfs_zap_caches_locked(inode);
154         spin_unlock(&inode->i_lock);
155 }
156
157 void nfs_zap_mapping(struct inode *inode, struct address_space *mapping)
158 {
159         if (mapping->nrpages != 0) {
160                 spin_lock(&inode->i_lock);
161                 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_DATA;
162                 spin_unlock(&inode->i_lock);
163         }
164 }
165
166 void nfs_zap_acl_cache(struct inode *inode)
167 {
168         void (*clear_acl_cache)(struct inode *);
169
170         clear_acl_cache = NFS_PROTO(inode)->clear_acl_cache;
171         if (clear_acl_cache != NULL)
172                 clear_acl_cache(inode);
173         spin_lock(&inode->i_lock);
174         NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ACL;
175         spin_unlock(&inode->i_lock);
176 }
177
178 void nfs_invalidate_atime(struct inode *inode)
179 {
180         spin_lock(&inode->i_lock);
181         NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATIME;
182         spin_unlock(&inode->i_lock);
183 }
184
185 /*
186  * Invalidate, but do not unhash, the inode.
187  * NB: must be called with inode->i_lock held!
188  */
189 static void nfs_invalidate_inode(struct inode *inode)
190 {
191         set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
192         nfs_zap_caches_locked(inode);
193 }
194
195 struct nfs_find_desc {
196         struct nfs_fh           *fh;
197         struct nfs_fattr        *fattr;
198 };
199
200 /*
201  * In NFSv3 we can have 64bit inode numbers. In order to support
202  * this, and re-exported directories (also seen in NFSv2)
203  * we are forced to allow 2 different inodes to have the same
204  * i_ino.
205  */
206 static int
207 nfs_find_actor(struct inode *inode, void *opaque)
208 {
209         struct nfs_find_desc    *desc = (struct nfs_find_desc *)opaque;
210         struct nfs_fh           *fh = desc->fh;
211         struct nfs_fattr        *fattr = desc->fattr;
212
213         if (NFS_FILEID(inode) != fattr->fileid)
214                 return 0;
215         if (nfs_compare_fh(NFS_FH(inode), fh))
216                 return 0;
217         if (is_bad_inode(inode) || NFS_STALE(inode))
218                 return 0;
219         return 1;
220 }
221
222 static int
223 nfs_init_locked(struct inode *inode, void *opaque)
224 {
225         struct nfs_find_desc    *desc = (struct nfs_find_desc *)opaque;
226         struct nfs_fattr        *fattr = desc->fattr;
227
228         set_nfs_fileid(inode, fattr->fileid);
229         nfs_copy_fh(NFS_FH(inode), desc->fh);
230         return 0;
231 }
232
233 /* Don't use READDIRPLUS on directories that we believe are too large */
234 #define NFS_LIMIT_READDIRPLUS (8*PAGE_SIZE)
235
236 /*
237  * This is our front-end to iget that looks up inodes by file handle
238  * instead of inode number.
239  */
240 struct inode *
241 nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
242 {
243         struct nfs_find_desc desc = {
244                 .fh     = fh,
245                 .fattr  = fattr
246         };
247         struct inode *inode = ERR_PTR(-ENOENT);
248         unsigned long hash;
249
250         if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0)
251                 goto out_no_inode;
252         if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
253                 goto out_no_inode;
254
255         hash = nfs_fattr_to_ino_t(fattr);
256
257         inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc);
258         if (inode == NULL) {
259                 inode = ERR_PTR(-ENOMEM);
260                 goto out_no_inode;
261         }
262
263         if (inode->i_state & I_NEW) {
264                 struct nfs_inode *nfsi = NFS_I(inode);
265                 unsigned long now = jiffies;
266
267                 /* We set i_ino for the few things that still rely on it,
268                  * such as stat(2) */
269                 inode->i_ino = hash;
270
271                 /* We can't support update_atime(), since the server will reset it */
272                 inode->i_flags |= S_NOATIME|S_NOCMTIME;
273                 inode->i_mode = fattr->mode;
274                 if ((fattr->valid & NFS_ATTR_FATTR_MODE) == 0
275                                 && nfs_server_capable(inode, NFS_CAP_MODE))
276                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR
277                                 | NFS_INO_INVALID_ACCESS
278                                 | NFS_INO_INVALID_ACL;
279                 /* Why so? Because we want revalidate for devices/FIFOs, and
280                  * that's precisely what we have in nfs_file_inode_operations.
281                  */
282                 inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->file_inode_ops;
283                 if (S_ISREG(inode->i_mode)) {
284                         inode->i_fop = &nfs_file_operations;
285                         inode->i_data.a_ops = &nfs_file_aops;
286                         inode->i_data.backing_dev_info = &NFS_SB(sb)->backing_dev_info;
287                 } else if (S_ISDIR(inode->i_mode)) {
288                         inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->dir_inode_ops;
289                         inode->i_fop = &nfs_dir_operations;
290                         if (nfs_server_capable(inode, NFS_CAP_READDIRPLUS)
291                             && fattr->size <= NFS_LIMIT_READDIRPLUS)
292                                 set_bit(NFS_INO_ADVISE_RDPLUS, &NFS_I(inode)->flags);
293                         /* Deal with crossing mountpoints */
294                         if ((fattr->valid & NFS_ATTR_FATTR_FSID)
295                                         && !nfs_fsid_equal(&NFS_SB(sb)->fsid, &fattr->fsid)) {
296                                 if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
297                                         inode->i_op = &nfs_referral_inode_operations;
298                                 else
299                                         inode->i_op = &nfs_mountpoint_inode_operations;
300                                 inode->i_fop = NULL;
301                                 set_bit(NFS_INO_MOUNTPOINT, &nfsi->flags);
302                         }
303                 } else if (S_ISLNK(inode->i_mode))
304                         inode->i_op = &nfs_symlink_inode_operations;
305                 else
306                         init_special_inode(inode, inode->i_mode, fattr->rdev);
307
308                 memset(&inode->i_atime, 0, sizeof(inode->i_atime));
309                 memset(&inode->i_mtime, 0, sizeof(inode->i_mtime));
310                 memset(&inode->i_ctime, 0, sizeof(inode->i_ctime));
311                 nfsi->change_attr = 0;
312                 inode->i_size = 0;
313                 inode->i_nlink = 0;
314                 inode->i_uid = -2;
315                 inode->i_gid = -2;
316                 inode->i_blocks = 0;
317                 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
318
319                 nfsi->read_cache_jiffies = fattr->time_start;
320                 nfsi->attr_gencount = fattr->gencount;
321                 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
322                         inode->i_atime = fattr->atime;
323                 else if (nfs_server_capable(inode, NFS_CAP_ATIME))
324                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR;
325                 if (fattr->valid & NFS_ATTR_FATTR_MTIME)
326                         inode->i_mtime = fattr->mtime;
327                 else if (nfs_server_capable(inode, NFS_CAP_MTIME))
328                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR
329                                 | NFS_INO_INVALID_DATA;
330                 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
331                         inode->i_ctime = fattr->ctime;
332                 else if (nfs_server_capable(inode, NFS_CAP_CTIME))
333                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR
334                                 | NFS_INO_INVALID_ACCESS
335                                 | NFS_INO_INVALID_ACL;
336                 if (fattr->valid & NFS_ATTR_FATTR_CHANGE)
337                         nfsi->change_attr = fattr->change_attr;
338                 else if (nfs_server_capable(inode, NFS_CAP_CHANGE_ATTR))
339                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR
340                                 | NFS_INO_INVALID_DATA;
341                 if (fattr->valid & NFS_ATTR_FATTR_SIZE)
342                         inode->i_size = nfs_size_to_loff_t(fattr->size);
343                 else
344                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR
345                                 | NFS_INO_INVALID_DATA
346                                 | NFS_INO_REVAL_PAGECACHE;
347                 if (fattr->valid & NFS_ATTR_FATTR_NLINK)
348                         inode->i_nlink = fattr->nlink;
349                 else if (nfs_server_capable(inode, NFS_CAP_NLINK))
350                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR;
351                 if (fattr->valid & NFS_ATTR_FATTR_OWNER)
352                         inode->i_uid = fattr->uid;
353                 else if (nfs_server_capable(inode, NFS_CAP_OWNER))
354                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR
355                                 | NFS_INO_INVALID_ACCESS
356                                 | NFS_INO_INVALID_ACL;
357                 if (fattr->valid & NFS_ATTR_FATTR_GROUP)
358                         inode->i_gid = fattr->gid;
359                 else if (nfs_server_capable(inode, NFS_CAP_OWNER_GROUP))
360                         nfsi->cache_validity |= NFS_INO_INVALID_ATTR
361                                 | NFS_INO_INVALID_ACCESS
362                                 | NFS_INO_INVALID_ACL;
363                 if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
364                         inode->i_blocks = fattr->du.nfs2.blocks;
365                 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
366                         /*
367                          * report the blocks in 512byte units
368                          */
369                         inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
370                 }
371                 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
372                 nfsi->attrtimeo_timestamp = now;
373                 nfsi->access_cache = RB_ROOT;
374
375                 nfs_fscache_init_inode_cookie(inode);
376
377                 unlock_new_inode(inode);
378         } else
379                 nfs_refresh_inode(inode, fattr);
380         dprintk("NFS: nfs_fhget(%s/%Ld ct=%d)\n",
381                 inode->i_sb->s_id,
382                 (long long)NFS_FILEID(inode),
383                 atomic_read(&inode->i_count));
384
385 out:
386         return inode;
387
388 out_no_inode:
389         dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode));
390         goto out;
391 }
392
393 #define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE)
394
395 int
396 nfs_setattr(struct dentry *dentry, struct iattr *attr)
397 {
398         struct inode *inode = dentry->d_inode;
399         struct nfs_fattr fattr;
400         int error;
401
402         nfs_inc_stats(inode, NFSIOS_VFSSETATTR);
403
404         /* skip mode change if it's just for clearing setuid/setgid */
405         if (attr->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
406                 attr->ia_valid &= ~ATTR_MODE;
407
408         if (attr->ia_valid & ATTR_SIZE) {
409                 if (!S_ISREG(inode->i_mode) || attr->ia_size == i_size_read(inode))
410                         attr->ia_valid &= ~ATTR_SIZE;
411         }
412
413         /* Optimization: if the end result is no change, don't RPC */
414         attr->ia_valid &= NFS_VALID_ATTRS;
415         if ((attr->ia_valid & ~ATTR_FILE) == 0)
416                 return 0;
417
418         /* Write all dirty data */
419         if (S_ISREG(inode->i_mode)) {
420                 filemap_write_and_wait(inode->i_mapping);
421                 nfs_wb_all(inode);
422         }
423         /*
424          * Return any delegations if we're going to change ACLs
425          */
426         if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0)
427                 nfs_inode_return_delegation(inode);
428         error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr);
429         if (error == 0)
430                 nfs_refresh_inode(inode, &fattr);
431         return error;
432 }
433
434 /**
435  * nfs_vmtruncate - unmap mappings "freed" by truncate() syscall
436  * @inode: inode of the file used
437  * @offset: file offset to start truncating
438  *
439  * This is a copy of the common vmtruncate, but with the locking
440  * corrected to take into account the fact that NFS requires
441  * inode->i_size to be updated under the inode->i_lock.
442  */
443 static int nfs_vmtruncate(struct inode * inode, loff_t offset)
444 {
445         loff_t oldsize;
446         int err;
447
448         err = inode_newsize_ok(inode, offset);
449         if (err)
450                 goto out;
451
452         spin_lock(&inode->i_lock);
453         oldsize = inode->i_size;
454         i_size_write(inode, offset);
455         spin_unlock(&inode->i_lock);
456
457         truncate_pagecache(inode, oldsize, offset);
458 out:
459         return err;
460 }
461
462 /**
463  * nfs_setattr_update_inode - Update inode metadata after a setattr call.
464  * @inode: pointer to struct inode
465  * @attr: pointer to struct iattr
466  *
467  * Note: we do this in the *proc.c in order to ensure that
468  *       it works for things like exclusive creates too.
469  */
470 void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr)
471 {
472         if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) {
473                 spin_lock(&inode->i_lock);
474                 if ((attr->ia_valid & ATTR_MODE) != 0) {
475                         int mode = attr->ia_mode & S_IALLUGO;
476                         mode |= inode->i_mode & ~S_IALLUGO;
477                         inode->i_mode = mode;
478                 }
479                 if ((attr->ia_valid & ATTR_UID) != 0)
480                         inode->i_uid = attr->ia_uid;
481                 if ((attr->ia_valid & ATTR_GID) != 0)
482                         inode->i_gid = attr->ia_gid;
483                 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
484                 spin_unlock(&inode->i_lock);
485         }
486         if ((attr->ia_valid & ATTR_SIZE) != 0) {
487                 nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC);
488                 nfs_vmtruncate(inode, attr->ia_size);
489         }
490 }
491
492 int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
493 {
494         struct inode *inode = dentry->d_inode;
495         int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME;
496         int err;
497
498         /*
499          * Flush out writes to the server in order to update c/mtime.
500          *
501          * Hold the i_mutex to suspend application writes temporarily;
502          * this prevents long-running writing applications from blocking
503          * nfs_wb_nocommit.
504          */
505         if (S_ISREG(inode->i_mode)) {
506                 mutex_lock(&inode->i_mutex);
507                 nfs_wb_nocommit(inode);
508                 mutex_unlock(&inode->i_mutex);
509         }
510
511         /*
512          * We may force a getattr if the user cares about atime.
513          *
514          * Note that we only have to check the vfsmount flags here:
515          *  - NFS always sets S_NOATIME by so checking it would give a
516          *    bogus result
517          *  - NFS never sets MS_NOATIME or MS_NODIRATIME so there is
518          *    no point in checking those.
519          */
520         if ((mnt->mnt_flags & MNT_NOATIME) ||
521             ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)))
522                 need_atime = 0;
523
524         if (need_atime)
525                 err = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
526         else
527                 err = nfs_revalidate_inode(NFS_SERVER(inode), inode);
528         if (!err) {
529                 generic_fillattr(inode, stat);
530                 stat->ino = nfs_compat_user_ino64(NFS_FILEID(inode));
531         }
532         return err;
533 }
534
535 /**
536  * nfs_close_context - Common close_context() routine NFSv2/v3
537  * @ctx: pointer to context
538  * @is_sync: is this a synchronous close
539  *
540  * always ensure that the attributes are up to date if we're mounted
541  * with close-to-open semantics
542  */
543 void nfs_close_context(struct nfs_open_context *ctx, int is_sync)
544 {
545         struct inode *inode;
546         struct nfs_server *server;
547
548         if (!(ctx->mode & FMODE_WRITE))
549                 return;
550         if (!is_sync)
551                 return;
552         inode = ctx->path.dentry->d_inode;
553         if (!list_empty(&NFS_I(inode)->open_files))
554                 return;
555         server = NFS_SERVER(inode);
556         if (server->flags & NFS_MOUNT_NOCTO)
557                 return;
558         nfs_revalidate_inode(server, inode);
559 }
560
561 static struct nfs_open_context *alloc_nfs_open_context(struct path *path, struct rpc_cred *cred)
562 {
563         struct nfs_open_context *ctx;
564
565         ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
566         if (ctx != NULL) {
567                 ctx->path = *path;
568                 path_get(&ctx->path);
569                 ctx->cred = get_rpccred(cred);
570                 ctx->state = NULL;
571                 ctx->lockowner = current->files;
572                 ctx->flags = 0;
573                 ctx->error = 0;
574                 ctx->dir_cookie = 0;
575                 atomic_set(&ctx->count, 1);
576         }
577         return ctx;
578 }
579
580 struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx)
581 {
582         if (ctx != NULL)
583                 atomic_inc(&ctx->count);
584         return ctx;
585 }
586
587 static void __put_nfs_open_context(struct nfs_open_context *ctx, int is_sync)
588 {
589         struct inode *inode = ctx->path.dentry->d_inode;
590
591         if (!atomic_dec_and_lock(&ctx->count, &inode->i_lock))
592                 return;
593         list_del(&ctx->list);
594         spin_unlock(&inode->i_lock);
595         NFS_PROTO(inode)->close_context(ctx, is_sync);
596         if (ctx->cred != NULL)
597                 put_rpccred(ctx->cred);
598         path_put(&ctx->path);
599         kfree(ctx);
600 }
601
602 void put_nfs_open_context(struct nfs_open_context *ctx)
603 {
604         __put_nfs_open_context(ctx, 0);
605 }
606
607 static void put_nfs_open_context_sync(struct nfs_open_context *ctx)
608 {
609         __put_nfs_open_context(ctx, 1);
610 }
611
612 /*
613  * Ensure that mmap has a recent RPC credential for use when writing out
614  * shared pages
615  */
616 static void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx)
617 {
618         struct inode *inode = filp->f_path.dentry->d_inode;
619         struct nfs_inode *nfsi = NFS_I(inode);
620
621         filp->private_data = get_nfs_open_context(ctx);
622         spin_lock(&inode->i_lock);
623         list_add(&ctx->list, &nfsi->open_files);
624         spin_unlock(&inode->i_lock);
625 }
626
627 /*
628  * Given an inode, search for an open context with the desired characteristics
629  */
630 struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, fmode_t mode)
631 {
632         struct nfs_inode *nfsi = NFS_I(inode);
633         struct nfs_open_context *pos, *ctx = NULL;
634
635         spin_lock(&inode->i_lock);
636         list_for_each_entry(pos, &nfsi->open_files, list) {
637                 if (cred != NULL && pos->cred != cred)
638                         continue;
639                 if ((pos->mode & mode) == mode) {
640                         ctx = get_nfs_open_context(pos);
641                         break;
642                 }
643         }
644         spin_unlock(&inode->i_lock);
645         return ctx;
646 }
647
648 static void nfs_file_clear_open_context(struct file *filp)
649 {
650         struct inode *inode = filp->f_path.dentry->d_inode;
651         struct nfs_open_context *ctx = nfs_file_open_context(filp);
652
653         if (ctx) {
654                 filp->private_data = NULL;
655                 spin_lock(&inode->i_lock);
656                 list_move_tail(&ctx->list, &NFS_I(inode)->open_files);
657                 spin_unlock(&inode->i_lock);
658                 put_nfs_open_context_sync(ctx);
659         }
660 }
661
662 /*
663  * These allocate and release file read/write context information.
664  */
665 int nfs_open(struct inode *inode, struct file *filp)
666 {
667         struct nfs_open_context *ctx;
668         struct rpc_cred *cred;
669
670         cred = rpc_lookup_cred();
671         if (IS_ERR(cred))
672                 return PTR_ERR(cred);
673         ctx = alloc_nfs_open_context(&filp->f_path, cred);
674         put_rpccred(cred);
675         if (ctx == NULL)
676                 return -ENOMEM;
677         ctx->mode = filp->f_mode;
678         nfs_file_set_open_context(filp, ctx);
679         put_nfs_open_context(ctx);
680         nfs_fscache_set_inode_cookie(inode, filp);
681         return 0;
682 }
683
684 int nfs_release(struct inode *inode, struct file *filp)
685 {
686         nfs_file_clear_open_context(filp);
687         return 0;
688 }
689
690 /*
691  * This function is called whenever some part of NFS notices that
692  * the cached attributes have to be refreshed.
693  */
694 int
695 __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
696 {
697         int              status = -ESTALE;
698         struct nfs_fattr fattr;
699         struct nfs_inode *nfsi = NFS_I(inode);
700
701         dfprintk(PAGECACHE, "NFS: revalidating (%s/%Ld)\n",
702                 inode->i_sb->s_id, (long long)NFS_FILEID(inode));
703
704         if (is_bad_inode(inode))
705                 goto out;
706         if (NFS_STALE(inode))
707                 goto out;
708
709         nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
710         status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), &fattr);
711         if (status != 0) {
712                 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) getattr failed, error=%d\n",
713                          inode->i_sb->s_id,
714                          (long long)NFS_FILEID(inode), status);
715                 if (status == -ESTALE) {
716                         nfs_zap_caches(inode);
717                         if (!S_ISDIR(inode->i_mode))
718                                 set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
719                 }
720                 goto out;
721         }
722
723         status = nfs_refresh_inode(inode, &fattr);
724         if (status) {
725                 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n",
726                          inode->i_sb->s_id,
727                          (long long)NFS_FILEID(inode), status);
728                 goto out;
729         }
730
731         if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
732                 nfs_zap_acl_cache(inode);
733
734         dfprintk(PAGECACHE, "NFS: (%s/%Ld) revalidation complete\n",
735                 inode->i_sb->s_id,
736                 (long long)NFS_FILEID(inode));
737
738  out:
739         return status;
740 }
741
742 int nfs_attribute_timeout(struct inode *inode)
743 {
744         struct nfs_inode *nfsi = NFS_I(inode);
745
746         if (nfs_have_delegation(inode, FMODE_READ))
747                 return 0;
748         return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo);
749 }
750
751 /**
752  * nfs_revalidate_inode - Revalidate the inode attributes
753  * @server - pointer to nfs_server struct
754  * @inode - pointer to inode struct
755  *
756  * Updates inode attribute information by retrieving the data from the server.
757  */
758 int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
759 {
760         if (!(NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATTR)
761                         && !nfs_attribute_timeout(inode))
762                 return NFS_STALE(inode) ? -ESTALE : 0;
763         return __nfs_revalidate_inode(server, inode);
764 }
765
766 static int nfs_invalidate_mapping_nolock(struct inode *inode, struct address_space *mapping)
767 {
768         struct nfs_inode *nfsi = NFS_I(inode);
769         
770         if (mapping->nrpages != 0) {
771                 int ret = invalidate_inode_pages2(mapping);
772                 if (ret < 0)
773                         return ret;
774         }
775         spin_lock(&inode->i_lock);
776         nfsi->cache_validity &= ~NFS_INO_INVALID_DATA;
777         if (S_ISDIR(inode->i_mode))
778                 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
779         spin_unlock(&inode->i_lock);
780         nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE);
781         nfs_fscache_reset_inode_cookie(inode);
782         dfprintk(PAGECACHE, "NFS: (%s/%Ld) data cache invalidated\n",
783                         inode->i_sb->s_id, (long long)NFS_FILEID(inode));
784         return 0;
785 }
786
787 static int nfs_invalidate_mapping(struct inode *inode, struct address_space *mapping)
788 {
789         int ret = 0;
790
791         mutex_lock(&inode->i_mutex);
792         if (NFS_I(inode)->cache_validity & NFS_INO_INVALID_DATA) {
793                 ret = nfs_sync_mapping(mapping);
794                 if (ret == 0)
795                         ret = nfs_invalidate_mapping_nolock(inode, mapping);
796         }
797         mutex_unlock(&inode->i_mutex);
798         return ret;
799 }
800
801 /**
802  * nfs_revalidate_mapping_nolock - Revalidate the pagecache
803  * @inode - pointer to host inode
804  * @mapping - pointer to mapping
805  */
806 int nfs_revalidate_mapping_nolock(struct inode *inode, struct address_space *mapping)
807 {
808         struct nfs_inode *nfsi = NFS_I(inode);
809         int ret = 0;
810
811         if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE)
812                         || nfs_attribute_timeout(inode) || NFS_STALE(inode)) {
813                 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
814                 if (ret < 0)
815                         goto out;
816         }
817         if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
818                 ret = nfs_invalidate_mapping_nolock(inode, mapping);
819 out:
820         return ret;
821 }
822
823 /**
824  * nfs_revalidate_mapping - Revalidate the pagecache
825  * @inode - pointer to host inode
826  * @mapping - pointer to mapping
827  *
828  * This version of the function will take the inode->i_mutex and attempt to
829  * flush out all dirty data if it needs to invalidate the page cache.
830  */
831 int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
832 {
833         struct nfs_inode *nfsi = NFS_I(inode);
834         int ret = 0;
835
836         if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE)
837                         || nfs_attribute_timeout(inode) || NFS_STALE(inode)) {
838                 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
839                 if (ret < 0)
840                         goto out;
841         }
842         if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
843                 ret = nfs_invalidate_mapping(inode, mapping);
844 out:
845         return ret;
846 }
847
848 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
849 {
850         struct nfs_inode *nfsi = NFS_I(inode);
851
852         if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
853                         && (fattr->valid & NFS_ATTR_FATTR_CHANGE)
854                         && nfsi->change_attr == fattr->pre_change_attr) {
855                 nfsi->change_attr = fattr->change_attr;
856                 if (S_ISDIR(inode->i_mode))
857                         nfsi->cache_validity |= NFS_INO_INVALID_DATA;
858         }
859         /* If we have atomic WCC data, we may update some attributes */
860         if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
861                         && (fattr->valid & NFS_ATTR_FATTR_CTIME)
862                         && timespec_equal(&inode->i_ctime, &fattr->pre_ctime))
863                         memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
864
865         if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
866                         && (fattr->valid & NFS_ATTR_FATTR_MTIME)
867                         && timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) {
868                         memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
869                         if (S_ISDIR(inode->i_mode))
870                                 nfsi->cache_validity |= NFS_INO_INVALID_DATA;
871         }
872         if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
873                         && (fattr->valid & NFS_ATTR_FATTR_SIZE)
874                         && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
875                         && nfsi->npages == 0)
876                         i_size_write(inode, nfs_size_to_loff_t(fattr->size));
877 }
878
879 /**
880  * nfs_check_inode_attributes - verify consistency of the inode attribute cache
881  * @inode - pointer to inode
882  * @fattr - updated attributes
883  *
884  * Verifies the attribute cache. If we have just changed the attributes,
885  * so that fattr carries weak cache consistency data, then it may
886  * also update the ctime/mtime/change_attribute.
887  */
888 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
889 {
890         struct nfs_inode *nfsi = NFS_I(inode);
891         loff_t cur_size, new_isize;
892         unsigned long invalid = 0;
893
894
895         /* Has the inode gone and changed behind our back? */
896         if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
897                 return -EIO;
898         if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
899                 return -EIO;
900
901         if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
902                         nfsi->change_attr != fattr->change_attr)
903                 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
904
905         /* Verify a few of the more important attributes */
906         if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec_equal(&inode->i_mtime, &fattr->mtime))
907                 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
908
909         if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
910                 cur_size = i_size_read(inode);
911                 new_isize = nfs_size_to_loff_t(fattr->size);
912                 if (cur_size != new_isize && nfsi->npages == 0)
913                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
914         }
915
916         /* Have any file permissions changed? */
917         if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
918                 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
919         if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && inode->i_uid != fattr->uid)
920                 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
921         if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && inode->i_gid != fattr->gid)
922                 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
923
924         /* Has the link count changed? */
925         if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
926                 invalid |= NFS_INO_INVALID_ATTR;
927
928         if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec_equal(&inode->i_atime, &fattr->atime))
929                 invalid |= NFS_INO_INVALID_ATIME;
930
931         if (invalid != 0)
932                 nfsi->cache_validity |= invalid;
933
934         nfsi->read_cache_jiffies = fattr->time_start;
935         return 0;
936 }
937
938 static int nfs_ctime_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
939 {
940         if (!(fattr->valid & NFS_ATTR_FATTR_CTIME))
941                 return 0;
942         return timespec_compare(&fattr->ctime, &inode->i_ctime) > 0;
943 }
944
945 static int nfs_size_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
946 {
947         if (!(fattr->valid & NFS_ATTR_FATTR_SIZE))
948                 return 0;
949         return nfs_size_to_loff_t(fattr->size) > i_size_read(inode);
950 }
951
952 static atomic_long_t nfs_attr_generation_counter;
953
954 static unsigned long nfs_read_attr_generation_counter(void)
955 {
956         return atomic_long_read(&nfs_attr_generation_counter);
957 }
958
959 unsigned long nfs_inc_attr_generation_counter(void)
960 {
961         return atomic_long_inc_return(&nfs_attr_generation_counter);
962 }
963
964 void nfs_fattr_init(struct nfs_fattr *fattr)
965 {
966         fattr->valid = 0;
967         fattr->time_start = jiffies;
968         fattr->gencount = nfs_inc_attr_generation_counter();
969 }
970
971 /**
972  * nfs_inode_attrs_need_update - check if the inode attributes need updating
973  * @inode - pointer to inode
974  * @fattr - attributes
975  *
976  * Attempt to divine whether or not an RPC call reply carrying stale
977  * attributes got scheduled after another call carrying updated ones.
978  *
979  * To do so, the function first assumes that a more recent ctime means
980  * that the attributes in fattr are newer, however it also attempt to
981  * catch the case where ctime either didn't change, or went backwards
982  * (if someone reset the clock on the server) by looking at whether
983  * or not this RPC call was started after the inode was last updated.
984  * Note also the check for wraparound of 'attr_gencount'
985  *
986  * The function returns 'true' if it thinks the attributes in 'fattr' are
987  * more recent than the ones cached in the inode.
988  *
989  */
990 static int nfs_inode_attrs_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
991 {
992         const struct nfs_inode *nfsi = NFS_I(inode);
993
994         return ((long)fattr->gencount - (long)nfsi->attr_gencount) > 0 ||
995                 nfs_ctime_need_update(inode, fattr) ||
996                 nfs_size_need_update(inode, fattr) ||
997                 ((long)nfsi->attr_gencount - (long)nfs_read_attr_generation_counter() > 0);
998 }
999
1000 static int nfs_refresh_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1001 {
1002         if (nfs_inode_attrs_need_update(inode, fattr))
1003                 return nfs_update_inode(inode, fattr);
1004         return nfs_check_inode_attributes(inode, fattr);
1005 }
1006
1007 /**
1008  * nfs_refresh_inode - try to update the inode attribute cache
1009  * @inode - pointer to inode
1010  * @fattr - updated attributes
1011  *
1012  * Check that an RPC call that returned attributes has not overlapped with
1013  * other recent updates of the inode metadata, then decide whether it is
1014  * safe to do a full update of the inode attributes, or whether just to
1015  * call nfs_check_inode_attributes.
1016  */
1017 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1018 {
1019         int status;
1020
1021         if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1022                 return 0;
1023         spin_lock(&inode->i_lock);
1024         status = nfs_refresh_inode_locked(inode, fattr);
1025         spin_unlock(&inode->i_lock);
1026
1027         return status;
1028 }
1029
1030 static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1031 {
1032         struct nfs_inode *nfsi = NFS_I(inode);
1033
1034         nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
1035         if (S_ISDIR(inode->i_mode))
1036                 nfsi->cache_validity |= NFS_INO_INVALID_DATA;
1037         if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1038                 return 0;
1039         return nfs_refresh_inode_locked(inode, fattr);
1040 }
1041
1042 /**
1043  * nfs_post_op_update_inode - try to update the inode attribute cache
1044  * @inode - pointer to inode
1045  * @fattr - updated attributes
1046  *
1047  * After an operation that has changed the inode metadata, mark the
1048  * attribute cache as being invalid, then try to update it.
1049  *
1050  * NB: if the server didn't return any post op attributes, this
1051  * function will force the retrieval of attributes before the next
1052  * NFS request.  Thus it should be used only for operations that
1053  * are expected to change one or more attributes, to avoid
1054  * unnecessary NFS requests and trips through nfs_update_inode().
1055  */
1056 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1057 {
1058         int status;
1059
1060         spin_lock(&inode->i_lock);
1061         status = nfs_post_op_update_inode_locked(inode, fattr);
1062         spin_unlock(&inode->i_lock);
1063         return status;
1064 }
1065
1066 /**
1067  * nfs_post_op_update_inode_force_wcc - try to update the inode attribute cache
1068  * @inode - pointer to inode
1069  * @fattr - updated attributes
1070  *
1071  * After an operation that has changed the inode metadata, mark the
1072  * attribute cache as being invalid, then try to update it. Fake up
1073  * weak cache consistency data, if none exist.
1074  *
1075  * This function is mainly designed to be used by the ->write_done() functions.
1076  */
1077 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr)
1078 {
1079         int status;
1080
1081         spin_lock(&inode->i_lock);
1082         /* Don't do a WCC update if these attributes are already stale */
1083         if ((fattr->valid & NFS_ATTR_FATTR) == 0 ||
1084                         !nfs_inode_attrs_need_update(inode, fattr)) {
1085                 fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE
1086                                 | NFS_ATTR_FATTR_PRESIZE
1087                                 | NFS_ATTR_FATTR_PREMTIME
1088                                 | NFS_ATTR_FATTR_PRECTIME);
1089                 goto out_noforce;
1090         }
1091         if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1092                         (fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) {
1093                 fattr->pre_change_attr = NFS_I(inode)->change_attr;
1094                 fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
1095         }
1096         if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 &&
1097                         (fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) {
1098                 memcpy(&fattr->pre_ctime, &inode->i_ctime, sizeof(fattr->pre_ctime));
1099                 fattr->valid |= NFS_ATTR_FATTR_PRECTIME;
1100         }
1101         if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 &&
1102                         (fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) {
1103                 memcpy(&fattr->pre_mtime, &inode->i_mtime, sizeof(fattr->pre_mtime));
1104                 fattr->valid |= NFS_ATTR_FATTR_PREMTIME;
1105         }
1106         if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 &&
1107                         (fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) {
1108                 fattr->pre_size = i_size_read(inode);
1109                 fattr->valid |= NFS_ATTR_FATTR_PRESIZE;
1110         }
1111 out_noforce:
1112         status = nfs_post_op_update_inode_locked(inode, fattr);
1113         spin_unlock(&inode->i_lock);
1114         return status;
1115 }
1116
1117 /*
1118  * Many nfs protocol calls return the new file attributes after
1119  * an operation.  Here we update the inode to reflect the state
1120  * of the server's inode.
1121  *
1122  * This is a bit tricky because we have to make sure all dirty pages
1123  * have been sent off to the server before calling invalidate_inode_pages.
1124  * To make sure no other process adds more write requests while we try
1125  * our best to flush them, we make them sleep during the attribute refresh.
1126  *
1127  * A very similar scenario holds for the dir cache.
1128  */
1129 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1130 {
1131         struct nfs_server *server;
1132         struct nfs_inode *nfsi = NFS_I(inode);
1133         loff_t cur_isize, new_isize;
1134         unsigned long invalid = 0;
1135         unsigned long now = jiffies;
1136         unsigned long save_cache_validity;
1137
1138         dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n",
1139                         __func__, inode->i_sb->s_id, inode->i_ino,
1140                         atomic_read(&inode->i_count), fattr->valid);
1141
1142         if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
1143                 goto out_fileid;
1144
1145         /*
1146          * Make sure the inode's type hasn't changed.
1147          */
1148         if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
1149                 goto out_changed;
1150
1151         server = NFS_SERVER(inode);
1152         /* Update the fsid? */
1153         if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) &&
1154                         !nfs_fsid_equal(&server->fsid, &fattr->fsid) &&
1155                         !test_bit(NFS_INO_MOUNTPOINT, &nfsi->flags))
1156                 server->fsid = fattr->fsid;
1157
1158         /*
1159          * Update the read time so we don't revalidate too often.
1160          */
1161         nfsi->read_cache_jiffies = fattr->time_start;
1162
1163         save_cache_validity = nfsi->cache_validity;
1164         nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR
1165                         | NFS_INO_INVALID_ATIME
1166                         | NFS_INO_REVAL_FORCED
1167                         | NFS_INO_REVAL_PAGECACHE);
1168
1169         /* Do atomic weak cache consistency updates */
1170         nfs_wcc_update_inode(inode, fattr);
1171
1172         /* More cache consistency checks */
1173         if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
1174                 if (nfsi->change_attr != fattr->change_attr) {
1175                         dprintk("NFS: change_attr change on server for file %s/%ld\n",
1176                                         inode->i_sb->s_id, inode->i_ino);
1177                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1178                         if (S_ISDIR(inode->i_mode))
1179                                 nfs_force_lookup_revalidate(inode);
1180                         nfsi->change_attr = fattr->change_attr;
1181                 }
1182         } else if (server->caps & NFS_CAP_CHANGE_ATTR)
1183                 invalid |= save_cache_validity;
1184
1185         if (fattr->valid & NFS_ATTR_FATTR_MTIME) {
1186                 /* NFSv2/v3: Check if the mtime agrees */
1187                 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) {
1188                         dprintk("NFS: mtime change on server for file %s/%ld\n",
1189                                         inode->i_sb->s_id, inode->i_ino);
1190                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
1191                         if (S_ISDIR(inode->i_mode))
1192                                 nfs_force_lookup_revalidate(inode);
1193                         memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
1194                 }
1195         } else if (server->caps & NFS_CAP_MTIME)
1196                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1197                                 | NFS_INO_INVALID_DATA
1198                                 | NFS_INO_REVAL_PAGECACHE
1199                                 | NFS_INO_REVAL_FORCED);
1200
1201         if (fattr->valid & NFS_ATTR_FATTR_CTIME) {
1202                 /* If ctime has changed we should definitely clear access+acl caches */
1203                 if (!timespec_equal(&inode->i_ctime, &fattr->ctime)) {
1204                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1205                         /* and probably clear data for a directory too as utimes can cause
1206                          * havoc with our cache.
1207                          */
1208                         if (S_ISDIR(inode->i_mode)) {
1209                                 invalid |= NFS_INO_INVALID_DATA;
1210                                 nfs_force_lookup_revalidate(inode);
1211                         }
1212                         memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
1213                 }
1214         } else if (server->caps & NFS_CAP_CTIME)
1215                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1216                                 | NFS_INO_INVALID_ACCESS
1217                                 | NFS_INO_INVALID_ACL
1218                                 | NFS_INO_REVAL_FORCED);
1219
1220         /* Check if our cached file size is stale */
1221         if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1222                 new_isize = nfs_size_to_loff_t(fattr->size);
1223                 cur_isize = i_size_read(inode);
1224                 if (new_isize != cur_isize) {
1225                         /* Do we perhaps have any outstanding writes, or has
1226                          * the file grown beyond our last write? */
1227                         if (nfsi->npages == 0 || new_isize > cur_isize) {
1228                                 i_size_write(inode, new_isize);
1229                                 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
1230                         }
1231                         dprintk("NFS: isize change on server for file %s/%ld\n",
1232                                         inode->i_sb->s_id, inode->i_ino);
1233                 }
1234         } else
1235                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1236                                 | NFS_INO_REVAL_PAGECACHE
1237                                 | NFS_INO_REVAL_FORCED);
1238
1239
1240         if (fattr->valid & NFS_ATTR_FATTR_ATIME)
1241                 memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
1242         else if (server->caps & NFS_CAP_ATIME)
1243                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATIME
1244                                 | NFS_INO_REVAL_FORCED);
1245
1246         if (fattr->valid & NFS_ATTR_FATTR_MODE) {
1247                 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) {
1248                         umode_t newmode = inode->i_mode & S_IFMT;
1249                         newmode |= fattr->mode & S_IALLUGO;
1250                         inode->i_mode = newmode;
1251                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1252                 }
1253         } else if (server->caps & NFS_CAP_MODE)
1254                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1255                                 | NFS_INO_INVALID_ACCESS
1256                                 | NFS_INO_INVALID_ACL
1257                                 | NFS_INO_REVAL_FORCED);
1258
1259         if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
1260                 if (inode->i_uid != fattr->uid) {
1261                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1262                         inode->i_uid = fattr->uid;
1263                 }
1264         } else if (server->caps & NFS_CAP_OWNER)
1265                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1266                                 | NFS_INO_INVALID_ACCESS
1267                                 | NFS_INO_INVALID_ACL
1268                                 | NFS_INO_REVAL_FORCED);
1269
1270         if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
1271                 if (inode->i_gid != fattr->gid) {
1272                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1273                         inode->i_gid = fattr->gid;
1274                 }
1275         } else if (server->caps & NFS_CAP_OWNER_GROUP)
1276                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1277                                 | NFS_INO_INVALID_ACCESS
1278                                 | NFS_INO_INVALID_ACL
1279                                 | NFS_INO_REVAL_FORCED);
1280
1281         if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
1282                 if (inode->i_nlink != fattr->nlink) {
1283                         invalid |= NFS_INO_INVALID_ATTR;
1284                         if (S_ISDIR(inode->i_mode))
1285                                 invalid |= NFS_INO_INVALID_DATA;
1286                         inode->i_nlink = fattr->nlink;
1287                 }
1288         } else if (server->caps & NFS_CAP_NLINK)
1289                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1290                                 | NFS_INO_REVAL_FORCED);
1291
1292         if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
1293                 /*
1294                  * report the blocks in 512byte units
1295                  */
1296                 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
1297         }
1298         if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
1299                 inode->i_blocks = fattr->du.nfs2.blocks;
1300
1301         /* Update attrtimeo value if we're out of the unstable period */
1302         if (invalid & NFS_INO_INVALID_ATTR) {
1303                 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
1304                 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
1305                 nfsi->attrtimeo_timestamp = now;
1306                 nfsi->attr_gencount = nfs_inc_attr_generation_counter();
1307         } else {
1308                 if (!time_in_range_open(now, nfsi->attrtimeo_timestamp, nfsi->attrtimeo_timestamp + nfsi->attrtimeo)) {
1309                         if ((nfsi->attrtimeo <<= 1) > NFS_MAXATTRTIMEO(inode))
1310                                 nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode);
1311                         nfsi->attrtimeo_timestamp = now;
1312                 }
1313         }
1314         invalid &= ~NFS_INO_INVALID_ATTR;
1315         /* Don't invalidate the data if we were to blame */
1316         if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)
1317                                 || S_ISLNK(inode->i_mode)))
1318                 invalid &= ~NFS_INO_INVALID_DATA;
1319         if (!nfs_have_delegation(inode, FMODE_READ) ||
1320                         (save_cache_validity & NFS_INO_REVAL_FORCED))
1321                 nfsi->cache_validity |= invalid;
1322
1323         return 0;
1324  out_changed:
1325         /*
1326          * Big trouble! The inode has become a different object.
1327          */
1328         printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n",
1329                         __func__, inode->i_ino, inode->i_mode, fattr->mode);
1330  out_err:
1331         /*
1332          * No need to worry about unhashing the dentry, as the
1333          * lookup validation will know that the inode is bad.
1334          * (But we fall through to invalidate the caches.)
1335          */
1336         nfs_invalidate_inode(inode);
1337         return -ESTALE;
1338
1339  out_fileid:
1340         printk(KERN_ERR "NFS: server %s error: fileid changed\n"
1341                 "fsid %s: expected fileid 0x%Lx, got 0x%Lx\n",
1342                 NFS_SERVER(inode)->nfs_client->cl_hostname, inode->i_sb->s_id,
1343                 (long long)nfsi->fileid, (long long)fattr->fileid);
1344         goto out_err;
1345 }
1346
1347
1348 #ifdef CONFIG_NFS_V4
1349
1350 /*
1351  * Clean out any remaining NFSv4 state that might be left over due
1352  * to open() calls that passed nfs_atomic_lookup, but failed to call
1353  * nfs_open().
1354  */
1355 void nfs4_clear_inode(struct inode *inode)
1356 {
1357         /* If we are holding a delegation, return it! */
1358         nfs_inode_return_delegation_noreclaim(inode);
1359         /* First call standard NFS clear_inode() code */
1360         nfs_clear_inode(inode);
1361 }
1362 #endif
1363
1364 struct inode *nfs_alloc_inode(struct super_block *sb)
1365 {
1366         struct nfs_inode *nfsi;
1367         nfsi = (struct nfs_inode *)kmem_cache_alloc(nfs_inode_cachep, GFP_KERNEL);
1368         if (!nfsi)
1369                 return NULL;
1370         nfsi->flags = 0UL;
1371         nfsi->cache_validity = 0UL;
1372 #ifdef CONFIG_NFS_V3_ACL
1373         nfsi->acl_access = ERR_PTR(-EAGAIN);
1374         nfsi->acl_default = ERR_PTR(-EAGAIN);
1375 #endif
1376 #ifdef CONFIG_NFS_V4
1377         nfsi->nfs4_acl = NULL;
1378 #endif /* CONFIG_NFS_V4 */
1379         return &nfsi->vfs_inode;
1380 }
1381
1382 void nfs_destroy_inode(struct inode *inode)
1383 {
1384         kmem_cache_free(nfs_inode_cachep, NFS_I(inode));
1385 }
1386
1387 static inline void nfs4_init_once(struct nfs_inode *nfsi)
1388 {
1389 #ifdef CONFIG_NFS_V4
1390         INIT_LIST_HEAD(&nfsi->open_states);
1391         nfsi->delegation = NULL;
1392         nfsi->delegation_state = 0;
1393         init_rwsem(&nfsi->rwsem);
1394 #endif
1395 }
1396
1397 static void init_once(void *foo)
1398 {
1399         struct nfs_inode *nfsi = (struct nfs_inode *) foo;
1400
1401         inode_init_once(&nfsi->vfs_inode);
1402         INIT_LIST_HEAD(&nfsi->open_files);
1403         INIT_LIST_HEAD(&nfsi->access_cache_entry_lru);
1404         INIT_LIST_HEAD(&nfsi->access_cache_inode_lru);
1405         INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC);
1406         nfsi->npages = 0;
1407         atomic_set(&nfsi->silly_count, 1);
1408         INIT_HLIST_HEAD(&nfsi->silly_list);
1409         init_waitqueue_head(&nfsi->waitqueue);
1410         nfs4_init_once(nfsi);
1411 }
1412
1413 static int __init nfs_init_inodecache(void)
1414 {
1415         nfs_inode_cachep = kmem_cache_create("nfs_inode_cache",
1416                                              sizeof(struct nfs_inode),
1417                                              0, (SLAB_RECLAIM_ACCOUNT|
1418                                                 SLAB_MEM_SPREAD),
1419                                              init_once);
1420         if (nfs_inode_cachep == NULL)
1421                 return -ENOMEM;
1422
1423         return 0;
1424 }
1425
1426 static void nfs_destroy_inodecache(void)
1427 {
1428         kmem_cache_destroy(nfs_inode_cachep);
1429 }
1430
1431 struct workqueue_struct *nfsiod_workqueue;
1432
1433 /*
1434  * start up the nfsiod workqueue
1435  */
1436 static int nfsiod_start(void)
1437 {
1438         struct workqueue_struct *wq;
1439         dprintk("RPC:       creating workqueue nfsiod\n");
1440         wq = create_singlethread_workqueue("nfsiod");
1441         if (wq == NULL)
1442                 return -ENOMEM;
1443         nfsiod_workqueue = wq;
1444         return 0;
1445 }
1446
1447 /*
1448  * Destroy the nfsiod workqueue
1449  */
1450 static void nfsiod_stop(void)
1451 {
1452         struct workqueue_struct *wq;
1453
1454         wq = nfsiod_workqueue;
1455         if (wq == NULL)
1456                 return;
1457         nfsiod_workqueue = NULL;
1458         destroy_workqueue(wq);
1459 }
1460
1461 /*
1462  * Initialize NFS
1463  */
1464 static int __init init_nfs_fs(void)
1465 {
1466         int err;
1467
1468         err = nfs_dns_resolver_init();
1469         if (err < 0)
1470                 goto out8;
1471
1472         err = nfs_fscache_register();
1473         if (err < 0)
1474                 goto out7;
1475
1476         err = nfsiod_start();
1477         if (err)
1478                 goto out6;
1479
1480         err = nfs_fs_proc_init();
1481         if (err)
1482                 goto out5;
1483
1484         err = nfs_init_nfspagecache();
1485         if (err)
1486                 goto out4;
1487
1488         err = nfs_init_inodecache();
1489         if (err)
1490                 goto out3;
1491
1492         err = nfs_init_readpagecache();
1493         if (err)
1494                 goto out2;
1495
1496         err = nfs_init_writepagecache();
1497         if (err)
1498                 goto out1;
1499
1500         err = nfs_init_directcache();
1501         if (err)
1502                 goto out0;
1503
1504 #ifdef CONFIG_PROC_FS
1505         rpc_proc_register(&nfs_rpcstat);
1506 #endif
1507         if ((err = register_nfs_fs()) != 0)
1508                 goto out;
1509         return 0;
1510 out:
1511 #ifdef CONFIG_PROC_FS
1512         rpc_proc_unregister("nfs");
1513 #endif
1514         nfs_destroy_directcache();
1515 out0:
1516         nfs_destroy_writepagecache();
1517 out1:
1518         nfs_destroy_readpagecache();
1519 out2:
1520         nfs_destroy_inodecache();
1521 out3:
1522         nfs_destroy_nfspagecache();
1523 out4:
1524         nfs_fs_proc_exit();
1525 out5:
1526         nfsiod_stop();
1527 out6:
1528         nfs_fscache_unregister();
1529 out7:
1530         nfs_dns_resolver_destroy();
1531 out8:
1532         return err;
1533 }
1534
1535 static void __exit exit_nfs_fs(void)
1536 {
1537         nfs_destroy_directcache();
1538         nfs_destroy_writepagecache();
1539         nfs_destroy_readpagecache();
1540         nfs_destroy_inodecache();
1541         nfs_destroy_nfspagecache();
1542         nfs_fscache_unregister();
1543         nfs_dns_resolver_destroy();
1544 #ifdef CONFIG_PROC_FS
1545         rpc_proc_unregister("nfs");
1546 #endif
1547         unregister_nfs_fs();
1548         nfs_fs_proc_exit();
1549         nfsiod_stop();
1550 }
1551
1552 /* Not quite true; I just maintain it */
1553 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
1554 MODULE_LICENSE("GPL");
1555 module_param(enable_ino64, bool, 0644);
1556
1557 module_init(init_nfs_fs)
1558 module_exit(exit_nfs_fs)