Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124735
b: refs/heads/master
c: b0d3ded
h: refs/heads/master
i:
  124733: 8c567f4
  124731: cd71d4b
  124727: 5c5c2d1
  124719: 02b6bd1
  124703: c0e1b46
  124671: 7acf6d8
v: v3
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Dec 23, 2008
1 parent f1ae476 commit 15df523
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0d62f85a81216f30a0ba1479b93e84103a5d535b
refs/heads/master: b0d3ded1a21dc3057daff5a488469d9e6aa1b567
31 changes: 5 additions & 26 deletions trunk/fs/nfs/delegation.c
Original file line number Diff line number Diff line change
Expand Up @@ -354,37 +354,16 @@ static void nfs_client_mark_return_all_delegations(struct nfs_client *clp)
rcu_read_unlock();
}

static int nfs_do_expire_all_delegations(void *ptr)
static void nfs_delegation_run_state_manager(struct nfs_client *clp)
{
struct nfs_client *clp = ptr;

allow_signal(SIGKILL);

if (test_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0)
goto out;
if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) == 0)
goto out;
nfs_client_mark_return_all_delegations(clp);
nfs_client_return_marked_delegations(clp);
out:
nfs_put_client(clp);
module_put_and_exit(0);
if (test_bit(NFS4CLNT_DELEGRETURN, &clp->cl_state))
nfs4_schedule_state_manager(clp);
}

void nfs_expire_all_delegations(struct nfs_client *clp)
{
struct task_struct *task;

__module_get(THIS_MODULE);
atomic_inc(&clp->cl_count);
task = kthread_run(nfs_do_expire_all_delegations, clp,
"%s-delegreturn",
rpc_peeraddr2str(clp->cl_rpcclient,
RPC_DISPLAY_ADDR));
if (!IS_ERR(task))
return;
nfs_put_client(clp);
module_put(THIS_MODULE);
nfs_client_mark_return_all_delegations(clp);
nfs_delegation_run_state_manager(clp);
}

/*
Expand Down
1 change: 1 addition & 0 deletions trunk/fs/nfs/nfs4_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ extern void nfs4_close_state(struct path *, struct nfs4_state *, mode_t);
extern void nfs4_close_sync(struct path *, struct nfs4_state *, mode_t);
extern void nfs4_state_set_mode_locked(struct nfs4_state *, mode_t);
extern void nfs4_schedule_state_recovery(struct nfs_client *);
extern void nfs4_schedule_state_manager(struct nfs_client *);
extern int nfs4_state_mark_reclaim_nograce(struct nfs_client *clp, struct nfs4_state *state);
extern void nfs4_put_lock_state(struct nfs4_lock_state *lsp);
extern int nfs4_set_lock_state(struct nfs4_state *state, struct file_lock *fl);
Expand Down
16 changes: 9 additions & 7 deletions trunk/fs/nfs/nfs4renewd.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,18 @@ nfs4_renew_state(struct work_struct *work)
/* Are we close to a lease timeout? */
if (time_after(now, last + lease/3)) {
cred = nfs4_get_renew_cred_locked(clp);
spin_unlock(&clp->cl_lock);
if (cred == NULL) {
set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state);
spin_unlock(&clp->cl_lock);
if (list_empty(&clp->cl_delegations)) {
set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state);
goto out;
}
nfs_expire_all_delegations(clp);
goto out;
} else {
/* Queue an asynchronous RENEW. */
nfs4_proc_async_renew(clp, cred);
put_rpccred(cred);
}
spin_unlock(&clp->cl_lock);
/* Queue an asynchronous RENEW. */
nfs4_proc_async_renew(clp, cred);
put_rpccred(cred);
timeout = (2 * lease) / 3;
spin_lock(&clp->cl_lock);
} else
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/nfs/nfs4state.c
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,7 @@ static void nfs4_clear_state_manager_bit(struct nfs_client *clp)
/*
* Schedule the nfs_client asynchronous state management routine
*/
static void nfs4_schedule_state_manager(struct nfs_client *clp)
void nfs4_schedule_state_manager(struct nfs_client *clp)
{
struct task_struct *task;

Expand Down

0 comments on commit 15df523

Please sign in to comment.