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