• Sowmini Varadhan's avatar
    rds: hold a sock ref from rds_message to the rds_sock · ea8994cb
    Sowmini Varadhan authored
    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.
    Signed-off-by: default avatarSowmini Varadhan <sowmini.varadhan@oracle.com>
    Acked-by: default avatarSantosh Shilimkar <santosh.shilimkar@oracle.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ea8994cb
message.c 9.63 KB