NLM: Further cancel fixes
If the server receives an NLM cancel call and finds no waiting lock to cancel, then chances are the lock has already been applied, and the client just hadn't yet processed the NLM granted callback before it sent the cancel. The Open Group text, for example, perimts a server to return either success (LCK_GRANTED) or failure (LCK_DENIED) in this case. But returning an error seems more helpful; the client may be able to use it to recognize that a race has occurred and to recover from the race. So, modify the relevant functions to return an error in this case. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
committed by
Trond Myklebust
parent
2c5acd2e1a
commit
64a318ee2a
@@ -1958,13 +1958,18 @@ EXPORT_SYMBOL(posix_block_lock);
|
||||
*
|
||||
* lockd needs to block waiting for locks.
|
||||
*/
|
||||
void
|
||||
int
|
||||
posix_unblock_lock(struct file *filp, struct file_lock *waiter)
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
lock_kernel();
|
||||
if (waiter->fl_next)
|
||||
__locks_delete_block(waiter);
|
||||
else
|
||||
status = -ENOENT;
|
||||
unlock_kernel();
|
||||
return status;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(posix_unblock_lock);
|
||||
|
Reference in New Issue
Block a user