On 01/05/15 12:06 am, Abhijit Bhopatkar wrote:
There is a possibility of a receiver losing out on messages in certain corner conditions. One of the buggy case is if there is are two sender ready with messages to be sent. Sender 1 initially gets the TOKEN lock and proceeds. After initial processing the sender of message 1 _will_ release TOKEN as soon as receiver releases ACK, it does not wait till ACK CR is re-acquired by receiver.
I could not come up with any solution except to add one more lock resource for now we will call it "SYNC" Sender 1 Sender2 Receiver Get EX on TOKEN Get EX on TOKEN Get EX on SYNC <Wait till granted> <Granted> Get EX on MSG write LVB down MSG to CR Get EX of ACK <wait till granted> BAST for ACK Get CR on MSG read LVB <process> Queue EX on SYNC release ACK AST for ACK down ACK to CR release MSG release SYNC release TOKEN SYNC granted <granted> Get EX on SYNC <wait till grant> Get EX on MSG Get CR on ACK release MSG release SYNC Get EX on MSG <....proceed rest> release TOKEN The key thing to note here is that the SYNC lock request is only queued in receiver path. Having worked in dlm before I know for sure this will work as expected. Abhijit -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html