_enter("{%llx:%llu},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type);
 
-       /* only whole-file locks are supported */
-       if (fl->fl_start != 0 || fl->fl_end != OFFSET_MAX)
-               return -EINVAL;
-
        fl->fl_ops = &afs_lock_ops;
        INIT_LIST_HEAD(&fl->fl_u.afs.link);
        fl->fl_u.afs.state = AFS_LOCK_PENDING;
        /* Flush all pending writes before doing anything with locks. */
        vfs_fsync(file, 0);
 
-       /* only whole-file unlocks are supported */
-       if (fl->fl_start != 0 || fl->fl_end != OFFSET_MAX)
-               return -EINVAL;
-
        ret = posix_lock_file(file, fl, NULL);
        _leave(" = %d [%u]", ret, vnode->lock_state);
        return ret;
                        goto error;
 
                lock_count = READ_ONCE(vnode->status.lock_count);
-               if (lock_count > 0)
-                       fl->fl_type = F_RDLCK;
-               else
-                       fl->fl_type = F_WRLCK;
-               fl->fl_start = 0;
-               fl->fl_end = OFFSET_MAX;
+               if (lock_count != 0) {
+                       if (lock_count > 0)
+                               fl->fl_type = F_RDLCK;
+                       else
+                               fl->fl_type = F_WRLCK;
+                       fl->fl_start = 0;
+                       fl->fl_end = OFFSET_MAX;
+                       fl->fl_pid = 0;
+               }
        }
 
        ret = 0;