[sheepdog] [PATCH 3/3] collie: don't use uint64_t for atomic operations

MORITA Kazutaka morita.kazutaka at lab.ntt.co.jp
Fri Aug 2 11:00:30 CEST 2013


At Fri, 2 Aug 2013 16:34:00 +0800,
Liu Yuan wrote:
> 
> On Fri, Aug 02, 2013 at 04:14:41PM +0900, MORITA Kazutaka wrote:
> > From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> > 
> > Atomic operations against 64 bit integers are not allowed on 32 bit
> > architectures.  Using unsigned long instead of uint64_t fixes the
> > problem and doesn't hurt x86_64.
> > 
> > Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> > ---
> >  collie/farm/farm.c |    4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/collie/farm/farm.c b/collie/farm/farm.c
> > index 2a4e307..4b43f3d 100644
> > --- a/collie/farm/farm.c
> > +++ b/collie/farm/farm.c
> > @@ -255,7 +255,7 @@ static void save_object_done(struct work *work)
> >  {
> >  	struct snapshot_work *sw = container_of(work, struct snapshot_work,
> >  						work);
> > -	static uint64_t saved;
> > +	static unsigned long saved;
> >  
> >  	if (uatomic_is_true(&work_error))
> >  		goto out;
> > @@ -329,7 +329,7 @@ static void do_load_object(struct work *work)
> >  	void *buffer = NULL;
> >  	size_t size;
> >  	struct snapshot_work *sw;
> > -	static uint64_t loaded;
> > +	static unsigned long loaded;
> >  
> >  	if (uatomic_is_true(&work_error))
> >  		return;
> 
> So this means for 32 bit machine, we can only support up to 4G objects, that is
> 16P storage in total?

I think so, but isn't it enough for 32 bit machines?  I think most
users use 64 bit machines to create large storage system.

> Do you know why uatomic can't operate on u64?

Sorry, I don't know.

If we really want to use a 64 bit integer for atomic operations, we
should use pthread_mutex_lock instead of urcu macros.  IMHO, it looks
overkill here.

Thanks,

Kazutaka



More information about the sheepdog mailing list