summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorPatrick Caulfield <pcaulfie@redhat.com>2006-11-06 08:53:28 +0000
committerSteven Whitehouse <swhiteho@redhat.com>2006-11-06 09:28:01 -0500
commite2de7f565521a76fbbb927f701c5a1d381c71a93 (patch)
tree0068cf0d624045eedb91b0452a89dc691871641b /fs
parentba542e3b92f9ea7c482ae56b68b9122eebc53a39 (diff)
downloadlinux-e2de7f565521a76fbbb927f701c5a1d381c71a93.tar.gz
linux-e2de7f565521a76fbbb927f701c5a1d381c71a93.tar.bz2
linux-e2de7f565521a76fbbb927f701c5a1d381c71a93.zip
[DLM] fix oops in kref_put when removing a lockspace
Now that the lockspace struct is freed when the last sysfs object is released this patch prevents use of that lockspace by sysfs. We attempt to re-get the lockspace from the lockspace list and fail the request if it has been removed. Signed-Off-By: Patrick Caulfield <pcaulfie@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/dlm/lockspace.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c
index 499ee1156365..f8842ca443c2 100644
--- a/fs/dlm/lockspace.c
+++ b/fs/dlm/lockspace.c
@@ -43,6 +43,10 @@ static ssize_t dlm_control_store(struct dlm_ls *ls, const char *buf, size_t len)
ssize_t ret = len;
int n = simple_strtol(buf, NULL, 0);
+ ls = dlm_find_lockspace_local(ls->ls_local_handle);
+ if (!ls)
+ return -EINVAL;
+
switch (n) {
case 0:
dlm_ls_stop(ls);
@@ -53,6 +57,7 @@ static ssize_t dlm_control_store(struct dlm_ls *ls, const char *buf, size_t len)
default:
ret = -EINVAL;
}
+ dlm_put_lockspace(ls);
return ret;
}