[lustre-devel] [PATCH 23/32] lustre: ptlrpc: make ptlrpc_last_xid an atomic64_t

NeilBrown neilb at suse.com
Wed Apr 3 16:46:44 PDT 2019


On Wed, Apr 03 2019, Andreas Dilger wrote:

> On Mar 13, 2019, at 18:11, NeilBrown <neilb at suse.com> wrote:
>> 
>> This variable is treated like ant atomic64_t,
>> so change it's type and simplify the code.
>> 
>> Signed-off-by: NeilBrown <neilb at suse.com>
>
> I can't comment on all the LNet changes, but this looks reasonable.

Who should I ask to review the LNet changes?  I have quite a few more
pending (though some I'm not really happy with yet).

>
> Reviewed-by: Andreas Dilger <adilger at whamcloud.com>

Thanks,
NeilBrown

>
>> ---
>> drivers/staging/lustre/lustre/ptlrpc/client.c |   39 ++++++-------------------
>> 1 file changed, 10 insertions(+), 29 deletions(-)
>> 
>> diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c
>> index 2514a142e799..ddf44c854200 100644
>> --- a/drivers/staging/lustre/lustre/ptlrpc/client.c
>> +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c
>> @@ -2999,8 +2999,7 @@ void ptlrpc_abort_set(struct ptlrpc_request_set *set)
>> 	}
>> }
>> 
>> -static u64 ptlrpc_last_xid;
>> -static spinlock_t ptlrpc_last_xid_lock;
>> +static atomic64_t ptlrpc_last_xid;
>> 
>> /**
>>  * Initialize the XID for the node.  This is common among all requests on
>> @@ -3021,19 +3020,20 @@ static spinlock_t ptlrpc_last_xid_lock;
>> void ptlrpc_init_xid(void)
>> {
>> 	time64_t now = ktime_get_real_seconds();
>> +	u64 xid;
>> 
>> -	spin_lock_init(&ptlrpc_last_xid_lock);
>> 	if (now < YEAR_2004) {
>> -		get_random_bytes(&ptlrpc_last_xid, sizeof(ptlrpc_last_xid));
>> -		ptlrpc_last_xid >>= 2;
>> -		ptlrpc_last_xid |= (1ULL << 61);
>> +		get_random_bytes(&xid, sizeof(xid));
>> +		xid >>= 2;
>> +		xid |= (1ULL << 61);
>> 	} else {
>> -		ptlrpc_last_xid = (u64)now << 20;
>> +		xid = (u64)now << 20;
>> 	}
>> 
>> 	/* Always need to be aligned to a power-of-two for multi-bulk BRW */
>> 	BUILD_BUG_ON(((PTLRPC_BULK_OPS_COUNT - 1) & PTLRPC_BULK_OPS_COUNT) != 0);
>> -	ptlrpc_last_xid &= PTLRPC_BULK_OPS_MASK;
>> +	xid &= PTLRPC_BULK_OPS_MASK;
>> +	atomic64_set(&ptlrpc_last_xid, xid);
>> }
>> 
>> /**
>> @@ -3050,14 +3050,7 @@ void ptlrpc_init_xid(void)
>>  */
>> u64 ptlrpc_next_xid(void)
>> {
>> -	u64 next;
>> -
>> -	spin_lock(&ptlrpc_last_xid_lock);
>> -	next = ptlrpc_last_xid + PTLRPC_BULK_OPS_COUNT;
>> -	ptlrpc_last_xid = next;
>> -	spin_unlock(&ptlrpc_last_xid_lock);
>> -
>> -	return next;
>> +	return atomic64_add_return(PTLRPC_BULK_OPS_COUNT, &ptlrpc_last_xid);
>> }
>> 
>> /**
>> @@ -3131,19 +3124,7 @@ void ptlrpc_set_bulk_mbits(struct ptlrpc_request *req)
>>  */
>> u64 ptlrpc_sample_next_xid(void)
>> {
>> -#if BITS_PER_LONG == 32
>> -	/* need to avoid possible word tearing on 32-bit systems */
>> -	u64 next;
>> -
>> -	spin_lock(&ptlrpc_last_xid_lock);
>> -	next = ptlrpc_last_xid + PTLRPC_BULK_OPS_COUNT;
>> -	spin_unlock(&ptlrpc_last_xid_lock);
>> -
>> -	return next;
>> -#else
>> -	/* No need to lock, since returned value is racy anyways */
>> -	return ptlrpc_last_xid + PTLRPC_BULK_OPS_COUNT;
>> -#endif
>> +	return atomic64_read(&ptlrpc_last_xid) + PTLRPC_BULK_OPS_COUNT;
>> }
>> EXPORT_SYMBOL(ptlrpc_sample_next_xid);
>> 
>> 
>> 
>
> Cheers, Andreas
> ---
> Andreas Dilger
> Principal Lustre Architect
> Whamcloud
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.lustre.org/pipermail/lustre-devel-lustre.org/attachments/20190404/737e6bb0/attachment.sig>


More information about the lustre-devel mailing list