lockd: save lock state on deferral
We need to keep some state for a pending asynchronous lock request, so this patch adds that state to struct nlm_block. This also adds a function which defers the request, by calling rqstp->rq_chandle.defer and storing the resulting deferred request in a nlm_block structure which we insert into lockd's global block list. That new function isn't called yet, so it's dead code until a later patch. Signed-off-by: Marc Eshel <eshel@almaden.ibm.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
committed by
J. Bruce Fields
parent
2beb6614f5
commit
2b36f412ab
@@ -119,6 +119,9 @@ struct nlm_file {
|
||||
* couldn't be granted because of a conflicting lock).
|
||||
*/
|
||||
#define NLM_NEVER (~(unsigned long) 0)
|
||||
/* timeout on non-blocking call: */
|
||||
#define NLM_TIMEOUT (7 * HZ)
|
||||
|
||||
struct nlm_block {
|
||||
struct kref b_count; /* Reference count */
|
||||
struct list_head b_list; /* linked list of all blocks */
|
||||
@@ -130,6 +133,13 @@ struct nlm_block {
|
||||
unsigned int b_id; /* block id */
|
||||
unsigned char b_granted; /* VFS granted lock */
|
||||
struct nlm_file * b_file; /* file in question */
|
||||
struct cache_req * b_cache_req; /* deferred request handling */
|
||||
struct file_lock * b_fl; /* set for GETLK */
|
||||
struct cache_deferred_req * b_deferred_req;
|
||||
unsigned int b_flags; /* block flags */
|
||||
#define B_QUEUED 1 /* lock queued */
|
||||
#define B_GOT_CALLBACK 2 /* got lock or conflicting lock */
|
||||
#define B_TIMED_OUT 4 /* filesystem too slow to respond */
|
||||
};
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user