git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
fs
/
nfs
/
nfs4renewd.c
diff --git
a/fs/nfs/nfs4renewd.c
b/fs/nfs/nfs4renewd.c
index
7b6df18
..
5d764d8
100644
(file)
--- a/
fs/nfs/nfs4renewd.c
+++ b/
fs/nfs/nfs4renewd.c
@@
-61,7
+61,7
@@
void
nfs4_renew_state(void *data)
{
void
nfs4_renew_state(void *data)
{
- struct nfs
_client *clp = (struct nfs
_client *)data;
+ struct nfs
4_client *clp = (struct nfs4
_client *)data;
struct rpc_cred *cred;
long lease, timeout;
unsigned long last, now;
struct rpc_cred *cred;
long lease, timeout;
unsigned long last, now;
@@
-108,7
+108,7
@@
out:
/* Must be called with clp->cl_sem locked for writes */
void
/* Must be called with clp->cl_sem locked for writes */
void
-nfs4_schedule_state_renewal(struct nfs_client *clp)
+nfs4_schedule_state_renewal(struct nfs
4
_client *clp)
{
long timeout;
{
long timeout;
@@
-121,20
+121,32
@@
nfs4_schedule_state_renewal(struct nfs_client *clp)
__FUNCTION__, (timeout + HZ - 1) / HZ);
cancel_delayed_work(&clp->cl_renewd);
schedule_delayed_work(&clp->cl_renewd, timeout);
__FUNCTION__, (timeout + HZ - 1) / HZ);
cancel_delayed_work(&clp->cl_renewd);
schedule_delayed_work(&clp->cl_renewd, timeout);
- set_bit(NFS_CS_RENEWD, &clp->cl_res_state);
spin_unlock(&clp->cl_lock);
}
void
nfs4_renewd_prepare_shutdown(struct nfs_server *server)
{
spin_unlock(&clp->cl_lock);
}
void
nfs4_renewd_prepare_shutdown(struct nfs_server *server)
{
+ struct nfs4_client *clp = server->nfs4_state;
+
+ if (!clp)
+ return;
flush_scheduled_work();
flush_scheduled_work();
+ down_write(&clp->cl_sem);
+ if (!list_empty(&server->nfs4_siblings))
+ list_del_init(&server->nfs4_siblings);
+ up_write(&clp->cl_sem);
}
}
+/* Must be called with clp->cl_sem locked for writes */
void
void
-nfs4_kill_renewd(struct nfs_client *clp)
+nfs4_kill_renewd(struct nfs
4
_client *clp)
{
down_read(&clp->cl_sem);
{
down_read(&clp->cl_sem);
+ if (!list_empty(&clp->cl_superblocks)) {
+ up_read(&clp->cl_sem);
+ return;
+ }
cancel_delayed_work(&clp->cl_renewd);
up_read(&clp->cl_sem);
flush_scheduled_work();
cancel_delayed_work(&clp->cl_renewd);
up_read(&clp->cl_sem);
flush_scheduled_work();