]> bbs.cooldavid.org Git - net-next-2.6.git/blob - fs/nfs/inode.c
NFS: Replace __nfs_write_mapping with sync_inode()
[net-next-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         /* Flush out writes to the server in order to update c/mtime.  */
499         if (S_ISREG(inode->i_mode)) {
500                 err = filemap_write_and_wait(inode->i_mapping);
501                 if (err)
502                         goto out;
503         }
504
505         /*
506          * We may force a getattr if the user cares about atime.
507          *
508          * Note that we only have to check the vfsmount flags here:
509          *  - NFS always sets S_NOATIME by so checking it would give a
510          *    bogus result
511          *  - NFS never sets MS_NOATIME or MS_NODIRATIME so there is
512          *    no point in checking those.
513          */
514         if ((mnt->mnt_flags & MNT_NOATIME) ||
515             ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)))
516                 need_atime = 0;
517
518         if (need_atime)
519                 err = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
520         else
521                 err = nfs_revalidate_inode(NFS_SERVER(inode), inode);
522         if (!err) {
523                 generic_fillattr(inode, stat);
524                 stat->ino = nfs_compat_user_ino64(NFS_FILEID(inode));
525         }
526 out:
527         return err;
528 }
529
530 /**
531  * nfs_close_context - Common close_context() routine NFSv2/v3
532  * @ctx: pointer to context
533  * @is_sync: is this a synchronous close
534  *
535  * always ensure that the attributes are up to date if we're mounted
536  * with close-to-open semantics
537  */
538 void nfs_close_context(struct nfs_open_context *ctx, int is_sync)
539 {
540         struct inode *inode;
541         struct nfs_server *server;
542
543         if (!(ctx->mode & FMODE_WRITE))
544                 return;
545         if (!is_sync)
546                 return;
547         inode = ctx->path.dentry->d_inode;
548         if (!list_empty(&NFS_I(inode)->open_files))
549                 return;
550         server = NFS_SERVER(inode);
551         if (server->flags & NFS_MOUNT_NOCTO)
552                 return;
553         nfs_revalidate_inode(server, inode);
554 }
555
556 static struct nfs_open_context *alloc_nfs_open_context(struct path *path, struct rpc_cred *cred)
557 {
558         struct nfs_open_context *ctx;
559
560         ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
561         if (ctx != NULL) {
562                 ctx->path = *path;
563                 path_get(&ctx->path);
564                 ctx->cred = get_rpccred(cred);
565                 ctx->state = NULL;
566                 ctx->lockowner = current->files;
567                 ctx->flags = 0;
568                 ctx->error = 0;
569                 ctx->dir_cookie = 0;
570                 atomic_set(&ctx->count, 1);
571         }
572         return ctx;
573 }
574
575 struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx)
576 {
577         if (ctx != NULL)
578                 atomic_inc(&ctx->count);
579         return ctx;
580 }
581
582 static void __put_nfs_open_context(struct nfs_open_context *ctx, int is_sync)
583 {
584         struct inode *inode = ctx->path.dentry->d_inode;
585
586         if (!atomic_dec_and_lock(&ctx->count, &inode->i_lock))
587                 return;
588         list_del(&ctx->list);
589         spin_unlock(&inode->i_lock);
590         NFS_PROTO(inode)->close_context(ctx, is_sync);
591         if (ctx->cred != NULL)
592                 put_rpccred(ctx->cred);
593         path_put(&ctx->path);
594         kfree(ctx);
595 }
596
597 void put_nfs_open_context(struct nfs_open_context *ctx)
598 {
599         __put_nfs_open_context(ctx, 0);
600 }
601
602 static void put_nfs_open_context_sync(struct nfs_open_context *ctx)
603 {
604         __put_nfs_open_context(ctx, 1);
605 }
606
607 /*
608  * Ensure that mmap has a recent RPC credential for use when writing out
609  * shared pages
610  */
611 static void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx)
612 {
613         struct inode *inode = filp->f_path.dentry->d_inode;
614         struct nfs_inode *nfsi = NFS_I(inode);
615
616         filp->private_data = get_nfs_open_context(ctx);
617         spin_lock(&inode->i_lock);
618         list_add(&ctx->list, &nfsi->open_files);
619         spin_unlock(&inode->i_lock);
620 }
621
622 /*
623  * Given an inode, search for an open context with the desired characteristics
624  */
625 struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, fmode_t mode)
626 {
627         struct nfs_inode *nfsi = NFS_I(inode);
628         struct nfs_open_context *pos, *ctx = NULL;
629
630         spin_lock(&inode->i_lock);
631         list_for_each_entry(pos, &nfsi->open_files, list) {
632                 if (cred != NULL && pos->cred != cred)
633                         continue;
634                 if ((pos->mode & mode) == mode) {
635                         ctx = get_nfs_open_context(pos);
636                         break;
637                 }
638         }
639         spin_unlock(&inode->i_lock);
640         return ctx;
641 }
642
643 static void nfs_file_clear_open_context(struct file *filp)
644 {
645         struct inode *inode = filp->f_path.dentry->d_inode;
646         struct nfs_open_context *ctx = nfs_file_open_context(filp);
647
648         if (ctx) {
649                 filp->private_data = NULL;
650                 spin_lock(&inode->i_lock);
651                 list_move_tail(&ctx->list, &NFS_I(inode)->open_files);
652                 spin_unlock(&inode->i_lock);
653                 put_nfs_open_context_sync(ctx);
654         }
655 }
656
657 /*
658  * These allocate and release file read/write context information.
659  */
660 int nfs_open(struct inode *inode, struct file *filp)
661 {
662         struct nfs_open_context *ctx;
663         struct rpc_cred *cred;
664
665         cred = rpc_lookup_cred();
666         if (IS_ERR(cred))
667                 return PTR_ERR(cred);
668         ctx = alloc_nfs_open_context(&filp->f_path, cred);
669         put_rpccred(cred);
670         if (ctx == NULL)
671                 return -ENOMEM;
672         ctx->mode = filp->f_mode;
673         nfs_file_set_open_context(filp, ctx);
674         put_nfs_open_context(ctx);
675         nfs_fscache_set_inode_cookie(inode, filp);
676         return 0;
677 }
678
679 int nfs_release(struct inode *inode, struct file *filp)
680 {
681         nfs_file_clear_open_context(filp);
682         return 0;
683 }
684
685 /*
686  * This function is called whenever some part of NFS notices that
687  * the cached attributes have to be refreshed.
688  */
689 int
690 __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
691 {
692         int              status = -ESTALE;
693         struct nfs_fattr fattr;
694         struct nfs_inode *nfsi = NFS_I(inode);
695
696         dfprintk(PAGECACHE, "NFS: revalidating (%s/%Ld)\n",
697                 inode->i_sb->s_id, (long long)NFS_FILEID(inode));
698
699         if (is_bad_inode(inode))
700                 goto out;
701         if (NFS_STALE(inode))
702                 goto out;
703
704         nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
705         status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), &fattr);
706         if (status != 0) {
707                 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) getattr failed, error=%d\n",
708                          inode->i_sb->s_id,
709                          (long long)NFS_FILEID(inode), status);
710                 if (status == -ESTALE) {
711                         nfs_zap_caches(inode);
712                         if (!S_ISDIR(inode->i_mode))
713                                 set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
714                 }
715                 goto out;
716         }
717
718         status = nfs_refresh_inode(inode, &fattr);
719         if (status) {
720                 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n",
721                          inode->i_sb->s_id,
722                          (long long)NFS_FILEID(inode), status);
723                 goto out;
724         }
725
726         if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
727                 nfs_zap_acl_cache(inode);
728
729         dfprintk(PAGECACHE, "NFS: (%s/%Ld) revalidation complete\n",
730                 inode->i_sb->s_id,
731                 (long long)NFS_FILEID(inode));
732
733  out:
734         return status;
735 }
736
737 int nfs_attribute_timeout(struct inode *inode)
738 {
739         struct nfs_inode *nfsi = NFS_I(inode);
740
741         if (nfs_have_delegation(inode, FMODE_READ))
742                 return 0;
743         return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo);
744 }
745
746 /**
747  * nfs_revalidate_inode - Revalidate the inode attributes
748  * @server - pointer to nfs_server struct
749  * @inode - pointer to inode struct
750  *
751  * Updates inode attribute information by retrieving the data from the server.
752  */
753 int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
754 {
755         if (!(NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATTR)
756                         && !nfs_attribute_timeout(inode))
757                 return NFS_STALE(inode) ? -ESTALE : 0;
758         return __nfs_revalidate_inode(server, inode);
759 }
760
761 static int nfs_invalidate_mapping_nolock(struct inode *inode, struct address_space *mapping)
762 {
763         struct nfs_inode *nfsi = NFS_I(inode);
764         
765         if (mapping->nrpages != 0) {
766                 int ret = invalidate_inode_pages2(mapping);
767                 if (ret < 0)
768                         return ret;
769         }
770         spin_lock(&inode->i_lock);
771         nfsi->cache_validity &= ~NFS_INO_INVALID_DATA;
772         if (S_ISDIR(inode->i_mode))
773                 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
774         spin_unlock(&inode->i_lock);
775         nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE);
776         nfs_fscache_reset_inode_cookie(inode);
777         dfprintk(PAGECACHE, "NFS: (%s/%Ld) data cache invalidated\n",
778                         inode->i_sb->s_id, (long long)NFS_FILEID(inode));
779         return 0;
780 }
781
782 static int nfs_invalidate_mapping(struct inode *inode, struct address_space *mapping)
783 {
784         int ret = 0;
785
786         mutex_lock(&inode->i_mutex);
787         if (NFS_I(inode)->cache_validity & NFS_INO_INVALID_DATA) {
788                 ret = nfs_sync_mapping(mapping);
789                 if (ret == 0)
790                         ret = nfs_invalidate_mapping_nolock(inode, mapping);
791         }
792         mutex_unlock(&inode->i_mutex);
793         return ret;
794 }
795
796 /**
797  * nfs_revalidate_mapping_nolock - Revalidate the pagecache
798  * @inode - pointer to host inode
799  * @mapping - pointer to mapping
800  */
801 int nfs_revalidate_mapping_nolock(struct inode *inode, struct address_space *mapping)
802 {
803         struct nfs_inode *nfsi = NFS_I(inode);
804         int ret = 0;
805
806         if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE)
807                         || nfs_attribute_timeout(inode) || NFS_STALE(inode)) {
808                 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
809                 if (ret < 0)
810                         goto out;
811         }
812         if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
813                 ret = nfs_invalidate_mapping_nolock(inode, mapping);
814 out:
815         return ret;
816 }
817
818 /**
819  * nfs_revalidate_mapping - Revalidate the pagecache
820  * @inode - pointer to host inode
821  * @mapping - pointer to mapping
822  *
823  * This version of the function will take the inode->i_mutex and attempt to
824  * flush out all dirty data if it needs to invalidate the page cache.
825  */
826 int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
827 {
828         struct nfs_inode *nfsi = NFS_I(inode);
829         int ret = 0;
830
831         if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE)
832                         || nfs_attribute_timeout(inode) || NFS_STALE(inode)) {
833                 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
834                 if (ret < 0)
835                         goto out;
836         }
837         if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
838                 ret = nfs_invalidate_mapping(inode, mapping);
839 out:
840         return ret;
841 }
842
843 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
844 {
845         struct nfs_inode *nfsi = NFS_I(inode);
846
847         if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
848                         && (fattr->valid & NFS_ATTR_FATTR_CHANGE)
849                         && nfsi->change_attr == fattr->pre_change_attr) {
850                 nfsi->change_attr = fattr->change_attr;
851                 if (S_ISDIR(inode->i_mode))
852                         nfsi->cache_validity |= NFS_INO_INVALID_DATA;
853         }
854         /* If we have atomic WCC data, we may update some attributes */
855         if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
856                         && (fattr->valid & NFS_ATTR_FATTR_CTIME)
857                         && timespec_equal(&inode->i_ctime, &fattr->pre_ctime))
858                         memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
859
860         if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
861                         && (fattr->valid & NFS_ATTR_FATTR_MTIME)
862                         && timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) {
863                         memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
864                         if (S_ISDIR(inode->i_mode))
865                                 nfsi->cache_validity |= NFS_INO_INVALID_DATA;
866         }
867         if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
868                         && (fattr->valid & NFS_ATTR_FATTR_SIZE)
869                         && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
870                         && nfsi->npages == 0)
871                         i_size_write(inode, nfs_size_to_loff_t(fattr->size));
872 }
873
874 /**
875  * nfs_check_inode_attributes - verify consistency of the inode attribute cache
876  * @inode - pointer to inode
877  * @fattr - updated attributes
878  *
879  * Verifies the attribute cache. If we have just changed the attributes,
880  * so that fattr carries weak cache consistency data, then it may
881  * also update the ctime/mtime/change_attribute.
882  */
883 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
884 {
885         struct nfs_inode *nfsi = NFS_I(inode);
886         loff_t cur_size, new_isize;
887         unsigned long invalid = 0;
888
889
890         /* Has the inode gone and changed behind our back? */
891         if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
892                 return -EIO;
893         if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
894                 return -EIO;
895
896         if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
897                         nfsi->change_attr != fattr->change_attr)
898                 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
899
900         /* Verify a few of the more important attributes */
901         if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec_equal(&inode->i_mtime, &fattr->mtime))
902                 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
903
904         if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
905                 cur_size = i_size_read(inode);
906                 new_isize = nfs_size_to_loff_t(fattr->size);
907                 if (cur_size != new_isize && nfsi->npages == 0)
908                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
909         }
910
911         /* Have any file permissions changed? */
912         if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
913                 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
914         if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && inode->i_uid != fattr->uid)
915                 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
916         if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && inode->i_gid != fattr->gid)
917                 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
918
919         /* Has the link count changed? */
920         if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
921                 invalid |= NFS_INO_INVALID_ATTR;
922
923         if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec_equal(&inode->i_atime, &fattr->atime))
924                 invalid |= NFS_INO_INVALID_ATIME;
925
926         if (invalid != 0)
927                 nfsi->cache_validity |= invalid;
928
929         nfsi->read_cache_jiffies = fattr->time_start;
930         return 0;
931 }
932
933 static int nfs_ctime_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
934 {
935         if (!(fattr->valid & NFS_ATTR_FATTR_CTIME))
936                 return 0;
937         return timespec_compare(&fattr->ctime, &inode->i_ctime) > 0;
938 }
939
940 static int nfs_size_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
941 {
942         if (!(fattr->valid & NFS_ATTR_FATTR_SIZE))
943                 return 0;
944         return nfs_size_to_loff_t(fattr->size) > i_size_read(inode);
945 }
946
947 static atomic_long_t nfs_attr_generation_counter;
948
949 static unsigned long nfs_read_attr_generation_counter(void)
950 {
951         return atomic_long_read(&nfs_attr_generation_counter);
952 }
953
954 unsigned long nfs_inc_attr_generation_counter(void)
955 {
956         return atomic_long_inc_return(&nfs_attr_generation_counter);
957 }
958
959 void nfs_fattr_init(struct nfs_fattr *fattr)
960 {
961         fattr->valid = 0;
962         fattr->time_start = jiffies;
963         fattr->gencount = nfs_inc_attr_generation_counter();
964 }
965
966 /**
967  * nfs_inode_attrs_need_update - check if the inode attributes need updating
968  * @inode - pointer to inode
969  * @fattr - attributes
970  *
971  * Attempt to divine whether or not an RPC call reply carrying stale
972  * attributes got scheduled after another call carrying updated ones.
973  *
974  * To do so, the function first assumes that a more recent ctime means
975  * that the attributes in fattr are newer, however it also attempt to
976  * catch the case where ctime either didn't change, or went backwards
977  * (if someone reset the clock on the server) by looking at whether
978  * or not this RPC call was started after the inode was last updated.
979  * Note also the check for wraparound of 'attr_gencount'
980  *
981  * The function returns 'true' if it thinks the attributes in 'fattr' are
982  * more recent than the ones cached in the inode.
983  *
984  */
985 static int nfs_inode_attrs_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
986 {
987         const struct nfs_inode *nfsi = NFS_I(inode);
988
989         return ((long)fattr->gencount - (long)nfsi->attr_gencount) > 0 ||
990                 nfs_ctime_need_update(inode, fattr) ||
991                 nfs_size_need_update(inode, fattr) ||
992                 ((long)nfsi->attr_gencount - (long)nfs_read_attr_generation_counter() > 0);
993 }
994
995 static int nfs_refresh_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
996 {
997         if (nfs_inode_attrs_need_update(inode, fattr))
998                 return nfs_update_inode(inode, fattr);
999         return nfs_check_inode_attributes(inode, fattr);
1000 }
1001
1002 /**
1003  * nfs_refresh_inode - try to update the inode attribute cache
1004  * @inode - pointer to inode
1005  * @fattr - updated attributes
1006  *
1007  * Check that an RPC call that returned attributes has not overlapped with
1008  * other recent updates of the inode metadata, then decide whether it is
1009  * safe to do a full update of the inode attributes, or whether just to
1010  * call nfs_check_inode_attributes.
1011  */
1012 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1013 {
1014         int status;
1015
1016         if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1017                 return 0;
1018         spin_lock(&inode->i_lock);
1019         status = nfs_refresh_inode_locked(inode, fattr);
1020         spin_unlock(&inode->i_lock);
1021
1022         return status;
1023 }
1024
1025 static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1026 {
1027         struct nfs_inode *nfsi = NFS_I(inode);
1028
1029         nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
1030         if (S_ISDIR(inode->i_mode))
1031                 nfsi->cache_validity |= NFS_INO_INVALID_DATA;
1032         if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1033                 return 0;
1034         return nfs_refresh_inode_locked(inode, fattr);
1035 }
1036
1037 /**
1038  * nfs_post_op_update_inode - try to update the inode attribute cache
1039  * @inode - pointer to inode
1040  * @fattr - updated attributes
1041  *
1042  * After an operation that has changed the inode metadata, mark the
1043  * attribute cache as being invalid, then try to update it.
1044  *
1045  * NB: if the server didn't return any post op attributes, this
1046  * function will force the retrieval of attributes before the next
1047  * NFS request.  Thus it should be used only for operations that
1048  * are expected to change one or more attributes, to avoid
1049  * unnecessary NFS requests and trips through nfs_update_inode().
1050  */
1051 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1052 {
1053         int status;
1054
1055         spin_lock(&inode->i_lock);
1056         status = nfs_post_op_update_inode_locked(inode, fattr);
1057         spin_unlock(&inode->i_lock);
1058         return status;
1059 }
1060
1061 /**
1062  * nfs_post_op_update_inode_force_wcc - try to update the inode attribute cache
1063  * @inode - pointer to inode
1064  * @fattr - updated attributes
1065  *
1066  * After an operation that has changed the inode metadata, mark the
1067  * attribute cache as being invalid, then try to update it. Fake up
1068  * weak cache consistency data, if none exist.
1069  *
1070  * This function is mainly designed to be used by the ->write_done() functions.
1071  */
1072 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr)
1073 {
1074         int status;
1075
1076         spin_lock(&inode->i_lock);
1077         /* Don't do a WCC update if these attributes are already stale */
1078         if ((fattr->valid & NFS_ATTR_FATTR) == 0 ||
1079                         !nfs_inode_attrs_need_update(inode, fattr)) {
1080                 fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE
1081                                 | NFS_ATTR_FATTR_PRESIZE
1082                                 | NFS_ATTR_FATTR_PREMTIME
1083                                 | NFS_ATTR_FATTR_PRECTIME);
1084                 goto out_noforce;
1085         }
1086         if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1087                         (fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) {
1088                 fattr->pre_change_attr = NFS_I(inode)->change_attr;
1089                 fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
1090         }
1091         if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 &&
1092                         (fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) {
1093                 memcpy(&fattr->pre_ctime, &inode->i_ctime, sizeof(fattr->pre_ctime));
1094                 fattr->valid |= NFS_ATTR_FATTR_PRECTIME;
1095         }
1096         if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 &&
1097                         (fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) {
1098                 memcpy(&fattr->pre_mtime, &inode->i_mtime, sizeof(fattr->pre_mtime));
1099                 fattr->valid |= NFS_ATTR_FATTR_PREMTIME;
1100         }
1101         if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 &&
1102                         (fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) {
1103                 fattr->pre_size = i_size_read(inode);
1104                 fattr->valid |= NFS_ATTR_FATTR_PRESIZE;
1105         }
1106 out_noforce:
1107         status = nfs_post_op_update_inode_locked(inode, fattr);
1108         spin_unlock(&inode->i_lock);
1109         return status;
1110 }
1111
1112 /*
1113  * Many nfs protocol calls return the new file attributes after
1114  * an operation.  Here we update the inode to reflect the state
1115  * of the server's inode.
1116  *
1117  * This is a bit tricky because we have to make sure all dirty pages
1118  * have been sent off to the server before calling invalidate_inode_pages.
1119  * To make sure no other process adds more write requests while we try
1120  * our best to flush them, we make them sleep during the attribute refresh.
1121  *
1122  * A very similar scenario holds for the dir cache.
1123  */
1124 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1125 {
1126         struct nfs_server *server;
1127         struct nfs_inode *nfsi = NFS_I(inode);
1128         loff_t cur_isize, new_isize;
1129         unsigned long invalid = 0;
1130         unsigned long now = jiffies;
1131         unsigned long save_cache_validity;
1132
1133         dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n",
1134                         __func__, inode->i_sb->s_id, inode->i_ino,
1135                         atomic_read(&inode->i_count), fattr->valid);
1136
1137         if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
1138                 goto out_fileid;
1139
1140         /*
1141          * Make sure the inode's type hasn't changed.
1142          */
1143         if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
1144                 goto out_changed;
1145
1146         server = NFS_SERVER(inode);
1147         /* Update the fsid? */
1148         if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) &&
1149                         !nfs_fsid_equal(&server->fsid, &fattr->fsid) &&
1150                         !test_bit(NFS_INO_MOUNTPOINT, &nfsi->flags))
1151                 server->fsid = fattr->fsid;
1152
1153         /*
1154          * Update the read time so we don't revalidate too often.
1155          */
1156         nfsi->read_cache_jiffies = fattr->time_start;
1157
1158         save_cache_validity = nfsi->cache_validity;
1159         nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR
1160                         | NFS_INO_INVALID_ATIME
1161                         | NFS_INO_REVAL_FORCED
1162                         | NFS_INO_REVAL_PAGECACHE);
1163
1164         /* Do atomic weak cache consistency updates */
1165         nfs_wcc_update_inode(inode, fattr);
1166
1167         /* More cache consistency checks */
1168         if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
1169                 if (nfsi->change_attr != fattr->change_attr) {
1170                         dprintk("NFS: change_attr change on server for file %s/%ld\n",
1171                                         inode->i_sb->s_id, inode->i_ino);
1172                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1173                         if (S_ISDIR(inode->i_mode))
1174                                 nfs_force_lookup_revalidate(inode);
1175                         nfsi->change_attr = fattr->change_attr;
1176                 }
1177         } else if (server->caps & NFS_CAP_CHANGE_ATTR)
1178                 invalid |= save_cache_validity;
1179
1180         if (fattr->valid & NFS_ATTR_FATTR_MTIME) {
1181                 /* NFSv2/v3: Check if the mtime agrees */
1182                 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) {
1183                         dprintk("NFS: mtime change on server for file %s/%ld\n",
1184                                         inode->i_sb->s_id, inode->i_ino);
1185                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
1186                         if (S_ISDIR(inode->i_mode))
1187                                 nfs_force_lookup_revalidate(inode);
1188                         memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
1189                 }
1190         } else if (server->caps & NFS_CAP_MTIME)
1191                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1192                                 | NFS_INO_INVALID_DATA
1193                                 | NFS_INO_REVAL_PAGECACHE
1194                                 | NFS_INO_REVAL_FORCED);
1195
1196         if (fattr->valid & NFS_ATTR_FATTR_CTIME) {
1197                 /* If ctime has changed we should definitely clear access+acl caches */
1198                 if (!timespec_equal(&inode->i_ctime, &fattr->ctime)) {
1199                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1200                         /* and probably clear data for a directory too as utimes can cause
1201                          * havoc with our cache.
1202                          */
1203                         if (S_ISDIR(inode->i_mode)) {
1204                                 invalid |= NFS_INO_INVALID_DATA;
1205                                 nfs_force_lookup_revalidate(inode);
1206                         }
1207                         memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
1208                 }
1209         } else if (server->caps & NFS_CAP_CTIME)
1210                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1211                                 | NFS_INO_INVALID_ACCESS
1212                                 | NFS_INO_INVALID_ACL
1213                                 | NFS_INO_REVAL_FORCED);
1214
1215         /* Check if our cached file size is stale */
1216         if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1217                 new_isize = nfs_size_to_loff_t(fattr->size);
1218                 cur_isize = i_size_read(inode);
1219                 if (new_isize != cur_isize) {
1220                         /* Do we perhaps have any outstanding writes, or has
1221                          * the file grown beyond our last write? */
1222                         if (nfsi->npages == 0 || new_isize > cur_isize) {
1223                                 i_size_write(inode, new_isize);
1224                                 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
1225                         }
1226                         dprintk("NFS: isize change on server for file %s/%ld\n",
1227                                         inode->i_sb->s_id, inode->i_ino);
1228                 }
1229         } else
1230                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1231                                 | NFS_INO_REVAL_PAGECACHE
1232                                 | NFS_INO_REVAL_FORCED);
1233
1234
1235         if (fattr->valid & NFS_ATTR_FATTR_ATIME)
1236                 memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
1237         else if (server->caps & NFS_CAP_ATIME)
1238                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATIME
1239                                 | NFS_INO_REVAL_FORCED);
1240
1241         if (fattr->valid & NFS_ATTR_FATTR_MODE) {
1242                 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) {
1243                         umode_t newmode = inode->i_mode & S_IFMT;
1244                         newmode |= fattr->mode & S_IALLUGO;
1245                         inode->i_mode = newmode;
1246                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1247                 }
1248         } else if (server->caps & NFS_CAP_MODE)
1249                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1250                                 | NFS_INO_INVALID_ACCESS
1251                                 | NFS_INO_INVALID_ACL
1252                                 | NFS_INO_REVAL_FORCED);
1253
1254         if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
1255                 if (inode->i_uid != fattr->uid) {
1256                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1257                         inode->i_uid = fattr->uid;
1258                 }
1259         } else if (server->caps & NFS_CAP_OWNER)
1260                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1261                                 | NFS_INO_INVALID_ACCESS
1262                                 | NFS_INO_INVALID_ACL
1263                                 | NFS_INO_REVAL_FORCED);
1264
1265         if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
1266                 if (inode->i_gid != fattr->gid) {
1267                         invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1268                         inode->i_gid = fattr->gid;
1269                 }
1270         } else if (server->caps & NFS_CAP_OWNER_GROUP)
1271                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1272                                 | NFS_INO_INVALID_ACCESS
1273                                 | NFS_INO_INVALID_ACL
1274                                 | NFS_INO_REVAL_FORCED);
1275
1276         if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
1277                 if (inode->i_nlink != fattr->nlink) {
1278                         invalid |= NFS_INO_INVALID_ATTR;
1279                         if (S_ISDIR(inode->i_mode))
1280                                 invalid |= NFS_INO_INVALID_DATA;
1281                         inode->i_nlink = fattr->nlink;
1282                 }
1283         } else if (server->caps & NFS_CAP_NLINK)
1284                 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
1285                                 | NFS_INO_REVAL_FORCED);
1286
1287         if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
1288                 /*
1289                  * report the blocks in 512byte units
1290                  */
1291                 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
1292         }
1293         if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
1294                 inode->i_blocks = fattr->du.nfs2.blocks;
1295
1296         /* Update attrtimeo value if we're out of the unstable period */
1297         if (invalid & NFS_INO_INVALID_ATTR) {
1298                 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
1299                 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
1300                 nfsi->attrtimeo_timestamp = now;
1301                 nfsi->attr_gencount = nfs_inc_attr_generation_counter();
1302         } else {
1303                 if (!time_in_range_open(now, nfsi->attrtimeo_timestamp, nfsi->attrtimeo_timestamp + nfsi->attrtimeo)) {
1304                         if ((nfsi->attrtimeo <<= 1) > NFS_MAXATTRTIMEO(inode))
1305                                 nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode);
1306                         nfsi->attrtimeo_timestamp = now;
1307                 }
1308         }
1309         invalid &= ~NFS_INO_INVALID_ATTR;
1310         /* Don't invalidate the data if we were to blame */
1311         if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)
1312                                 || S_ISLNK(inode->i_mode)))
1313                 invalid &= ~NFS_INO_INVALID_DATA;
1314         if (!nfs_have_delegation(inode, FMODE_READ) ||
1315                         (save_cache_validity & NFS_INO_REVAL_FORCED))
1316                 nfsi->cache_validity |= invalid;
1317
1318         return 0;
1319  out_changed:
1320         /*
1321          * Big trouble! The inode has become a different object.
1322          */
1323         printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n",
1324                         __func__, inode->i_ino, inode->i_mode, fattr->mode);
1325  out_err:
1326         /*
1327          * No need to worry about unhashing the dentry, as the
1328          * lookup validation will know that the inode is bad.
1329          * (But we fall through to invalidate the caches.)
1330          */
1331         nfs_invalidate_inode(inode);
1332         return -ESTALE;
1333
1334  out_fileid:
1335         printk(KERN_ERR "NFS: server %s error: fileid changed\n"
1336                 "fsid %s: expected fileid 0x%Lx, got 0x%Lx\n",
1337                 NFS_SERVER(inode)->nfs_client->cl_hostname, inode->i_sb->s_id,
1338                 (long long)nfsi->fileid, (long long)fattr->fileid);
1339         goto out_err;
1340 }
1341
1342
1343 #ifdef CONFIG_NFS_V4
1344
1345 /*
1346  * Clean out any remaining NFSv4 state that might be left over due
1347  * to open() calls that passed nfs_atomic_lookup, but failed to call
1348  * nfs_open().
1349  */
1350 void nfs4_clear_inode(struct inode *inode)
1351 {
1352         /* If we are holding a delegation, return it! */
1353         nfs_inode_return_delegation_noreclaim(inode);
1354         /* First call standard NFS clear_inode() code */
1355         nfs_clear_inode(inode);
1356 }
1357 #endif
1358
1359 struct inode *nfs_alloc_inode(struct super_block *sb)
1360 {
1361         struct nfs_inode *nfsi;
1362         nfsi = (struct nfs_inode *)kmem_cache_alloc(nfs_inode_cachep, GFP_KERNEL);
1363         if (!nfsi)
1364                 return NULL;
1365         nfsi->flags = 0UL;
1366         nfsi->cache_validity = 0UL;
1367 #ifdef CONFIG_NFS_V3_ACL
1368         nfsi->acl_access = ERR_PTR(-EAGAIN);
1369         nfsi->acl_default = ERR_PTR(-EAGAIN);
1370 #endif
1371 #ifdef CONFIG_NFS_V4
1372         nfsi->nfs4_acl = NULL;
1373 #endif /* CONFIG_NFS_V4 */
1374         return &nfsi->vfs_inode;
1375 }
1376
1377 void nfs_destroy_inode(struct inode *inode)
1378 {
1379         kmem_cache_free(nfs_inode_cachep, NFS_I(inode));
1380 }
1381
1382 static inline void nfs4_init_once(struct nfs_inode *nfsi)
1383 {
1384 #ifdef CONFIG_NFS_V4
1385         INIT_LIST_HEAD(&nfsi->open_states);
1386         nfsi->delegation = NULL;
1387         nfsi->delegation_state = 0;
1388         init_rwsem(&nfsi->rwsem);
1389 #endif
1390 }
1391
1392 static void init_once(void *foo)
1393 {
1394         struct nfs_inode *nfsi = (struct nfs_inode *) foo;
1395
1396         inode_init_once(&nfsi->vfs_inode);
1397         INIT_LIST_HEAD(&nfsi->open_files);
1398         INIT_LIST_HEAD(&nfsi->access_cache_entry_lru);
1399         INIT_LIST_HEAD(&nfsi->access_cache_inode_lru);
1400         INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC);
1401         nfsi->npages = 0;
1402         nfsi->ncommit = 0;
1403         atomic_set(&nfsi->silly_count, 1);
1404         INIT_HLIST_HEAD(&nfsi->silly_list);
1405         init_waitqueue_head(&nfsi->waitqueue);
1406         nfs4_init_once(nfsi);
1407 }
1408
1409 static int __init nfs_init_inodecache(void)
1410 {
1411         nfs_inode_cachep = kmem_cache_create("nfs_inode_cache",
1412                                              sizeof(struct nfs_inode),
1413                                              0, (SLAB_RECLAIM_ACCOUNT|
1414                                                 SLAB_MEM_SPREAD),
1415                                              init_once);
1416         if (nfs_inode_cachep == NULL)
1417                 return -ENOMEM;
1418
1419         return 0;
1420 }
1421
1422 static void nfs_destroy_inodecache(void)
1423 {
1424         kmem_cache_destroy(nfs_inode_cachep);
1425 }
1426
1427 struct workqueue_struct *nfsiod_workqueue;
1428
1429 /*
1430  * start up the nfsiod workqueue
1431  */
1432 static int nfsiod_start(void)
1433 {
1434         struct workqueue_struct *wq;
1435         dprintk("RPC:       creating workqueue nfsiod\n");
1436         wq = create_singlethread_workqueue("nfsiod");
1437         if (wq == NULL)
1438                 return -ENOMEM;
1439         nfsiod_workqueue = wq;
1440         return 0;
1441 }
1442
1443 /*
1444  * Destroy the nfsiod workqueue
1445  */
1446 static void nfsiod_stop(void)
1447 {
1448         struct workqueue_struct *wq;
1449
1450         wq = nfsiod_workqueue;
1451         if (wq == NULL)
1452                 return;
1453         nfsiod_workqueue = NULL;
1454         destroy_workqueue(wq);
1455 }
1456
1457 /*
1458  * Initialize NFS
1459  */
1460 static int __init init_nfs_fs(void)
1461 {
1462         int err;
1463
1464         err = nfs_dns_resolver_init();
1465         if (err < 0)
1466                 goto out8;
1467
1468         err = nfs_fscache_register();
1469         if (err < 0)
1470                 goto out7;
1471
1472         err = nfsiod_start();
1473         if (err)
1474                 goto out6;
1475
1476         err = nfs_fs_proc_init();
1477         if (err)
1478                 goto out5;
1479
1480         err = nfs_init_nfspagecache();
1481         if (err)
1482                 goto out4;
1483
1484         err = nfs_init_inodecache();
1485         if (err)
1486                 goto out3;
1487
1488         err = nfs_init_readpagecache();
1489         if (err)
1490                 goto out2;
1491
1492         err = nfs_init_writepagecache();
1493         if (err)
1494                 goto out1;
1495
1496         err = nfs_init_directcache();
1497         if (err)
1498                 goto out0;
1499
1500 #ifdef CONFIG_PROC_FS
1501         rpc_proc_register(&nfs_rpcstat);
1502 #endif
1503         if ((err = register_nfs_fs()) != 0)
1504                 goto out;
1505         return 0;
1506 out:
1507 #ifdef CONFIG_PROC_FS
1508         rpc_proc_unregister("nfs");
1509 #endif
1510         nfs_destroy_directcache();
1511 out0:
1512         nfs_destroy_writepagecache();
1513 out1:
1514         nfs_destroy_readpagecache();
1515 out2:
1516         nfs_destroy_inodecache();
1517 out3:
1518         nfs_destroy_nfspagecache();
1519 out4:
1520         nfs_fs_proc_exit();
1521 out5:
1522         nfsiod_stop();
1523 out6:
1524         nfs_fscache_unregister();
1525 out7:
1526         nfs_dns_resolver_destroy();
1527 out8:
1528         return err;
1529 }
1530
1531 static void __exit exit_nfs_fs(void)
1532 {
1533         nfs_destroy_directcache();
1534         nfs_destroy_writepagecache();
1535         nfs_destroy_readpagecache();
1536         nfs_destroy_inodecache();
1537         nfs_destroy_nfspagecache();
1538         nfs_fscache_unregister();
1539         nfs_dns_resolver_destroy();
1540 #ifdef CONFIG_PROC_FS
1541         rpc_proc_unregister("nfs");
1542 #endif
1543         unregister_nfs_fs();
1544         nfs_fs_proc_exit();
1545         nfsiod_stop();
1546 }
1547
1548 /* Not quite true; I just maintain it */
1549 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
1550 MODULE_LICENSE("GPL");
1551 module_param(enable_ino64, bool, 0644);
1552
1553 module_init(init_nfs_fs)
1554 module_exit(exit_nfs_fs)