Loading fs/nfs/delegation.c +37 −39 Original line number Diff line number Diff line Loading @@ -1092,22 +1092,15 @@ void nfs_delegation_mark_reclaim(struct nfs_client *clp) rcu_read_unlock(); } /** * nfs_delegation_reap_unclaimed - reap unclaimed delegations after reboot recovery is done * @clp: nfs_client to process * */ void nfs_delegation_reap_unclaimed(struct nfs_client *clp) static int nfs_server_reap_unclaimed_delegations(struct nfs_server *server, void __always_unused *data) { struct nfs_delegation *delegation; struct nfs_server *server; struct inode *inode; restart: rcu_read_lock(); list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { list_for_each_entry_rcu(delegation, &server->delegations, super_list) { restart_locked: list_for_each_entry_rcu(delegation, &server->delegations, super_list) { if (test_bit(NFS_DELEGATION_INODE_FREEING, &delegation->flags) || test_bit(NFS_DELEGATION_RETURNING, Loading @@ -1115,14 +1108,9 @@ void nfs_delegation_reap_unclaimed(struct nfs_client *clp) test_bit(NFS_DELEGATION_NEED_RECLAIM, &delegation->flags) == 0) continue; if (!nfs_sb_active(server->super)) break; /* continue in outer loop */ inode = nfs_delegation_grab_inode(delegation); if (inode == NULL) { rcu_read_unlock(); nfs_sb_deactive(server->super); goto restart; } if (inode == NULL) goto restart_locked; delegation = nfs_start_delegation_return_locked(NFS_I(inode)); rcu_read_unlock(); if (delegation != NULL) { Loading @@ -1133,12 +1121,22 @@ void nfs_delegation_reap_unclaimed(struct nfs_client *clp) nfs_put_delegation(delegation); } iput(inode); nfs_sb_deactive(server->super); cond_resched(); goto restart; } } rcu_read_unlock(); return 0; } /** * nfs_delegation_reap_unclaimed - reap unclaimed delegations after reboot recovery is done * @clp: nfs_client to process * */ void nfs_delegation_reap_unclaimed(struct nfs_client *clp) { nfs_client_for_each_server(clp, nfs_server_reap_unclaimed_delegations, NULL); } static inline bool nfs4_server_rebooted(const struct nfs_client *clp) Loading Loading
fs/nfs/delegation.c +37 −39 Original line number Diff line number Diff line Loading @@ -1092,22 +1092,15 @@ void nfs_delegation_mark_reclaim(struct nfs_client *clp) rcu_read_unlock(); } /** * nfs_delegation_reap_unclaimed - reap unclaimed delegations after reboot recovery is done * @clp: nfs_client to process * */ void nfs_delegation_reap_unclaimed(struct nfs_client *clp) static int nfs_server_reap_unclaimed_delegations(struct nfs_server *server, void __always_unused *data) { struct nfs_delegation *delegation; struct nfs_server *server; struct inode *inode; restart: rcu_read_lock(); list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { list_for_each_entry_rcu(delegation, &server->delegations, super_list) { restart_locked: list_for_each_entry_rcu(delegation, &server->delegations, super_list) { if (test_bit(NFS_DELEGATION_INODE_FREEING, &delegation->flags) || test_bit(NFS_DELEGATION_RETURNING, Loading @@ -1115,14 +1108,9 @@ void nfs_delegation_reap_unclaimed(struct nfs_client *clp) test_bit(NFS_DELEGATION_NEED_RECLAIM, &delegation->flags) == 0) continue; if (!nfs_sb_active(server->super)) break; /* continue in outer loop */ inode = nfs_delegation_grab_inode(delegation); if (inode == NULL) { rcu_read_unlock(); nfs_sb_deactive(server->super); goto restart; } if (inode == NULL) goto restart_locked; delegation = nfs_start_delegation_return_locked(NFS_I(inode)); rcu_read_unlock(); if (delegation != NULL) { Loading @@ -1133,12 +1121,22 @@ void nfs_delegation_reap_unclaimed(struct nfs_client *clp) nfs_put_delegation(delegation); } iput(inode); nfs_sb_deactive(server->super); cond_resched(); goto restart; } } rcu_read_unlock(); return 0; } /** * nfs_delegation_reap_unclaimed - reap unclaimed delegations after reboot recovery is done * @clp: nfs_client to process * */ void nfs_delegation_reap_unclaimed(struct nfs_client *clp) { nfs_client_for_each_server(clp, nfs_server_reap_unclaimed_delegations, NULL); } static inline bool nfs4_server_rebooted(const struct nfs_client *clp) Loading