|
@@ -4093,15 +4093,23 @@ nfs4_proc_lock(struct file *filp, int cmd, struct file_lock *request)
|
|
|
if (request->fl_start < 0 || request->fl_end < 0)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (IS_GETLK(cmd))
|
|
|
- return nfs4_proc_getlk(state, F_GETLK, request);
|
|
|
+ if (IS_GETLK(cmd)) {
|
|
|
+ if (state != NULL)
|
|
|
+ return nfs4_proc_getlk(state, F_GETLK, request);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
if (!(IS_SETLK(cmd) || IS_SETLKW(cmd)))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (request->fl_type == F_UNLCK)
|
|
|
- return nfs4_proc_unlck(state, cmd, request);
|
|
|
+ if (request->fl_type == F_UNLCK) {
|
|
|
+ if (state != NULL)
|
|
|
+ return nfs4_proc_unlck(state, cmd, request);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
+ if (state == NULL)
|
|
|
+ return -ENOLCK;
|
|
|
do {
|
|
|
status = nfs4_proc_setlk(state, cmd, request);
|
|
|
if ((status != -EAGAIN) || IS_SETLK(cmd))
|