On Wed, Jan 24, 2018 at 12:45 PM, Sowmini Varadhan <sowmini.varad...@oracle.com> wrote: > The existing model holds a reference from the rds_sock to the > rds_message, but the rds_message does not itself hold a sock_put() > on the rds_sock. Instead the m_rs field in the rds_message is > assigned when the message is queued on the sock, and nulled when > the message is dequeued from the sock. > > We want to be able to notify userspace when the rds_message > is actually freed (from rds_message_purge(), after the refcounts > to the rds_message go to 0). At the time that rds_message_purge() > is called, the message is no longer on the rds_sock retransmit > queue. Thus the explicit reference for the m_rs is needed to > send a notification that will signal to userspace that > it is now safe to free/reuse any pages that may have > been pinned down for zerocopy. > > This patch manages the m_rs assignment in the rds_message with > the necessary refcount book-keeping.
You may alos be able to do the same as tcp zerocopy and hold an sk reference on the notification skb.