anchor.diff:  ;; Semantically they are not the same, because CANCEL is typically 
   ;; used by the system to clean up clients that didn't exit properly.
   
  -(defrpc call-cancel 3 nlm4-cancel-args nlm4-res
  -  (:documentation "Cancel a previously blocked request."))
  +(defrpc call-cancel 3 
  +  (:list netobj :boolean :boolean nlm-lock)
  +  (:list netobj nlm-stat)
  +  (:arg-transformer (lock &key cookie block exclusive)
  +    (list cookie block exclusive lock))
  +  (:documentation "Cancels an outstanding blocked lock request. If the client made a LOCK procedure call with BLOCKED true and the procedure was blocked by the server (it returned a status of :BLOCKED), then the client can cancel the outstanding lock request by using this procedure.
  +
  +The BLOCK, EXCLUSIVE and LOCK arguments must exactly match those in the corresponding LOCK request."))
   
   (defhandler %handle-cancel (args 3)
     (destructuring-bind (cookie block exclusive alock) args
       (declare (ignore block exclusive))
  -    (release-lock (nlm4-lock-fh alock))
  +    (release-lock (nlm-lock-fh alock))
       (list cookie :granted)))
   
   ;; ------------------------------------------
   
   ;; UNLOCK :: release a lock 
   
  -(defrpc call-unlock 4 nlm4-unlock-args nlm4-res
  -  (:documentation "Release a lock."))
  +(defrpc call-unlock 4 
  +  (:list netobj nlm-lock)
  +  (:list netobj nlm-stat)
  +  (:arg-transformer (lock &key cookie)
  +    (list cookie lock))
  +  (:documentation "Release a lock. The information in LOCK should match the information in the LOCK which created the lock."))
   
   (defhandler %handle-unlock (args 4)
     (destructuring-bind (cookie alock) args
  -    (release-lock (nlm4-lock-fh alock))
  +    (release-lock (nlm-lock-fh alock))
       (list cookie :granted)))
   
   ;; --------------------------------------------
  
positive.code: (defun make-netobj ()
    (nibbles:make-octet-vector +max-netobj+))
  
  (defxenum nlm4-stat
    ((:granted 0)
     (:denied 1)
     (:denied-no-locks 2)
  
negative.code:    (offset :uint64)
     (len :uint64)))
  
  (defxstruct nlm-holder ()
    ((exclusive :boolean)
     (id :int32)
     (oh netobj)
     (offset :uint64)
     (len :uint64)))
  
  (defxstruct nlm-share ()
    ((name :string)
     (fh netobj)
     (oh netobj)
     (mode fsh4-mode)
     (access fsh4-mode)))
  
  ;; --------------------------------
  
  ;; there is very little information on how to implement these
  ;; I can't find any RFC defining them, only the NFSv3 RFC seems to mention
  