Upon further reflection, I have decided that the clearing of FL_SLEEP was the result of the same poor thinking that resulted in the assert statement that was removed in linux-and-locks-cleanup-20070202. That is, that afs_lockctl will block if any blocking is needed, and that once afs_lockctl succeeded, then it must be the case that posix_lock_file will not block. This turns out to be incorrect when applications use byte-range locks. afs_lockctl always returns 0 (success) on such a lock request. If we wish to offer working intra-client byte-range locking (and I see no reason not to, on linux...), then any FL_SLEEP in the lock request should be left alone.

The FL_SLEEP masking code should be removed from both afs_linux_lock and afs_linux_flock. posix_lock_file should become posix_lock_file_wait on 2.6, and the 0 should become (cmd == F_SETLKW) on 2.4 (but there are details to be dealt with, like the fact that old 2.6's don't have posix_lock_file_wait or any way to simulate it.) I will try to work up a patch on monday, but if someone else beats me to it, I will not complain.
_______________________________________________
OpenAFS-devel mailing list
[email protected]
https://lists.openafs.org/mailman/listinfo/openafs-devel

Reply via email to