Can somebody please review this change : https://review.gerrithub.io/#/c/390652/

It addresses this issue :

Leak in DRC when client disconnects nfs_dupreq_finish doesn't call
put_drc always. It does only if it meets certain criteria
(drc_should_retire). This can leak the drc and the dupreq entries
within it when the client disconnects. More information can be found
here : https://sourceforge.net/p/nfs-ganesha/mailman/message/35815930/

----

Main idea behind the change.

Introduced a new drc queue which holds all the active drc objects
(tcp_drc_q in drc_st).
Every new drc is added to tcp_drc_q initially. Eventually it is moved
to tcp_drc_recycle_q. Drcs are freed from tcp_drc_recycle_q. Every drc
is either in the active drc queue or in the recycle queue.

DRC Refcount and transition from active drc to recycle queue :

Drc refcnt is initialized to 2. In dupreq_start, increment the drc
refcount. In dupreq_rele, decrement the drc refcnt. Drc refcnt is also
decremented in nfs_rpc_free_user_data. When drc refcnt goes to 0 and
drc is found not in use for 10 minutes, pick it up and free the
entries in iterations of 32 items at at time. Once the dupreq entries
goes to 0, remove the drc from tcp_drc_q and add it to
tcp_drc_recycle_q. Today, entries added to tcp_drc_recycle_q are
cleaned up periodically. Same logic should clean up these entries too.

Thanks,
Satya.

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Nfs-ganesha-devel mailing list
Nfs-ganesha-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel

Reply via email to