Lines Matching refs:delegation

33 static void __nfs_free_delegation(struct nfs_delegation *delegation)  in __nfs_free_delegation()  argument
35 put_cred(delegation->cred); in __nfs_free_delegation()
36 delegation->cred = NULL; in __nfs_free_delegation()
37 kfree_rcu(delegation, rcu); in __nfs_free_delegation()
40 static void nfs_mark_delegation_revoked(struct nfs_delegation *delegation) in nfs_mark_delegation_revoked() argument
42 if (!test_and_set_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) { in nfs_mark_delegation_revoked()
43 delegation->stateid.type = NFS4_INVALID_STATEID_TYPE; in nfs_mark_delegation_revoked()
45 if (!test_bit(NFS_DELEGATION_RETURNING, &delegation->flags)) in nfs_mark_delegation_revoked()
46 nfs_clear_verifier_delegated(delegation->inode); in nfs_mark_delegation_revoked()
50 static struct nfs_delegation *nfs_get_delegation(struct nfs_delegation *delegation) in nfs_get_delegation() argument
52 refcount_inc(&delegation->refcount); in nfs_get_delegation()
53 return delegation; in nfs_get_delegation()
56 static void nfs_put_delegation(struct nfs_delegation *delegation) in nfs_put_delegation() argument
58 if (refcount_dec_and_test(&delegation->refcount)) in nfs_put_delegation()
59 __nfs_free_delegation(delegation); in nfs_put_delegation()
62 static void nfs_free_delegation(struct nfs_delegation *delegation) in nfs_free_delegation() argument
64 nfs_mark_delegation_revoked(delegation); in nfs_free_delegation()
65 nfs_put_delegation(delegation); in nfs_free_delegation()
73 void nfs_mark_delegation_referenced(struct nfs_delegation *delegation) in nfs_mark_delegation_referenced() argument
75 set_bit(NFS_DELEGATION_REFERENCED, &delegation->flags); in nfs_mark_delegation_referenced()
79 struct nfs_delegation *delegation) in nfs_mark_return_delegation() argument
81 set_bit(NFS_DELEGATION_RETURN, &delegation->flags); in nfs_mark_return_delegation()
85 static bool nfs4_is_valid_delegation(const struct nfs_delegation *delegation, in nfs4_is_valid_delegation() argument
88 if (delegation != NULL && (delegation->type & type) == type && in nfs4_is_valid_delegation()
89 !test_bit(NFS_DELEGATION_REVOKED, &delegation->flags) && in nfs4_is_valid_delegation()
90 !test_bit(NFS_DELEGATION_RETURNING, &delegation->flags)) in nfs4_is_valid_delegation()
97 struct nfs_delegation *delegation; in nfs4_get_valid_delegation() local
99 delegation = rcu_dereference(NFS_I(inode)->delegation); in nfs4_get_valid_delegation()
100 if (nfs4_is_valid_delegation(delegation, 0)) in nfs4_get_valid_delegation()
101 return delegation; in nfs4_get_valid_delegation()
108 struct nfs_delegation *delegation; in nfs4_do_check_delegation() local
113 delegation = rcu_dereference(NFS_I(inode)->delegation); in nfs4_do_check_delegation()
114 if (nfs4_is_valid_delegation(delegation, type)) { in nfs4_do_check_delegation()
116 nfs_mark_delegation_referenced(delegation); in nfs4_do_check_delegation()
119 !test_bit(NFS_DELEGATION_DELEGTIME, &delegation->flags)) in nfs4_do_check_delegation()
234 struct nfs_delegation *delegation; in nfs_inode_reclaim_delegation() local
238 delegation = rcu_dereference(NFS_I(inode)->delegation); in nfs_inode_reclaim_delegation()
239 if (delegation != NULL) { in nfs_inode_reclaim_delegation()
240 spin_lock(&delegation->lock); in nfs_inode_reclaim_delegation()
241 nfs4_stateid_copy(&delegation->stateid, stateid); in nfs_inode_reclaim_delegation()
242 delegation->type = type; in nfs_inode_reclaim_delegation()
243 delegation->pagemod_limit = pagemod_limit; in nfs_inode_reclaim_delegation()
244 oldcred = delegation->cred; in nfs_inode_reclaim_delegation()
245 delegation->cred = get_cred(cred); in nfs_inode_reclaim_delegation()
249 set_bit(NFS_DELEGATION_DELEGTIME, &delegation->flags); in nfs_inode_reclaim_delegation()
252 clear_bit(NFS_DELEGATION_DELEGTIME, &delegation->flags); in nfs_inode_reclaim_delegation()
254 clear_bit(NFS_DELEGATION_NEED_RECLAIM, &delegation->flags); in nfs_inode_reclaim_delegation()
256 &delegation->flags)) in nfs_inode_reclaim_delegation()
258 spin_unlock(&delegation->lock); in nfs_inode_reclaim_delegation()
270 struct nfs_delegation *delegation, in nfs_do_return_delegation() argument
276 if (!test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) { in nfs_do_return_delegation()
277 spin_lock(&delegation->lock); in nfs_do_return_delegation()
278 cred = get_cred(delegation->cred); in nfs_do_return_delegation()
279 spin_unlock(&delegation->lock); in nfs_do_return_delegation()
280 res = nfs4_proc_delegreturn(inode, cred, &delegation->stateid, in nfs_do_return_delegation()
281 delegation, issync); in nfs_do_return_delegation()
287 static struct inode *nfs_delegation_grab_inode(struct nfs_delegation *delegation) in nfs_delegation_grab_inode() argument
291 spin_lock(&delegation->lock); in nfs_delegation_grab_inode()
292 if (delegation->inode != NULL) in nfs_delegation_grab_inode()
293 inode = igrab(delegation->inode); in nfs_delegation_grab_inode()
295 set_bit(NFS_DELEGATION_INODE_FREEING, &delegation->flags); in nfs_delegation_grab_inode()
296 spin_unlock(&delegation->lock); in nfs_delegation_grab_inode()
304 struct nfs_delegation *delegation = rcu_dereference(nfsi->delegation); in nfs_start_delegation_return_locked() local
306 if (delegation == NULL) in nfs_start_delegation_return_locked()
308 spin_lock(&delegation->lock); in nfs_start_delegation_return_locked()
309 if (!test_and_set_bit(NFS_DELEGATION_RETURNING, &delegation->flags)) { in nfs_start_delegation_return_locked()
310 clear_bit(NFS_DELEGATION_RETURN_DELAYED, &delegation->flags); in nfs_start_delegation_return_locked()
312 ret = nfs_get_delegation(delegation); in nfs_start_delegation_return_locked()
314 spin_unlock(&delegation->lock); in nfs_start_delegation_return_locked()
324 struct nfs_delegation *delegation; in nfs_start_delegation_return() local
327 delegation = nfs_start_delegation_return_locked(nfsi); in nfs_start_delegation_return()
329 return delegation; in nfs_start_delegation_return()
332 static void nfs_abort_delegation_return(struct nfs_delegation *delegation, in nfs_abort_delegation_return() argument
336 spin_lock(&delegation->lock); in nfs_abort_delegation_return()
337 clear_bit(NFS_DELEGATION_RETURNING, &delegation->flags); in nfs_abort_delegation_return()
339 set_bit(NFS_DELEGATION_RETURN_DELAYED, &delegation->flags); in nfs_abort_delegation_return()
342 spin_unlock(&delegation->lock); in nfs_abort_delegation_return()
347 struct nfs_delegation *delegation, in nfs_detach_delegation_locked() argument
351 rcu_dereference_protected(nfsi->delegation, in nfs_detach_delegation_locked()
354 if (deleg_cur == NULL || delegation != deleg_cur) in nfs_detach_delegation_locked()
357 spin_lock(&delegation->lock); in nfs_detach_delegation_locked()
358 if (!delegation->inode) { in nfs_detach_delegation_locked()
359 spin_unlock(&delegation->lock); in nfs_detach_delegation_locked()
362 list_del_rcu(&delegation->super_list); in nfs_detach_delegation_locked()
363 delegation->inode = NULL; in nfs_detach_delegation_locked()
364 rcu_assign_pointer(nfsi->delegation, NULL); in nfs_detach_delegation_locked()
365 spin_unlock(&delegation->lock); in nfs_detach_delegation_locked()
366 return delegation; in nfs_detach_delegation_locked()
370 struct nfs_delegation *delegation, in nfs_detach_delegation() argument
376 delegation = nfs_detach_delegation_locked(nfsi, delegation, clp); in nfs_detach_delegation()
378 return delegation; in nfs_detach_delegation()
386 struct nfs_delegation *delegation; in nfs_inode_detach_delegation() local
389 delegation = rcu_dereference(nfsi->delegation); in nfs_inode_detach_delegation()
390 if (delegation != NULL) in nfs_inode_detach_delegation()
391 delegation = nfs_detach_delegation(nfsi, delegation, server); in nfs_inode_detach_delegation()
393 return delegation; in nfs_inode_detach_delegation()
397 nfs_update_delegation_cred(struct nfs_delegation *delegation, in nfs_update_delegation_cred() argument
402 if (cred_fscmp(delegation->cred, cred) != 0) { in nfs_update_delegation_cred()
403 old = xchg(&delegation->cred, get_cred(cred)); in nfs_update_delegation_cred()
409 nfs_update_inplace_delegation(struct nfs_delegation *delegation, in nfs_update_inplace_delegation() argument
412 if (nfs4_stateid_is_newer(&update->stateid, &delegation->stateid)) { in nfs_update_inplace_delegation()
413 delegation->stateid.seqid = update->stateid.seqid; in nfs_update_inplace_delegation()
415 delegation->type = update->type; in nfs_update_inplace_delegation()
416 delegation->pagemod_limit = update->pagemod_limit; in nfs_update_inplace_delegation()
417 if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) { in nfs_update_inplace_delegation()
418 delegation->change_attr = update->change_attr; in nfs_update_inplace_delegation()
419 nfs_update_delegation_cred(delegation, update->cred); in nfs_update_inplace_delegation()
421 clear_bit(NFS_DELEGATION_REVOKED, &delegation->flags); in nfs_update_inplace_delegation()
445 struct nfs_delegation *delegation, *old_delegation; in nfs_inode_set_delegation() local
449 delegation = kmalloc(sizeof(*delegation), GFP_KERNEL_ACCOUNT); in nfs_inode_set_delegation()
450 if (delegation == NULL) in nfs_inode_set_delegation()
452 nfs4_stateid_copy(&delegation->stateid, stateid); in nfs_inode_set_delegation()
453 refcount_set(&delegation->refcount, 1); in nfs_inode_set_delegation()
454 delegation->type = type; in nfs_inode_set_delegation()
455 delegation->pagemod_limit = pagemod_limit; in nfs_inode_set_delegation()
456 delegation->change_attr = inode_peek_iversion_raw(inode); in nfs_inode_set_delegation()
457 delegation->cred = get_cred(cred); in nfs_inode_set_delegation()
458 delegation->inode = inode; in nfs_inode_set_delegation()
459 delegation->flags = 1<<NFS_DELEGATION_REFERENCED; in nfs_inode_set_delegation()
463 delegation->flags |= BIT(NFS_DELEGATION_DELEGTIME); in nfs_inode_set_delegation()
465 delegation->test_gen = 0; in nfs_inode_set_delegation()
466 spin_lock_init(&delegation->lock); in nfs_inode_set_delegation()
469 old_delegation = rcu_dereference_protected(nfsi->delegation, in nfs_inode_set_delegation()
475 &delegation->stateid)) { in nfs_inode_set_delegation()
478 delegation); in nfs_inode_set_delegation()
492 if (delegation->type == old_delegation->type || in nfs_inode_set_delegation()
493 !(delegation->type & FMODE_WRITE)) { in nfs_inode_set_delegation()
494 freeme = delegation; in nfs_inode_set_delegation()
495 delegation = NULL; in nfs_inode_set_delegation()
522 list_add_tail_rcu(&delegation->super_list, &server->delegations); in nfs_inode_set_delegation()
523 rcu_assign_pointer(nfsi->delegation, delegation); in nfs_inode_set_delegation()
524 delegation = NULL; in nfs_inode_set_delegation()
536 if (delegation != NULL) in nfs_inode_set_delegation()
537 __nfs_free_delegation(delegation); in nfs_inode_set_delegation()
548 static int nfs_end_delegation_return(struct inode *inode, struct nfs_delegation *delegation, int is… in nfs_end_delegation_return() argument
554 if (delegation == NULL) in nfs_end_delegation_return()
563 if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) in nfs_end_delegation_return()
565 err = nfs_delegation_claim_opens(inode, &delegation->stateid, in nfs_end_delegation_return()
566 delegation->type); in nfs_end_delegation_return()
576 nfs_abort_delegation_return(delegation, clp, err); in nfs_end_delegation_return()
580 err = nfs_do_return_delegation(inode, delegation, issync); in nfs_end_delegation_return()
583 nfs_put_delegation(delegation); in nfs_end_delegation_return()
587 static bool nfs_delegation_need_return(struct nfs_delegation *delegation) in nfs_delegation_need_return() argument
591 if (test_and_clear_bit(NFS_DELEGATION_RETURN, &delegation->flags)) in nfs_delegation_need_return()
593 else if (test_bit(NFS_DELEGATION_RETURN_IF_CLOSED, &delegation->flags)) { in nfs_delegation_need_return()
596 spin_lock(&delegation->lock); in nfs_delegation_need_return()
597 inode = delegation->inode; in nfs_delegation_need_return()
600 spin_unlock(&delegation->lock); in nfs_delegation_need_return()
603 clear_bit(NFS_DELEGATION_RETURN_IF_CLOSED, &delegation->flags); in nfs_delegation_need_return()
604 if (test_bit(NFS_DELEGATION_RETURNING, &delegation->flags) || in nfs_delegation_need_return()
605 test_bit(NFS_DELEGATION_RETURN_DELAYED, &delegation->flags) || in nfs_delegation_need_return()
606 test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) in nfs_delegation_need_return()
615 struct nfs_delegation *delegation; in nfs_server_return_marked_delegations() local
633 delegation = NULL; in nfs_server_return_marked_delegations()
636 delegation = rcu_dereference(NFS_I(place_holder)->delegation); in nfs_server_return_marked_delegations()
637 if (!delegation || delegation != place_holder_deleg) in nfs_server_return_marked_delegations()
638 delegation = list_entry_rcu(server->delegations.next, in nfs_server_return_marked_delegations()
640 list_for_each_entry_from_rcu(delegation, &server->delegations, super_list) { in nfs_server_return_marked_delegations()
643 if (test_bit(NFS_DELEGATION_INODE_FREEING, &delegation->flags)) in nfs_server_return_marked_delegations()
645 if (!nfs_delegation_need_return(delegation)) { in nfs_server_return_marked_delegations()
646 if (nfs4_is_valid_delegation(delegation, 0)) in nfs_server_return_marked_delegations()
647 prev = delegation; in nfs_server_return_marked_delegations()
650 inode = nfs_delegation_grab_inode(delegation); in nfs_server_return_marked_delegations()
663 delegation = nfs_start_delegation_return_locked(NFS_I(inode)); in nfs_server_return_marked_delegations()
668 err = nfs_end_delegation_return(inode, delegation, 0); in nfs_server_return_marked_delegations()
746 struct nfs_delegation *delegation; in nfs_inode_evict_delegation() local
748 delegation = nfs_inode_detach_delegation(inode); in nfs_inode_evict_delegation()
749 if (delegation != NULL) { in nfs_inode_evict_delegation()
750 set_bit(NFS_DELEGATION_RETURNING, &delegation->flags); in nfs_inode_evict_delegation()
751 set_bit(NFS_DELEGATION_INODE_FREEING, &delegation->flags); in nfs_inode_evict_delegation()
752 nfs_do_return_delegation(inode, delegation, 1); in nfs_inode_evict_delegation()
753 nfs_free_delegation(delegation); in nfs_inode_evict_delegation()
770 struct nfs_delegation *delegation; in nfs4_inode_return_delegation() local
772 delegation = nfs_start_delegation_return(nfsi); in nfs4_inode_return_delegation()
773 if (delegation != NULL) { in nfs4_inode_return_delegation()
778 return nfs_end_delegation_return(inode, delegation, 1); in nfs4_inode_return_delegation()
793 struct nfs_delegation *delegation; in nfs4_inode_set_return_delegation_on_close() local
799 delegation = nfs4_get_valid_delegation(inode); in nfs4_inode_set_return_delegation_on_close()
800 if (!delegation) in nfs4_inode_set_return_delegation_on_close()
802 spin_lock(&delegation->lock); in nfs4_inode_set_return_delegation_on_close()
803 if (!delegation->inode) in nfs4_inode_set_return_delegation_on_close()
806 !test_and_set_bit(NFS_DELEGATION_RETURNING, &delegation->flags)) { in nfs4_inode_set_return_delegation_on_close()
808 ret = nfs_get_delegation(delegation); in nfs4_inode_set_return_delegation_on_close()
810 set_bit(NFS_DELEGATION_RETURN_IF_CLOSED, &delegation->flags); in nfs4_inode_set_return_delegation_on_close()
812 spin_unlock(&delegation->lock); in nfs4_inode_set_return_delegation_on_close()
829 struct nfs_delegation *delegation; in nfs4_inode_return_delegation_on_close() local
835 delegation = nfs4_get_valid_delegation(inode); in nfs4_inode_return_delegation_on_close()
836 if (!delegation) in nfs4_inode_return_delegation_on_close()
838 if (test_bit(NFS_DELEGATION_RETURN_IF_CLOSED, &delegation->flags) || in nfs4_inode_return_delegation_on_close()
840 spin_lock(&delegation->lock); in nfs4_inode_return_delegation_on_close()
841 if (delegation->inode && in nfs4_inode_return_delegation_on_close()
843 !test_and_set_bit(NFS_DELEGATION_RETURNING, &delegation->flags)) { in nfs4_inode_return_delegation_on_close()
844 clear_bit(NFS_DELEGATION_RETURN_IF_CLOSED, &delegation->flags); in nfs4_inode_return_delegation_on_close()
846 ret = nfs_get_delegation(delegation); in nfs4_inode_return_delegation_on_close()
848 spin_unlock(&delegation->lock); in nfs4_inode_return_delegation_on_close()
867 struct nfs_delegation *delegation; in nfs4_inode_make_writeable() local
870 delegation = nfs4_get_valid_delegation(inode); in nfs4_inode_make_writeable()
871 if (delegation == NULL || in nfs4_inode_make_writeable()
873 (delegation->type & FMODE_WRITE))) { in nfs4_inode_make_writeable()
882 struct nfs_delegation *delegation) in nfs_mark_return_if_closed_delegation() argument
884 set_bit(NFS_DELEGATION_RETURN_IF_CLOSED, &delegation->flags); in nfs_mark_return_if_closed_delegation()
890 struct nfs_delegation *delegation; in nfs_server_mark_return_all_delegations() local
893 list_for_each_entry_rcu(delegation, &server->delegations, super_list) { in nfs_server_mark_return_all_delegations()
894 nfs_mark_return_delegation(server, delegation); in nfs_server_mark_return_all_delegations()
953 struct nfs_delegation *delegation; in nfs_mark_return_unused_delegation_types() local
955 list_for_each_entry_rcu(delegation, &server->delegations, super_list) { in nfs_mark_return_unused_delegation_types()
956 if ((delegation->type == (FMODE_READ|FMODE_WRITE)) && !(flags & FMODE_WRITE)) in nfs_mark_return_unused_delegation_types()
958 if (delegation->type & flags) in nfs_mark_return_unused_delegation_types()
959 nfs_mark_return_if_closed_delegation(server, delegation); in nfs_mark_return_unused_delegation_types()
977 struct nfs_delegation *delegation; in nfs_revoke_delegation() local
982 delegation = rcu_dereference(NFS_I(inode)->delegation); in nfs_revoke_delegation()
983 if (delegation == NULL) in nfs_revoke_delegation()
986 nfs4_stateid_copy(&tmp, &delegation->stateid); in nfs_revoke_delegation()
989 if (!nfs4_stateid_match_other(stateid, &delegation->stateid)) in nfs_revoke_delegation()
991 spin_lock(&delegation->lock); in nfs_revoke_delegation()
993 if (nfs4_stateid_is_newer(&delegation->stateid, stateid)) { in nfs_revoke_delegation()
994 spin_unlock(&delegation->lock); in nfs_revoke_delegation()
997 delegation->stateid.seqid = stateid->seqid; in nfs_revoke_delegation()
999 spin_unlock(&delegation->lock); in nfs_revoke_delegation()
1001 nfs_mark_delegation_revoked(delegation); in nfs_revoke_delegation()
1019 struct nfs_delegation *delegation; in nfs_delegation_mark_returned() local
1025 delegation = rcu_dereference(NFS_I(inode)->delegation); in nfs_delegation_mark_returned()
1026 if (!delegation) in nfs_delegation_mark_returned()
1029 spin_lock(&delegation->lock); in nfs_delegation_mark_returned()
1030 if (!nfs4_stateid_match_other(stateid, &delegation->stateid)) in nfs_delegation_mark_returned()
1034 if (nfs4_stateid_is_newer(&delegation->stateid, stateid)) in nfs_delegation_mark_returned()
1036 if (delegation->stateid.seqid != stateid->seqid) in nfs_delegation_mark_returned()
1037 delegation->stateid.seqid = stateid->seqid; in nfs_delegation_mark_returned()
1040 nfs_mark_delegation_revoked(delegation); in nfs_delegation_mark_returned()
1041 clear_bit(NFS_DELEGATION_RETURNING, &delegation->flags); in nfs_delegation_mark_returned()
1042 spin_unlock(&delegation->lock); in nfs_delegation_mark_returned()
1043 if (nfs_detach_delegation(NFS_I(inode), delegation, NFS_SERVER(inode))) in nfs_delegation_mark_returned()
1044 nfs_put_delegation(delegation); in nfs_delegation_mark_returned()
1048 clear_bit(NFS_DELEGATION_RETURNING, &delegation->flags); in nfs_delegation_mark_returned()
1050 spin_unlock(&delegation->lock); in nfs_delegation_mark_returned()
1071 struct nfs_delegation *delegation; in nfs_mark_return_unreferenced_delegations() local
1073 list_for_each_entry_rcu(delegation, &server->delegations, super_list) { in nfs_mark_return_unreferenced_delegations()
1074 if (test_and_clear_bit(NFS_DELEGATION_REFERENCED, &delegation->flags)) in nfs_mark_return_unreferenced_delegations()
1076 nfs_mark_return_if_closed_delegation(server, delegation); in nfs_mark_return_unreferenced_delegations()
1109 struct nfs_delegation *delegation; in nfs_async_inode_return_delegation() local
1112 delegation = nfs4_get_valid_delegation(inode); in nfs_async_inode_return_delegation()
1113 if (delegation == NULL) in nfs_async_inode_return_delegation()
1116 !clp->cl_mvops->match_stateid(&delegation->stateid, stateid)) in nfs_async_inode_return_delegation()
1118 nfs_mark_return_delegation(server, delegation); in nfs_async_inode_return_delegation()
1135 struct nfs_delegation *delegation; in nfs_delegation_find_inode_server() local
1139 list_for_each_entry_rcu(delegation, &server->delegations, super_list) { in nfs_delegation_find_inode_server()
1140 spin_lock(&delegation->lock); in nfs_delegation_find_inode_server()
1141 if (delegation->inode != NULL && in nfs_delegation_find_inode_server()
1142 !test_bit(NFS_DELEGATION_REVOKED, &delegation->flags) && in nfs_delegation_find_inode_server()
1143 nfs_compare_fh(fhandle, &NFS_I(delegation->inode)->fh) == 0) { in nfs_delegation_find_inode_server()
1146 res = igrab(delegation->inode); in nfs_delegation_find_inode_server()
1148 spin_unlock(&delegation->lock); in nfs_delegation_find_inode_server()
1158 spin_unlock(&delegation->lock); in nfs_delegation_find_inode_server()
1191 struct nfs_delegation *delegation; in nfs_delegation_mark_reclaim_server() local
1193 list_for_each_entry_rcu(delegation, &server->delegations, super_list) { in nfs_delegation_mark_reclaim_server()
1198 if (test_bit(NFS_DELEGATION_TEST_EXPIRED, &delegation->flags)) in nfs_delegation_mark_reclaim_server()
1200 set_bit(NFS_DELEGATION_NEED_RECLAIM, &delegation->flags); in nfs_delegation_mark_reclaim_server()
1222 struct nfs_delegation *delegation; in nfs_server_reap_unclaimed_delegations() local
1226 list_for_each_entry_rcu(delegation, &server->delegations, super_list) { in nfs_server_reap_unclaimed_delegations()
1228 &delegation->flags) || in nfs_server_reap_unclaimed_delegations()
1230 &delegation->flags) || in nfs_server_reap_unclaimed_delegations()
1232 &delegation->flags) == 0) in nfs_server_reap_unclaimed_delegations()
1234 inode = nfs_delegation_grab_inode(delegation); in nfs_server_reap_unclaimed_delegations()
1237 delegation = nfs_start_delegation_return_locked(NFS_I(inode)); in nfs_server_reap_unclaimed_delegations()
1239 if (delegation != NULL) { in nfs_server_reap_unclaimed_delegations()
1240 if (nfs_detach_delegation(NFS_I(inode), delegation, in nfs_server_reap_unclaimed_delegations()
1242 nfs_free_delegation(delegation); in nfs_server_reap_unclaimed_delegations()
1244 nfs_put_delegation(delegation); in nfs_server_reap_unclaimed_delegations()
1273 struct nfs_delegation *delegation) in nfs_mark_test_expired_delegation() argument
1275 if (delegation->stateid.type == NFS4_INVALID_STATEID_TYPE) in nfs_mark_test_expired_delegation()
1277 clear_bit(NFS_DELEGATION_NEED_RECLAIM, &delegation->flags); in nfs_mark_test_expired_delegation()
1278 set_bit(NFS_DELEGATION_TEST_EXPIRED, &delegation->flags); in nfs_mark_test_expired_delegation()
1285 struct nfs_delegation *delegation; in nfs_inode_mark_test_expired_delegation() local
1288 delegation = rcu_dereference(NFS_I(inode)->delegation); in nfs_inode_mark_test_expired_delegation()
1289 if (delegation) in nfs_inode_mark_test_expired_delegation()
1290 nfs_mark_test_expired_delegation(server, delegation); in nfs_inode_mark_test_expired_delegation()
1297 struct nfs_delegation *delegation; in nfs_delegation_mark_test_expired_server() local
1299 list_for_each_entry_rcu(delegation, &server->delegations, super_list) in nfs_delegation_mark_test_expired_server()
1300 nfs_mark_test_expired_delegation(server, delegation); in nfs_delegation_mark_test_expired_server()
1351 struct nfs_delegation *delegation; in nfs_server_reap_expired_delegations() local
1359 list_for_each_entry_rcu(delegation, &server->delegations, super_list) { in nfs_server_reap_expired_delegations()
1361 &delegation->flags) || in nfs_server_reap_expired_delegations()
1363 &delegation->flags) || in nfs_server_reap_expired_delegations()
1365 &delegation->flags) == 0 || in nfs_server_reap_expired_delegations()
1366 delegation->test_gen == gen) in nfs_server_reap_expired_delegations()
1368 inode = nfs_delegation_grab_inode(delegation); in nfs_server_reap_expired_delegations()
1371 spin_lock(&delegation->lock); in nfs_server_reap_expired_delegations()
1372 cred = get_cred_rcu(delegation->cred); in nfs_server_reap_expired_delegations()
1373 nfs4_stateid_copy(&stateid, &delegation->stateid); in nfs_server_reap_expired_delegations()
1374 spin_unlock(&delegation->lock); in nfs_server_reap_expired_delegations()
1375 delegation->test_gen = gen; in nfs_server_reap_expired_delegations()
1376 clear_bit(NFS_DELEGATION_TEST_EXPIRED, &delegation->flags); in nfs_server_reap_expired_delegations()
1412 struct nfs_delegation *delegation; in nfs_inode_find_delegation_state_and_recover() local
1416 delegation = rcu_dereference(NFS_I(inode)->delegation); in nfs_inode_find_delegation_state_and_recover()
1417 if (delegation && in nfs_inode_find_delegation_state_and_recover()
1418 nfs4_stateid_match_or_older(&delegation->stateid, stateid) && in nfs_inode_find_delegation_state_and_recover()
1419 !test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) { in nfs_inode_find_delegation_state_and_recover()
1420 nfs_mark_test_expired_delegation(NFS_SERVER(inode), delegation); in nfs_inode_find_delegation_state_and_recover()
1460 struct nfs_delegation *delegation; in nfs4_refresh_delegation_stateid() local
1466 delegation = rcu_dereference(NFS_I(inode)->delegation); in nfs4_refresh_delegation_stateid()
1467 if (delegation != NULL && in nfs4_refresh_delegation_stateid()
1468 nfs4_stateid_match_other(dst, &delegation->stateid) && in nfs4_refresh_delegation_stateid()
1469 nfs4_stateid_is_newer(&delegation->stateid, dst) && in nfs4_refresh_delegation_stateid()
1470 !test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) { in nfs4_refresh_delegation_stateid()
1471 dst->seqid = delegation->stateid.seqid; in nfs4_refresh_delegation_stateid()
1493 struct nfs_delegation *delegation; in nfs4_copy_delegation_stateid() local
1498 delegation = rcu_dereference(nfsi->delegation); in nfs4_copy_delegation_stateid()
1499 if (!delegation) in nfs4_copy_delegation_stateid()
1501 spin_lock(&delegation->lock); in nfs4_copy_delegation_stateid()
1502 ret = nfs4_is_valid_delegation(delegation, flags); in nfs4_copy_delegation_stateid()
1504 nfs4_stateid_copy(dst, &delegation->stateid); in nfs4_copy_delegation_stateid()
1505 nfs_mark_delegation_referenced(delegation); in nfs4_copy_delegation_stateid()
1507 *cred = get_cred(delegation->cred); in nfs4_copy_delegation_stateid()
1509 spin_unlock(&delegation->lock); in nfs4_copy_delegation_stateid()
1526 struct nfs_delegation *delegation; in nfs4_delegation_flush_on_close() local
1530 delegation = rcu_dereference(nfsi->delegation); in nfs4_delegation_flush_on_close()
1531 if (delegation == NULL || !(delegation->type & FMODE_WRITE)) in nfs4_delegation_flush_on_close()
1533 if (atomic_long_read(&nfsi->nrequests) < delegation->pagemod_limit) in nfs4_delegation_flush_on_close()