Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 243711 Details for
Bug 351321
messages stranded in requestqueue
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
patch to try
rhel4-dlm-requestqueue-2.patch (text/plain), 2.27 KB, created by
David Teigland
on 2007-10-30 18:06:00 UTC
(
hide
)
Description:
patch to try
Filename:
MIME Type:
Creator:
David Teigland
Created:
2007-10-30 18:06:00 UTC
Size:
2.27 KB
patch
obsolete
>Index: lockqueue.c >=================================================================== >RCS file: /cvs/cluster/cluster/dlm-kernel/src/Attic/lockqueue.c,v >retrieving revision 1.37.2.9 >diff -u -r1.37.2.9 lockqueue.c >--- lockqueue.c 24 Jan 2006 14:38:19 -0000 1.37.2.9 >+++ lockqueue.c 30 Oct 2007 18:04:21 -0000 >@@ -112,22 +112,23 @@ > * request queue and processed when recovery is complete. > */ > >-void add_to_requestqueue(struct dlm_ls *ls, int nodeid, struct dlm_header *hd) >+int add_to_requestqueue(struct dlm_ls *ls, int nodeid, struct dlm_header *hd) > { > struct rq_entry *entry; > int length = hd->rh_length; >+ int rv; > > if (test_bit(LSFL_REQUEST_WARN, &ls->ls_flags)) > log_error(ls, "request during recovery from %u", nodeid); > > if (in_nodes_gone(ls, nodeid)) >- return; >+ return 0; > > entry = kmalloc(sizeof(struct rq_entry) + length, GFP_KERNEL); > if (!entry) { > // TODO something better > printk("dlm: add_to_requestqueue: out of memory\n"); >- return; >+ return 0; > } > > log_debug(ls, "add_to_requestq cmd %d fr %d", hd->rh_cmd, nodeid); >@@ -135,8 +136,22 @@ > memcpy(entry->rqe_request, hd, length); > > down(&ls->ls_requestqueue_lock); >- list_add_tail(&entry->rqe_list, &ls->ls_requestqueue); >+ >+ /* We need to check LS_RUN after taking the mutex to >+ avoid a race where dlm_recoverd enables locking and runs >+ process_requestqueue between our earlier LS_RUN check >+ and this addition to the requestqueue. (From RHEL5 code). */ >+ >+ if (!test_bit(LSFL_LS_RUN, &ls->ls_flags)) { >+ list_add_tail(&entry->rqe_list, &ls->ls_requestqueue); >+ rv = 0; >+ } else { >+ log_debug(ls, "add_to_requestq skip fr %d", nodeid); >+ kfree(entry); >+ rv = -EAGAIN; >+ } > up(&ls->ls_requestqueue_lock); >+ return rv; > } > > int process_requestqueue(struct dlm_ls *ls) >@@ -806,6 +821,7 @@ > struct dlm_request *freq = (struct dlm_request *) req; > struct dlm_reply *rp = (struct dlm_reply *) req; > struct dlm_reply reply; >+ int error; > > lspace = find_lockspace_by_global_id(req->rh_lockspace); > >@@ -827,8 +843,11 @@ > */ > retry: > if (!test_bit(LSFL_LS_RUN, &lspace->ls_flags)) { >- if (!recovery) >- add_to_requestqueue(lspace, nodeid, req); >+ if (!recovery) { >+ error = add_to_requestqueue(lspace, nodeid, req); >+ if (error == -EAGAIN) >+ goto retry; >+ } > status = -EINTR; > goto out; > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 351321
:
238011
| 243711