Yes, nfs_rpc_free_user_data() is the secret :) Matt
On Fri, Oct 13, 2017 at 4:11 AM, Kinglong Mee <kinglong...@gmail.com> wrote: > Hi Malahal, > > Thanks for your reply. > > #1. I'd like to post a patch to delete it, because I have some cleanups for > drc. > #2/#3. Sorry for my missing of nfs_rpc_free_user_data(). With it, everything > is okay. > > thanks, > Kinglong Mee > > On 10/13/2017 15:52, Malahal Naineni wrote: >> #1. Looks like a bug! Lines 629 and 630 should be deleted >> #2. See nfs_rpc_free_user_data(). It sets xp_u2 to NULL and drc ref is >> decremented there. >> #3. Life time of drc should start when it is allocated in >> nfs_dupreq_get_drc() using alloc_tcp_drc(). >> It can live beyond xprt's xp_u2 setting to NULL. It will live until we >> decide to free in drc_free_expired() using free_tcp_drc(). >> >> Regards, Malahal. >> PS: The comment "drc cache maintains a ref count." seems to imply that it >> will have a refcount for keeping it in the hash table itself. I may have >> kept those two lines because of that but It doesn't make sense as refcnt >> will never go to zero this way. >> >> On Thu, Oct 12, 2017 at 3:48 PM, Kinglong Mee <kinglong...@gmail.com >> <mailto:kinglong...@gmail.com>> wrote: >> >> Describes in src/RPCAL/nfs_dupreq.c, >> >> * The life of tcp drc: it gets allocated when we process the first >> * request on the connection. It is put into rbtree (tcp_drc_recycle_t). >> * drc cache maintains a ref count. Every request as well as the xprt >> * holds a ref count. Its ref count should go to zero when the >> * connection's xprt gets freed (all requests should be completed on the >> * xprt by this time). When the ref count goes to zero, it is also put >> * into a recycle queue (tcp_drc_recycle_q). When a reconnection >> * happens, we hope to find the same drc that was used before, and the >> * ref count goes up again. At the same time, the drc will be removed >> * from the recycle queue. Only drc's with ref count zero end up in the >> * recycle queue. If a reconnection doesn't happen in time, the drc gets >> * freed by drc_free_expired() after some period of inactivety. >> >> Some questions about the life time of tcp drc, >> 1. The are two references of drc for xprt in nfs_dupreq_get_drc(). >> 629 /* xprt ref */ >> 630 drc->refcnt = 1; >> ... >> 638 (void)nfs_dupreq_ref_drc(drc); /* xprt >> ref */ >> ... >> 653 req->rq_xprt->xp_u2 = (void *)drc; >> >> I think it's a bug. The first one needs remove. Right? >> >> 2. The is no place to decrease the reference of drc for xprt. >> The xprt argument in nfs_dupreq_put_drc() is unused. >> Should it be used to decrease the ref? >> I think it's the right place to decrease the ref in >> nfs_dupreq_put_drc(). >> >> 3. My doubts is that, the life time of drc stored in req->rq_xprt->xp_u2 >> ? >> Start at #1, end at #2 (req->rq_xprt->xp_u2 = NULL) ? >> If that, the bad case is always lookup drc from tcp_drc_recycle_t. >> >> Otherwise, don't put the reference at #2, when to put it? >> the bad case is the drc ref always be 1 forever, am I right? >> >> thanks, >> Kinglong Mee >> >> >> ------------------------------------------------------------------------------ >> 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 >> <mailto:Nfs-ganesha-devel@lists.sourceforge.net> >> https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel >> <https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel> >> >> > > ------------------------------------------------------------------------------ > 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 -- Matt Benjamin Red Hat, Inc. 315 West Huron Street, Suite 140A Ann Arbor, Michigan 48103 http://www.redhat.com/en/technologies/storage tel. 734-821-5101 fax. 734-769-8938 cel. 734-216-5309 ------------------------------------------------------------------------------ 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