[sheepdog] [PATCH 3/3] collie: don't use uint64_t for atomic operations
YunQiang Su
wzssyqa at gmail.com
Mon Aug 5 07:50:07 CEST 2013
On Mon, Aug 5, 2013 at 1:16 PM, MORITA Kazutaka
<morita.kazutaka at lab.ntt.co.jp> wrote:
> At Mon, 5 Aug 2013 12:59:00 +0800,
> YunQiang Su wrote:
>>
>> On Fri, Aug 2, 2013 at 5:00 PM, MORITA Kazutaka
>> <morita.kazutaka at lab.ntt.co.jp> wrote:
>> > 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.
>> In C11, there is a new _Atomic. Is it suit for us here?
>
> Does it support atomic operations for 64-bit variables on 32-bit
yes, it can.
> machines? Anyway, moving to C11 looks much more overkill to me.
it asks for gcc 4.7+
>
> Thanks,
>
> Kazutaka
--
YunQiang Su
More information about the sheepdog
mailing list