Re: [PATCH] net/ceph/osd_client.c add sem to osdmap destroy

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[Sorry for not responding earlier!]

On Tue, 19 Jun 2012, Guan Jun He wrote:
> Hi,
> 
>   Do you think this is needed? 
> The osdmap update need to hold this sem.As in function 
> void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg)
> and 
> function static int __map_request(), 
> etc.

I'm skeptical that this is necessary.  At the point that we're tearing 
down the osd_client there shouldn't be anybody else referencing us, or the 
osdmap.

Actually, looking at the code a bit, I think the only kind of race we need 
to worry about is an incoming message.  The correct fix is probably a call 
to the messenger to drop all incoming traffic before we start to shut 
everything else down.  Even with this, we might still end up with a new 
osdmap that we leak, but stopping the msgr earlier would fix both issues.

sage

> 
> Thanks a lot for your reply!
> 
> thanks,
> Guanjun
> 
> >>> On 6/15/2012 at 04:32 PM, in message
> <1339749120-7007-1-git-send-email-gjhe@xxxxxxxx>, Guanjun He
> <heguanbo@xxxxxxxxx> wrote: 
> > From: Guanjun He <heguanbo@xxxxxxxxx>
> > 
> > 	I think the osdmap destroy code shoule be protected by map_sem.
> > If I was wrong, please correct me, thanks!
> > 
> > Signed-off-by: Guanjun He <gjhe@xxxxxxxx>
> > ---
> >  net/ceph/osd_client.c |    2 ++
> >  1 files changed, 2 insertions(+), 0 deletions(-)
> > 
> > diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
> > index 1ffebed..718b100 100644
> > --- a/net/ceph/osd_client.c
> > +++ b/net/ceph/osd_client.c
> > @@ -1872,11 +1872,13 @@ void ceph_osdc_stop(struct ceph_osd_client *osdc)
> >  	destroy_workqueue(osdc->notify_wq);
> >  	cancel_delayed_work_sync(&osdc->timeout_work);
> >  	cancel_delayed_work_sync(&osdc->osds_timeout_work);
> > +	down_write(&osdc->map_sem);
> >  	if (osdc->osdmap) {
> >  		ceph_osdmap_destroy(osdc->osdmap);
> >  		osdc->osdmap = NULL;
> >  	}
> >  	remove_all_osds(osdc);
> > +	up_write(&osdc->map_sem);
> >  	mempool_destroy(osdc->req_mempool);
> >  	ceph_msgpool_destroy(&osdc->msgpool_op);
> >  	ceph_msgpool_destroy(&osdc->msgpool_op_reply);
> 
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux