Lines Matching refs:inode
65 static int nfs_update_inode(struct inode *, struct nfs_fattr *);
109 int nfs_drop_inode(struct inode *inode) in nfs_drop_inode() argument
111 return NFS_STALE(inode) || generic_drop_inode(inode); in nfs_drop_inode()
115 void nfs_clear_inode(struct inode *inode) in nfs_clear_inode() argument
120 WARN_ON_ONCE(nfs_have_writebacks(inode)); in nfs_clear_inode()
121 WARN_ON_ONCE(!list_empty(&NFS_I(inode)->open_files)); in nfs_clear_inode()
122 nfs_zap_acl_cache(inode); in nfs_clear_inode()
123 nfs_access_zap_cache(inode); in nfs_clear_inode()
124 nfs_fscache_clear_inode(inode); in nfs_clear_inode()
128 void nfs_evict_inode(struct inode *inode) in nfs_evict_inode() argument
130 truncate_inode_pages_final(&inode->i_data); in nfs_evict_inode()
131 clear_inode(inode); in nfs_evict_inode()
132 nfs_clear_inode(inode); in nfs_evict_inode()
135 int nfs_sync_inode(struct inode *inode) in nfs_sync_inode() argument
137 inode_dio_wait(inode); in nfs_sync_inode()
138 return nfs_wb_all(inode); in nfs_sync_inode()
157 static int nfs_attribute_timeout(struct inode *inode) in nfs_attribute_timeout() argument
159 struct nfs_inode *nfsi = NFS_I(inode); in nfs_attribute_timeout()
164 static bool nfs_check_cache_flags_invalid(struct inode *inode, in nfs_check_cache_flags_invalid() argument
167 unsigned long cache_validity = READ_ONCE(NFS_I(inode)->cache_validity); in nfs_check_cache_flags_invalid()
172 bool nfs_check_cache_invalid(struct inode *inode, unsigned long flags) in nfs_check_cache_invalid() argument
174 if (nfs_check_cache_flags_invalid(inode, flags)) in nfs_check_cache_invalid()
176 return nfs_attribute_cache_expired(inode); in nfs_check_cache_invalid()
192 void nfs_set_cache_invalid(struct inode *inode, unsigned long flags) in nfs_set_cache_invalid() argument
194 struct nfs_inode *nfsi = NFS_I(inode); in nfs_set_cache_invalid()
196 if (nfs_have_delegated_attributes(inode)) { in nfs_set_cache_invalid()
208 nfs_fscache_invalidate(inode, 0); in nfs_set_cache_invalid()
212 if (inode->i_mapping->nrpages == 0) in nfs_set_cache_invalid()
218 if (inode->i_mapping->nrpages == 0 || in nfs_set_cache_invalid()
222 trace_nfs_set_cache_invalid(inode, 0); in nfs_set_cache_invalid()
229 static void nfs_zap_caches_locked(struct inode *inode) in nfs_zap_caches_locked() argument
231 struct nfs_inode *nfsi = NFS_I(inode); in nfs_zap_caches_locked()
232 int mode = inode->i_mode; in nfs_zap_caches_locked()
234 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE); in nfs_zap_caches_locked()
236 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); in nfs_zap_caches_locked()
240 nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR | in nfs_zap_caches_locked()
246 nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR | in nfs_zap_caches_locked()
253 void nfs_zap_caches(struct inode *inode) in nfs_zap_caches() argument
255 spin_lock(&inode->i_lock); in nfs_zap_caches()
256 nfs_zap_caches_locked(inode); in nfs_zap_caches()
257 spin_unlock(&inode->i_lock); in nfs_zap_caches()
260 void nfs_zap_mapping(struct inode *inode, struct address_space *mapping) in nfs_zap_mapping() argument
263 spin_lock(&inode->i_lock); in nfs_zap_mapping()
264 nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA); in nfs_zap_mapping()
265 spin_unlock(&inode->i_lock); in nfs_zap_mapping()
269 void nfs_zap_acl_cache(struct inode *inode) in nfs_zap_acl_cache() argument
271 void (*clear_acl_cache)(struct inode *); in nfs_zap_acl_cache()
273 clear_acl_cache = NFS_PROTO(inode)->clear_acl_cache; in nfs_zap_acl_cache()
275 clear_acl_cache(inode); in nfs_zap_acl_cache()
276 spin_lock(&inode->i_lock); in nfs_zap_acl_cache()
277 NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ACL; in nfs_zap_acl_cache()
278 spin_unlock(&inode->i_lock); in nfs_zap_acl_cache()
282 void nfs_invalidate_atime(struct inode *inode) in nfs_invalidate_atime() argument
284 if (nfs_have_delegated_atime(inode)) in nfs_invalidate_atime()
286 spin_lock(&inode->i_lock); in nfs_invalidate_atime()
287 nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME); in nfs_invalidate_atime()
288 spin_unlock(&inode->i_lock); in nfs_invalidate_atime()
296 static void nfs_set_inode_stale_locked(struct inode *inode) in nfs_set_inode_stale_locked() argument
298 set_bit(NFS_INO_STALE, &NFS_I(inode)->flags); in nfs_set_inode_stale_locked()
299 nfs_zap_caches_locked(inode); in nfs_set_inode_stale_locked()
300 trace_nfs_set_inode_stale(inode); in nfs_set_inode_stale_locked()
303 void nfs_set_inode_stale(struct inode *inode) in nfs_set_inode_stale() argument
305 spin_lock(&inode->i_lock); in nfs_set_inode_stale()
306 nfs_set_inode_stale_locked(inode); in nfs_set_inode_stale()
307 spin_unlock(&inode->i_lock); in nfs_set_inode_stale()
322 nfs_find_actor(struct inode *inode, void *opaque) in nfs_find_actor() argument
328 if (NFS_FILEID(inode) != fattr->fileid) in nfs_find_actor()
330 if (inode_wrong_type(inode, fattr->mode)) in nfs_find_actor()
332 if (nfs_compare_fh(NFS_FH(inode), fh)) in nfs_find_actor()
334 if (is_bad_inode(inode) || NFS_STALE(inode)) in nfs_find_actor()
340 nfs_init_locked(struct inode *inode, void *opaque) in nfs_init_locked() argument
345 set_nfs_fileid(inode, fattr->fileid); in nfs_init_locked()
346 inode->i_mode = fattr->mode; in nfs_init_locked()
347 nfs_copy_fh(NFS_FH(inode), desc->fh); in nfs_init_locked()
352 static void nfs_clear_label_invalid(struct inode *inode) in nfs_clear_label_invalid() argument
354 spin_lock(&inode->i_lock); in nfs_clear_label_invalid()
355 NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_LABEL; in nfs_clear_label_invalid()
356 spin_unlock(&inode->i_lock); in nfs_clear_label_invalid()
359 void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr) in nfs_setsecurity() argument
366 if ((fattr->valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL) && inode->i_security) { in nfs_setsecurity()
367 error = security_inode_notifysecctx(inode, fattr->label->label, in nfs_setsecurity()
375 nfs_clear_label_invalid(inode); in nfs_setsecurity()
401 void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr) in nfs_setsecurity() argument
408 struct inode *
415 struct inode *inode; in nfs_ilookup() local
423 inode = ilookup5(sb, hash, nfs_find_actor, &desc); in nfs_ilookup()
425 dprintk("%s: returning %p\n", __func__, inode); in nfs_ilookup()
426 return inode; in nfs_ilookup()
450 struct inode *
457 struct inode *inode = ERR_PTR(-ENOENT); in nfs_fhget() local
472 inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc); in nfs_fhget()
473 if (inode == NULL) { in nfs_fhget()
474 inode = ERR_PTR(-ENOMEM); in nfs_fhget()
478 if (inode->i_state & I_NEW) { in nfs_fhget()
479 struct nfs_inode *nfsi = NFS_I(inode); in nfs_fhget()
484 inode->i_ino = hash; in nfs_fhget()
487 inode->i_flags |= S_NOATIME|S_NOCMTIME; in nfs_fhget()
488 inode->i_mode = fattr->mode; in nfs_fhget()
492 nfs_set_cache_invalid(inode, NFS_INO_INVALID_MODE); in nfs_fhget()
496 inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->file_inode_ops; in nfs_fhget()
497 if (S_ISREG(inode->i_mode)) { in nfs_fhget()
498 inode->i_fop = NFS_SB(sb)->nfs_client->rpc_ops->file_ops; in nfs_fhget()
499 inode->i_data.a_ops = &nfs_file_aops; in nfs_fhget()
501 mapping_set_large_folios(inode->i_mapping); in nfs_fhget()
502 } else if (S_ISDIR(inode->i_mode)) { in nfs_fhget()
503 inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->dir_inode_ops; in nfs_fhget()
504 inode->i_fop = &nfs_dir_operations; in nfs_fhget()
505 inode->i_data.a_ops = &nfs_dir_aops; in nfs_fhget()
511 inode->i_op = &nfs_referral_inode_operations; in nfs_fhget()
513 inode->i_op = &nfs_mountpoint_inode_operations; in nfs_fhget()
514 inode->i_fop = NULL; in nfs_fhget()
515 inode->i_flags |= S_AUTOMOUNT; in nfs_fhget()
517 } else if (S_ISLNK(inode->i_mode)) { in nfs_fhget()
518 inode->i_op = &nfs_symlink_inode_operations; in nfs_fhget()
519 inode_nohighmem(inode); in nfs_fhget()
521 init_special_inode(inode, inode->i_mode, fattr->rdev); in nfs_fhget()
523 inode_set_atime(inode, 0, 0); in nfs_fhget()
524 inode_set_mtime(inode, 0, 0); in nfs_fhget()
525 inode_set_ctime(inode, 0, 0); in nfs_fhget()
527 inode_set_iversion_raw(inode, 0); in nfs_fhget()
528 inode->i_size = 0; in nfs_fhget()
529 clear_nlink(inode); in nfs_fhget()
530 inode->i_uid = make_kuid(&init_user_ns, -2); in nfs_fhget()
531 inode->i_gid = make_kgid(&init_user_ns, -2); in nfs_fhget()
532 inode->i_blocks = 0; in nfs_fhget()
539 inode_set_atime_to_ts(inode, fattr->atime); in nfs_fhget()
541 nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME); in nfs_fhget()
543 inode_set_mtime_to_ts(inode, fattr->mtime); in nfs_fhget()
545 nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME); in nfs_fhget()
547 inode_set_ctime_to_ts(inode, fattr->ctime); in nfs_fhget()
549 nfs_set_cache_invalid(inode, NFS_INO_INVALID_CTIME); in nfs_fhget()
553 nfs_set_cache_invalid(inode, NFS_INO_INVALID_BTIME); in nfs_fhget()
555 inode_set_iversion_raw(inode, fattr->change_attr); in nfs_fhget()
557 nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE); in nfs_fhget()
559 inode->i_size = nfs_size_to_loff_t(fattr->size); in nfs_fhget()
561 nfs_set_cache_invalid(inode, NFS_INO_INVALID_SIZE); in nfs_fhget()
563 set_nlink(inode, fattr->nlink); in nfs_fhget()
565 nfs_set_cache_invalid(inode, NFS_INO_INVALID_NLINK); in nfs_fhget()
567 set_nlink(inode, 1); in nfs_fhget()
569 inode->i_uid = fattr->uid; in nfs_fhget()
571 nfs_set_cache_invalid(inode, NFS_INO_INVALID_OTHER); in nfs_fhget()
573 inode->i_gid = fattr->gid; in nfs_fhget()
575 nfs_set_cache_invalid(inode, NFS_INO_INVALID_OTHER); in nfs_fhget()
577 inode->i_blocks = fattr->du.nfs2.blocks; in nfs_fhget()
580 nfs_set_cache_invalid(inode, NFS_INO_INVALID_BLOCKS); in nfs_fhget()
585 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); in nfs_fhget()
588 nfs_set_cache_invalid(inode, NFS_INO_INVALID_BLOCKS); in nfs_fhget()
590 nfs_setsecurity(inode, fattr); in nfs_fhget()
592 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); in nfs_fhget()
596 nfs_fscache_init_inode(inode); in nfs_fhget()
598 unlock_new_inode(inode); in nfs_fhget()
600 int err = nfs_refresh_inode(inode, fattr); in nfs_fhget()
602 iput(inode); in nfs_fhget()
603 inode = ERR_PTR(err); in nfs_fhget()
608 inode->i_sb->s_id, in nfs_fhget()
609 (unsigned long long)NFS_FILEID(inode), in nfs_fhget()
611 atomic_read(&inode->i_count)); in nfs_fhget()
614 return inode; in nfs_fhget()
617 dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode)); in nfs_fhget()
623 nfs_fattr_fixup_delegated(struct inode *inode, struct nfs_fattr *fattr) in nfs_fattr_fixup_delegated() argument
625 unsigned long cache_validity = NFS_I(inode)->cache_validity; in nfs_fattr_fixup_delegated()
627 if (nfs_have_delegated_mtime(inode)) { in nfs_fattr_fixup_delegated()
638 } else if (nfs_have_delegated_atime(inode)) { in nfs_fattr_fixup_delegated()
644 static void nfs_set_timestamps_to_ts(struct inode *inode, struct iattr *attr) in nfs_set_timestamps_to_ts() argument
649 struct timespec64 ctime = inode_get_ctime(inode); in nfs_set_timestamps_to_ts()
650 struct timespec64 mtime = inode_get_mtime(inode); in nfs_set_timestamps_to_ts()
654 now = inode_set_ctime_current(inode); in nfs_set_timestamps_to_ts()
658 inode_set_mtime_to_ts(inode, attr->ia_mtime); in nfs_set_timestamps_to_ts()
662 inode_maybe_inc_iversion(inode, updated); in nfs_set_timestamps_to_ts()
666 inode_set_atime_to_ts(inode, attr->ia_atime); in nfs_set_timestamps_to_ts()
669 NFS_I(inode)->cache_validity &= ~cache_flags; in nfs_set_timestamps_to_ts()
672 static void nfs_update_timestamps(struct inode *inode, unsigned int ia_valid) in nfs_update_timestamps() argument
685 inode_update_timestamps(inode, time_flags); in nfs_update_timestamps()
686 NFS_I(inode)->cache_validity &= ~cache_flags; in nfs_update_timestamps()
689 void nfs_update_delegated_atime(struct inode *inode) in nfs_update_delegated_atime() argument
691 spin_lock(&inode->i_lock); in nfs_update_delegated_atime()
692 if (nfs_have_delegated_atime(inode)) in nfs_update_delegated_atime()
693 nfs_update_timestamps(inode, ATTR_ATIME); in nfs_update_delegated_atime()
694 spin_unlock(&inode->i_lock); in nfs_update_delegated_atime()
697 void nfs_update_delegated_mtime_locked(struct inode *inode) in nfs_update_delegated_mtime_locked() argument
699 if (nfs_have_delegated_mtime(inode)) in nfs_update_delegated_mtime_locked()
700 nfs_update_timestamps(inode, ATTR_MTIME); in nfs_update_delegated_mtime_locked()
703 void nfs_update_delegated_mtime(struct inode *inode) in nfs_update_delegated_mtime() argument
705 spin_lock(&inode->i_lock); in nfs_update_delegated_mtime()
706 nfs_update_delegated_mtime_locked(inode); in nfs_update_delegated_mtime()
707 spin_unlock(&inode->i_lock); in nfs_update_delegated_mtime()
717 struct inode *inode = d_inode(dentry); in nfs_setattr() local
721 nfs_inc_stats(inode, NFSIOS_VFSSETATTR); in nfs_setattr()
728 BUG_ON(!S_ISREG(inode->i_mode)); in nfs_setattr()
730 error = inode_newsize_ok(inode, attr->ia_size); in nfs_setattr()
734 if (attr->ia_size == i_size_read(inode)) in nfs_setattr()
738 if (nfs_have_delegated_mtime(inode) && attr->ia_valid & ATTR_MTIME) { in nfs_setattr()
739 spin_lock(&inode->i_lock); in nfs_setattr()
741 nfs_set_timestamps_to_ts(inode, attr); in nfs_setattr()
745 nfs_update_timestamps(inode, attr->ia_valid); in nfs_setattr()
748 spin_unlock(&inode->i_lock); in nfs_setattr()
749 } else if (nfs_have_delegated_atime(inode) && in nfs_setattr()
753 spin_lock(&inode->i_lock); in nfs_setattr()
754 nfs_set_timestamps_to_ts(inode, attr); in nfs_setattr()
755 spin_unlock(&inode->i_lock); in nfs_setattr()
758 nfs_update_delegated_atime(inode); in nfs_setattr()
767 trace_nfs_setattr_enter(inode); in nfs_setattr()
770 if (S_ISREG(inode->i_mode)) in nfs_setattr()
771 nfs_sync_inode(inode); in nfs_setattr()
773 fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode)); in nfs_setattr()
779 error = NFS_PROTO(inode)->setattr(dentry, fattr, attr); in nfs_setattr()
781 error = nfs_refresh_inode(inode, fattr); in nfs_setattr()
784 trace_nfs_setattr_exit(inode, error); in nfs_setattr()
799 static int nfs_vmtruncate(struct inode * inode, loff_t offset) in nfs_vmtruncate() argument
803 err = inode_newsize_ok(inode, offset); in nfs_vmtruncate()
807 trace_nfs_size_truncate(inode, offset); in nfs_vmtruncate()
808 i_size_write(inode, offset); in nfs_vmtruncate()
811 NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_DATA; in nfs_vmtruncate()
812 nfs_ooo_clear(NFS_I(inode)); in nfs_vmtruncate()
814 NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_SIZE; in nfs_vmtruncate()
816 spin_unlock(&inode->i_lock); in nfs_vmtruncate()
817 truncate_pagecache(inode, offset); in nfs_vmtruncate()
818 nfs_update_delegated_mtime_locked(inode); in nfs_vmtruncate()
819 spin_lock(&inode->i_lock); in nfs_vmtruncate()
833 void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr, in nfs_setattr_update_inode() argument
839 spin_lock(&inode->i_lock); in nfs_setattr_update_inode()
840 NFS_I(inode)->attr_gencount = fattr->gencount; in nfs_setattr_update_inode()
842 if (!nfs_have_delegated_mtime(inode)) in nfs_setattr_update_inode()
843 nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME); in nfs_setattr_update_inode()
844 nfs_set_cache_invalid(inode, NFS_INO_INVALID_BLOCKS); in nfs_setattr_update_inode()
845 nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC); in nfs_setattr_update_inode()
846 nfs_vmtruncate(inode, attr->ia_size); in nfs_setattr_update_inode()
849 NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_CTIME; in nfs_setattr_update_inode()
851 inode->i_mode & S_ISUID) in nfs_setattr_update_inode()
852 inode->i_mode &= ~S_ISUID; in nfs_setattr_update_inode()
853 if (setattr_should_drop_sgid(&nop_mnt_idmap, inode)) in nfs_setattr_update_inode()
854 inode->i_mode &= ~S_ISGID; in nfs_setattr_update_inode()
857 mode |= inode->i_mode & ~S_IALLUGO; in nfs_setattr_update_inode()
858 inode->i_mode = mode; in nfs_setattr_update_inode()
861 inode->i_uid = attr->ia_uid; in nfs_setattr_update_inode()
863 inode->i_gid = attr->ia_gid; in nfs_setattr_update_inode()
865 inode_set_ctime_to_ts(inode, fattr->ctime); in nfs_setattr_update_inode()
867 nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE in nfs_setattr_update_inode()
869 nfs_set_cache_invalid(inode, NFS_INO_INVALID_ACCESS in nfs_setattr_update_inode()
873 NFS_I(inode)->cache_validity &= ~(NFS_INO_INVALID_ATIME in nfs_setattr_update_inode()
876 inode_set_atime_to_ts(inode, fattr->atime); in nfs_setattr_update_inode()
878 inode_set_atime_to_ts(inode, attr->ia_atime); in nfs_setattr_update_inode()
880 nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME); in nfs_setattr_update_inode()
883 inode_set_ctime_to_ts(inode, fattr->ctime); in nfs_setattr_update_inode()
885 nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE in nfs_setattr_update_inode()
889 NFS_I(inode)->cache_validity &= ~(NFS_INO_INVALID_MTIME in nfs_setattr_update_inode()
892 inode_set_mtime_to_ts(inode, fattr->mtime); in nfs_setattr_update_inode()
894 inode_set_mtime_to_ts(inode, attr->ia_mtime); in nfs_setattr_update_inode()
896 nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME); in nfs_setattr_update_inode()
899 inode_set_ctime_to_ts(inode, fattr->ctime); in nfs_setattr_update_inode()
901 nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE in nfs_setattr_update_inode()
905 nfs_update_inode(inode, fattr); in nfs_setattr_update_inode()
906 spin_unlock(&inode->i_lock); in nfs_setattr_update_inode()
914 static bool nfs_getattr_readdirplus_enable(const struct inode *inode) in nfs_getattr_readdirplus_enable() argument
916 return nfs_server_capable(inode, NFS_CAP_READDIRPLUS) && in nfs_getattr_readdirplus_enable()
917 !nfs_have_writebacks(inode) && NFS_MAXATTRTIMEO(inode) > 5 * HZ; in nfs_getattr_readdirplus_enable()
938 static u32 nfs_get_valid_attrmask(struct inode *inode) in nfs_get_valid_attrmask() argument
940 u64 fattr_valid = NFS_SERVER(inode)->fattr_valid; in nfs_get_valid_attrmask()
941 unsigned long cache_validity = READ_ONCE(NFS_I(inode)->cache_validity); in nfs_get_valid_attrmask()
971 struct inode *inode = d_inode(path->dentry); in nfs_getattr() local
972 struct nfs_server *server = NFS_SERVER(inode); in nfs_getattr()
978 bool readdirplus_enabled = nfs_getattr_readdirplus_enable(inode); in nfs_getattr()
980 trace_nfs_getattr_enter(inode); in nfs_getattr()
998 S_ISREG(inode->i_mode)) { in nfs_getattr()
999 if (nfs_have_delegated_mtime(inode)) in nfs_getattr()
1000 filemap_fdatawrite(inode->i_mapping); in nfs_getattr()
1002 filemap_write_and_wait(inode->i_mapping); in nfs_getattr()
1015 ((path->mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))) in nfs_getattr()
1026 do_update |= force_sync || nfs_attribute_cache_expired(inode); in nfs_getattr()
1027 cache_validity = READ_ONCE(NFS_I(inode)->cache_validity); in nfs_getattr()
1051 err = __nfs_revalidate_inode(server, inode); in nfs_getattr()
1058 stat->result_mask = nfs_get_valid_attrmask(inode) | request_mask; in nfs_getattr()
1060 generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat); in nfs_getattr()
1061 stat->ino = nfs_compat_user_ino64(NFS_FILEID(inode)); in nfs_getattr()
1062 stat->change_cookie = inode_peek_iversion_raw(inode); in nfs_getattr()
1066 if (S_ISDIR(inode->i_mode)) in nfs_getattr()
1067 stat->blksize = NFS_SERVER(inode)->dtsize; in nfs_getattr()
1068 stat->btime = NFS_I(inode)->btime; in nfs_getattr()
1070 trace_nfs_getattr_exit(inode, err); in nfs_getattr()
1099 struct inode *inode = d_inode(ctx->dentry); in nfs_get_lock_context() local
1109 spin_lock(&inode->i_lock); in nfs_get_lock_context()
1121 spin_unlock(&inode->i_lock); in nfs_get_lock_context()
1131 struct inode *inode = d_inode(ctx->dentry); in nfs_put_lock_context() local
1133 if (!refcount_dec_and_lock(&l_ctx->count, &inode->i_lock)) in nfs_put_lock_context()
1136 spin_unlock(&inode->i_lock); in nfs_put_lock_context()
1154 struct inode *inode; in nfs_close_context() local
1160 inode = d_inode(ctx->dentry); in nfs_close_context()
1161 if (nfs_have_read_or_write_delegation(inode)) in nfs_close_context()
1163 nfsi = NFS_I(inode); in nfs_close_context()
1164 if (inode->i_mapping->nrpages == 0) in nfs_close_context()
1170 if (NFS_SERVER(inode)->flags & NFS_MOUNT_NOCTO) in nfs_close_context()
1172 nfs_revalidate_inode(inode, in nfs_close_context()
1218 struct inode *inode = d_inode(ctx->dentry); in __put_nfs_open_context() local
1224 spin_lock(&inode->i_lock); in __put_nfs_open_context()
1226 spin_unlock(&inode->i_lock); in __put_nfs_open_context()
1228 if (inode != NULL) in __put_nfs_open_context()
1229 NFS_PROTO(inode)->close_context(ctx, is_sync); in __put_nfs_open_context()
1256 struct inode *inode = d_inode(ctx->dentry); in nfs_inode_attach_open_context() local
1257 struct nfs_inode *nfsi = NFS_I(inode); in nfs_inode_attach_open_context()
1259 spin_lock(&inode->i_lock); in nfs_inode_attach_open_context()
1262 nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA | in nfs_inode_attach_open_context()
1265 spin_unlock(&inode->i_lock); in nfs_inode_attach_open_context()
1281 struct nfs_open_context *nfs_find_open_context(struct inode *inode, const struct cred *cred, fmode_… in nfs_find_open_context() argument
1283 struct nfs_inode *nfsi = NFS_I(inode); in nfs_find_open_context()
1307 struct inode *inode = d_inode(ctx->dentry); in nfs_file_clear_open_context() local
1315 invalidate_inode_pages2(inode->i_mapping); in nfs_file_clear_open_context()
1324 int nfs_open(struct inode *inode, struct file *filp) in nfs_open() argument
1334 nfs_fscache_open_file(inode, filp); in nfs_open()
1343 __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) in __nfs_revalidate_inode() argument
1347 struct nfs_inode *nfsi = NFS_I(inode); in __nfs_revalidate_inode()
1350 inode->i_sb->s_id, (unsigned long long)NFS_FILEID(inode)); in __nfs_revalidate_inode()
1352 trace_nfs_revalidate_inode_enter(inode); in __nfs_revalidate_inode()
1354 if (is_bad_inode(inode)) in __nfs_revalidate_inode()
1356 if (NFS_STALE(inode)) in __nfs_revalidate_inode()
1360 if (S_ISREG(inode->i_mode)) { in __nfs_revalidate_inode()
1361 status = pnfs_sync_inode(inode, false); in __nfs_revalidate_inode()
1367 fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode)); in __nfs_revalidate_inode()
1371 nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE); in __nfs_revalidate_inode()
1373 status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, inode); in __nfs_revalidate_inode()
1376 inode->i_sb->s_id, in __nfs_revalidate_inode()
1377 (unsigned long long)NFS_FILEID(inode), status); in __nfs_revalidate_inode()
1385 if (!S_ISDIR(inode->i_mode)) in __nfs_revalidate_inode()
1386 nfs_set_inode_stale(inode); in __nfs_revalidate_inode()
1388 nfs_zap_caches(inode); in __nfs_revalidate_inode()
1393 status = nfs_refresh_inode(inode, fattr); in __nfs_revalidate_inode()
1396 inode->i_sb->s_id, in __nfs_revalidate_inode()
1397 (unsigned long long)NFS_FILEID(inode), status); in __nfs_revalidate_inode()
1402 nfs_zap_acl_cache(inode); in __nfs_revalidate_inode()
1404 nfs_setsecurity(inode, fattr); in __nfs_revalidate_inode()
1407 inode->i_sb->s_id, in __nfs_revalidate_inode()
1408 (unsigned long long)NFS_FILEID(inode)); in __nfs_revalidate_inode()
1412 trace_nfs_revalidate_inode_exit(inode, status); in __nfs_revalidate_inode()
1416 int nfs_attribute_cache_expired(struct inode *inode) in nfs_attribute_cache_expired() argument
1418 if (nfs_have_delegated_attributes(inode)) in nfs_attribute_cache_expired()
1420 return nfs_attribute_timeout(inode); in nfs_attribute_cache_expired()
1430 int nfs_revalidate_inode(struct inode *inode, unsigned long flags) in nfs_revalidate_inode() argument
1432 if (!nfs_check_cache_invalid(inode, flags)) in nfs_revalidate_inode()
1433 return NFS_STALE(inode) ? -ESTALE : 0; in nfs_revalidate_inode()
1434 return __nfs_revalidate_inode(NFS_SERVER(inode), inode); in nfs_revalidate_inode()
1438 static int nfs_invalidate_mapping(struct inode *inode, struct address_space *mapping) in nfs_invalidate_mapping() argument
1442 nfs_fscache_invalidate(inode, 0); in nfs_invalidate_mapping()
1444 if (S_ISREG(inode->i_mode)) { in nfs_invalidate_mapping()
1453 nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE); in nfs_invalidate_mapping()
1456 inode->i_sb->s_id, in nfs_invalidate_mapping()
1457 (unsigned long long)NFS_FILEID(inode)); in nfs_invalidate_mapping()
1469 struct inode *inode = mapping->host; in nfs_clear_invalid_mapping() local
1470 struct nfs_inode *nfsi = NFS_I(inode); in nfs_clear_invalid_mapping()
1499 spin_lock(&inode->i_lock); in nfs_clear_invalid_mapping()
1501 spin_unlock(&inode->i_lock); in nfs_clear_invalid_mapping()
1506 spin_unlock(&inode->i_lock); in nfs_clear_invalid_mapping()
1514 spin_unlock(&inode->i_lock); in nfs_clear_invalid_mapping()
1515 trace_nfs_invalidate_mapping_enter(inode); in nfs_clear_invalid_mapping()
1516 ret = nfs_invalidate_mapping(inode, mapping); in nfs_clear_invalid_mapping()
1517 trace_nfs_invalidate_mapping_exit(inode, ret); in nfs_clear_invalid_mapping()
1526 bool nfs_mapping_need_revalidate_inode(struct inode *inode) in nfs_mapping_need_revalidate_inode() argument
1528 return nfs_check_cache_invalid(inode, NFS_INO_INVALID_CHANGE) || in nfs_mapping_need_revalidate_inode()
1529 NFS_STALE(inode); in nfs_mapping_need_revalidate_inode()
1532 int nfs_revalidate_mapping_rcu(struct inode *inode) in nfs_revalidate_mapping_rcu() argument
1534 struct nfs_inode *nfsi = NFS_I(inode); in nfs_revalidate_mapping_rcu()
1538 if (IS_SWAPFILE(inode)) in nfs_revalidate_mapping_rcu()
1540 if (nfs_mapping_need_revalidate_inode(inode)) { in nfs_revalidate_mapping_rcu()
1544 spin_lock(&inode->i_lock); in nfs_revalidate_mapping_rcu()
1548 spin_unlock(&inode->i_lock); in nfs_revalidate_mapping_rcu()
1558 int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping) in nfs_revalidate_mapping() argument
1561 if (IS_SWAPFILE(inode)) in nfs_revalidate_mapping()
1564 if (nfs_mapping_need_revalidate_inode(inode)) { in nfs_revalidate_mapping()
1565 int ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode); in nfs_revalidate_mapping()
1575 struct inode *inode = &nfsi->vfs_inode; in nfs_file_has_writers() local
1577 if (!S_ISREG(inode->i_mode)) in nfs_file_has_writers()
1581 return inode_is_open_for_write(inode); in nfs_file_has_writers()
1589 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr) in nfs_wcc_update_inode() argument
1595 && inode_eq_iversion_raw(inode, fattr->pre_change_attr)) { in nfs_wcc_update_inode()
1596 inode_set_iversion_raw(inode, fattr->change_attr); in nfs_wcc_update_inode()
1597 if (S_ISDIR(inode->i_mode)) in nfs_wcc_update_inode()
1598 nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA); in nfs_wcc_update_inode()
1599 else if (nfs_server_capable(inode, NFS_CAP_XATTR)) in nfs_wcc_update_inode()
1600 nfs_set_cache_invalid(inode, NFS_INO_INVALID_XATTR); in nfs_wcc_update_inode()
1603 ts = inode_get_ctime(inode); in nfs_wcc_update_inode()
1607 inode_set_ctime_to_ts(inode, fattr->ctime); in nfs_wcc_update_inode()
1610 ts = inode_get_mtime(inode); in nfs_wcc_update_inode()
1614 inode_set_mtime_to_ts(inode, fattr->mtime); in nfs_wcc_update_inode()
1618 && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size) in nfs_wcc_update_inode()
1619 && !nfs_have_writebacks(inode)) { in nfs_wcc_update_inode()
1620 trace_nfs_size_wcc(inode, fattr->size); in nfs_wcc_update_inode()
1621 i_size_write(inode, nfs_size_to_loff_t(fattr->size)); in nfs_wcc_update_inode()
1634 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr) in nfs_check_inode_attributes() argument
1636 struct nfs_inode *nfsi = NFS_I(inode); in nfs_check_inode_attributes()
1641 if (nfs_have_delegated_attributes(inode)) in nfs_check_inode_attributes()
1656 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && inode_wrong_type(inode, fattr->mode)) in nfs_check_inode_attributes()
1662 …if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && !inode_eq_iversion_raw(inode, fattr->change_att… in nfs_check_inode_attributes()
1665 ts = inode_get_mtime(inode); in nfs_check_inode_attributes()
1669 ts = inode_get_ctime(inode); in nfs_check_inode_attributes()
1674 cur_size = i_size_read(inode); in nfs_check_inode_attributes()
1682 …if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUG… in nfs_check_inode_attributes()
1684 if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && !uid_eq(inode->i_uid, fattr->uid)) in nfs_check_inode_attributes()
1686 if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && !gid_eq(inode->i_gid, fattr->gid)) in nfs_check_inode_attributes()
1690 if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink) in nfs_check_inode_attributes()
1693 ts = inode_get_atime(inode); in nfs_check_inode_attributes()
1698 nfs_set_cache_invalid(inode, invalid); in nfs_check_inode_attributes()
1862 const struct inode *inode) in nfs_inode_attrs_cmp_generic() argument
1864 unsigned long attr_gencount = NFS_I(inode)->attr_gencount; in nfs_inode_attrs_cmp_generic()
1887 const struct inode *inode) in nfs_inode_attrs_cmp_monotonic() argument
1889 s64 diff = fattr->change_attr - inode_peek_iversion_raw(inode); in nfs_inode_attrs_cmp_monotonic()
1911 const struct inode *inode) in nfs_inode_attrs_cmp_strict_monotonic() argument
1913 return nfs_inode_attrs_cmp_monotonic(fattr, inode) > 0 ? 1 : -1; in nfs_inode_attrs_cmp_strict_monotonic()
1927 const struct inode *inode) in nfs_inode_attrs_cmp() argument
1929 if (nfs_inode_attrs_cmp_generic(fattr, inode) > 0) in nfs_inode_attrs_cmp()
1931 switch (NFS_SERVER(inode)->change_attr_type) { in nfs_inode_attrs_cmp()
1937 return nfs_inode_attrs_cmp_monotonic(fattr, inode); in nfs_inode_attrs_cmp()
1941 return nfs_inode_attrs_cmp_strict_monotonic(fattr, inode); in nfs_inode_attrs_cmp()
1957 const struct inode *inode) in nfs_inode_finish_partial_attr_update() argument
1964 unsigned long cache_validity = NFS_I(inode)->cache_validity; in nfs_inode_finish_partial_attr_update()
1965 enum nfs4_change_attr_type ctype = NFS_SERVER(inode)->change_attr_type; in nfs_inode_finish_partial_attr_update()
1971 nfs_inode_attrs_cmp_monotonic(fattr, inode) == 0) in nfs_inode_finish_partial_attr_update()
2036 static int nfs_refresh_inode_locked(struct inode *inode, in nfs_refresh_inode_locked() argument
2039 int attr_cmp = nfs_inode_attrs_cmp(fattr, inode); in nfs_refresh_inode_locked()
2042 trace_nfs_refresh_inode_enter(inode); in nfs_refresh_inode_locked()
2044 if (attr_cmp > 0 || nfs_inode_finish_partial_attr_update(fattr, inode)) in nfs_refresh_inode_locked()
2045 ret = nfs_update_inode(inode, fattr); in nfs_refresh_inode_locked()
2047 nfs_ooo_record(NFS_I(inode), fattr); in nfs_refresh_inode_locked()
2050 ret = nfs_check_inode_attributes(inode, fattr); in nfs_refresh_inode_locked()
2053 trace_nfs_refresh_inode_exit(inode, ret); in nfs_refresh_inode_locked()
2067 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) in nfs_refresh_inode() argument
2073 spin_lock(&inode->i_lock); in nfs_refresh_inode()
2074 status = nfs_refresh_inode_locked(inode, fattr); in nfs_refresh_inode()
2075 spin_unlock(&inode->i_lock); in nfs_refresh_inode()
2081 static int nfs_post_op_update_inode_locked(struct inode *inode, in nfs_post_op_update_inode_locked() argument
2084 if (S_ISDIR(inode->i_mode)) in nfs_post_op_update_inode_locked()
2086 nfs_set_cache_invalid(inode, invalid); in nfs_post_op_update_inode_locked()
2089 return nfs_refresh_inode_locked(inode, fattr); in nfs_post_op_update_inode_locked()
2106 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr) in nfs_post_op_update_inode() argument
2110 spin_lock(&inode->i_lock); in nfs_post_op_update_inode()
2112 status = nfs_post_op_update_inode_locked(inode, fattr, in nfs_post_op_update_inode()
2116 spin_unlock(&inode->i_lock); in nfs_post_op_update_inode()
2133 int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr) in nfs_post_op_update_inode_force_wcc_locked() argument
2135 int attr_cmp = nfs_inode_attrs_cmp(fattr, inode); in nfs_post_op_update_inode_force_wcc_locked()
2143 nfs_ooo_record(NFS_I(inode), fattr); in nfs_post_op_update_inode_force_wcc_locked()
2152 fattr->pre_change_attr = inode_peek_iversion_raw(inode); in nfs_post_op_update_inode_force_wcc_locked()
2157 fattr->pre_ctime = inode_get_ctime(inode); in nfs_post_op_update_inode_force_wcc_locked()
2162 fattr->pre_mtime = inode_get_mtime(inode); in nfs_post_op_update_inode_force_wcc_locked()
2167 fattr->pre_size = i_size_read(inode); in nfs_post_op_update_inode_force_wcc_locked()
2171 status = nfs_post_op_update_inode_locked(inode, fattr, in nfs_post_op_update_inode_force_wcc_locked()
2190 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr) in nfs_post_op_update_inode_force_wcc() argument
2194 spin_lock(&inode->i_lock); in nfs_post_op_update_inode_force_wcc()
2196 status = nfs_post_op_update_inode_force_wcc_locked(inode, fattr); in nfs_post_op_update_inode_force_wcc()
2197 spin_unlock(&inode->i_lock); in nfs_post_op_update_inode_force_wcc()
2215 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) in nfs_update_inode() argument
2217 struct nfs_server *server = NFS_SERVER(inode); in nfs_update_inode()
2218 struct nfs_inode *nfsi = NFS_I(inode); in nfs_update_inode()
2230 __func__, inode->i_sb->s_id, inode->i_ino, in nfs_update_inode()
2231 nfs_display_fhandle_hash(NFS_FH(inode)), in nfs_update_inode()
2232 atomic_read(&inode->i_count), fattr->valid); in nfs_update_inode()
2246 NFS_SERVER(inode)->nfs_client->cl_hostname, in nfs_update_inode()
2247 inode->i_sb->s_id, (long long)nfsi->fileid, in nfs_update_inode()
2255 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && inode_wrong_type(inode, fattr->mode)) { in nfs_update_inode()
2260 __func__, inode->i_ino, inode->i_mode, fattr->mode); in nfs_update_inode()
2265 if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) && in nfs_update_inode()
2267 !IS_AUTOMOUNT(inode)) in nfs_update_inode()
2271 have_delegation = nfs_have_delegated_attributes(inode); in nfs_update_inode()
2279 nfs_fattr_fixup_delegated(inode, fattr); in nfs_update_inode()
2288 nfs_wcc_update_inode(inode, fattr); in nfs_update_inode()
2290 if (pnfs_layoutcommit_outstanding(inode)) { in nfs_update_inode()
2302 nfsi->ooo->gap[0].end == inode_peek_iversion_raw(inode)) { in nfs_update_inode()
2306 inode_set_iversion_raw(inode, nfsi->ooo->gap[0].start); in nfs_update_inode()
2310 if (!inode_eq_iversion_raw(inode, fattr->change_attr)) { in nfs_update_inode()
2326 if (S_ISDIR(inode->i_mode)) in nfs_update_inode()
2327 nfs_force_lookup_revalidate(inode); in nfs_update_inode()
2330 inode->i_sb->s_id, in nfs_update_inode()
2331 inode->i_ino); in nfs_update_inode()
2334 nfs_ooo_merge(nfsi, inode_peek_iversion_raw(inode), in nfs_update_inode()
2337 inode_set_iversion_raw(inode, fattr->change_attr); in nfs_update_inode()
2348 inode_set_mtime_to_ts(inode, fattr->mtime); in nfs_update_inode()
2354 inode_set_ctime_to_ts(inode, fattr->ctime); in nfs_update_inode()
2368 cur_isize = i_size_read(inode); in nfs_update_inode()
2372 if (!nfs_have_writebacks(inode) || new_isize > cur_isize) { in nfs_update_inode()
2373 trace_nfs_size_update(inode, new_isize); in nfs_update_inode()
2374 i_size_write(inode, new_isize); in nfs_update_inode()
2390 inode_set_atime_to_ts(inode, fattr->atime); in nfs_update_inode()
2396 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) { in nfs_update_inode()
2397 umode_t newmode = inode->i_mode & S_IFMT; in nfs_update_inode()
2399 inode->i_mode = newmode; in nfs_update_inode()
2408 if (!uid_eq(inode->i_uid, fattr->uid)) { in nfs_update_inode()
2411 inode->i_uid = fattr->uid; in nfs_update_inode()
2418 if (!gid_eq(inode->i_gid, fattr->gid)) { in nfs_update_inode()
2421 inode->i_gid = fattr->gid; in nfs_update_inode()
2428 if (inode->i_nlink != fattr->nlink) in nfs_update_inode()
2429 set_nlink(inode, fattr->nlink); in nfs_update_inode()
2438 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); in nfs_update_inode()
2444 inode->i_blocks = fattr->du.nfs2.blocks; in nfs_update_inode()
2451 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE); in nfs_update_inode()
2452 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); in nfs_update_inode()
2461 if (nfsi->attrtimeo > NFS_MAXATTRTIMEO(inode)) in nfs_update_inode()
2462 nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode); in nfs_update_inode()
2472 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) in nfs_update_inode()
2473 || S_ISLNK(inode->i_mode))) in nfs_update_inode()
2475 nfs_set_cache_invalid(inode, invalid); in nfs_update_inode()
2484 nfs_set_inode_stale_locked(inode); in nfs_update_inode()
2488 struct inode *nfs_alloc_inode(struct super_block *sb) in nfs_alloc_inode()
2509 void nfs_free_inode(struct inode *inode) in nfs_free_inode() argument
2511 kfree(NFS_I(inode)->ooo); in nfs_free_inode()
2512 kmem_cache_free(nfs_inode_cachep, NFS_I(inode)); in nfs_free_inode()