On Tue, Dec 23, 2008 at 10:16:25PM +0300, Vladislav Bolkhovitin (vst@xxxxxxxx) wrote: > Actually, there's another way, which seems to be a lot simpler. Alexey > Kuznetsov privately suggested it to me. > > In skb_shared_info new pointer transaction_token would be added, which > would point on: > > struct sk_transaction_token > { > atomic_t io_count; > struct sk_transaction_token *next; > unsigned long token; > unsigned long private; > void (*finish_callback)(struct > sk_transaction_token *); > }; > > When skb is translated, transaction_token inherited. If 2 skb are merged > (the same places where I put net_get_page's in my patch), the *older* > token is inherited. This is the main point of this idea. > > Before starting new asynchronous send a client would open a new token. > Everything sent then would receive that token. Finish_callback() would > be called and the corresponding token freed, when io_count == 0 *AND* > all previous tokens closed. > > This idea seems to be simpler, than even what Rusty implemented. Correct > me, if I wrong. But, unfortunately, in the near future I will have no > time to develop it.. :-( Yes, it is simpler and cleaner, but it requires additional allocation. This is additional (and quite noticeble) overhead. -- Evgeniy Polyakov -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html