Hi, I'm trying to find my way around the lockd code and I'm currently a bit stumped by the code relating to lock cancellation. There is only one call to vfs_cancel_lock() in lockd/svclock.c and its return value isn't checked. It is used in combination with nlmsvc_unlink_block() which unconditionally calls posix_unblock_lock(). There are also other places where the code also calls nlmsvc_unlink_block() without first canceling the lock. The way in which vfs_cancel_lock() is used suggests that canceling a lock is a synchronous operation, and that it must succeed before returning. I'd have expected to see (pseudo code) something more like the following: ret = vfs_cancel_lock(); if (ret == -ENOENT) /* never had the lock in the first place */ do_something_appropriate(); else if (ret == -EINVAL) /* we raced with a grant */ unlock_lock(); else /* lock successfully canceled */ nlmsvc_unlink_block(); Is there a reason why that is not required? and indeed, is there a reason why its safe to call nlmsvc_unlink_block() in the cases where the lock isn't canceled first? I'm trying to work out how the underlying fs can tell that a lock has gone away in those particular cases, Steve. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html