On Tue, Mar 22, 2011 at 10:28:33AM -0700, Robert Love wrote: > On Thu, 2011-03-17 at 20:41 -0700, Lai Jiangshan wrote: > > > > The rcu callback fc_rport_free_rcu() just calls a kfree(), > > so we use kfree_rcu() instead of the call_rcu(fc_rport_free_rcu). > > > > Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxx> > > --- > > drivers/scsi/libfc/fc_rport.c | 14 +------------- > > 1 files changed, 1 insertions(+), 13 deletions(-) > > > > diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c > > index a7175ad..29abab0 100644 > > --- a/drivers/scsi/libfc/fc_rport.c > > +++ b/drivers/scsi/libfc/fc_rport.c > > @@ -151,18 +151,6 @@ static struct fc_rport_priv *fc_rport_create(struct fc_lport *lport, > > } > > > > /** > > - * fc_rport_free_rcu() - Free a remote port > > - * @rcu: The rcu_head structure inside the remote port > > - */ > > -static void fc_rport_free_rcu(struct rcu_head *rcu) > > -{ > > - struct fc_rport_priv *rdata; > > - > > - rdata = container_of(rcu, struct fc_rport_priv, rcu); > > - kfree(rdata); > > -} > > - > > -/** > > * fc_rport_destroy() - Free a remote port after last reference is released > > * @kref: The remote port's kref > > */ > > @@ -171,7 +159,7 @@ static void fc_rport_destroy(struct kref *kref) > > struct fc_rport_priv *rdata; > > > > rdata = container_of(kref, struct fc_rport_priv, kref); > > - call_rcu(&rdata->rcu, fc_rport_free_rcu); > > + kfree_rcu(rdata, rcu); > > I think this last line should be: > > kfree_rcu(rdata, &rdata->rcu); Hello, Robert, I believe that it is correct as is. The kfree_rcu() definition is as follows: #define kfree_rcu(ptr, rcu_head) \ __kfree_rcu(&((ptr)->rcu_head), offsetof(typeof(*(ptr)), rcu_head)) Then __kfree_rcu() encodes the offset into the rcu_head so that it can be handled properly at the end of the grace period. Thanx, Paul -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html