@@ -112,7 +112,7 @@ struct rxrpc_call *rxrpc_find_call_by_user_ID(struct rxrpc_sock *rx,
112
112
found_extant_call :
113
113
rxrpc_get_call (call , rxrpc_call_got );
114
114
read_unlock (& rx -> call_lock );
115
- _leave (" = %p [%d]" , call , atomic_read (& call -> usage ));
115
+ _leave (" = %p [%d]" , call , refcount_read (& call -> ref ));
116
116
return call ;
117
117
}
118
118
@@ -160,7 +160,7 @@ struct rxrpc_call *rxrpc_alloc_call(struct rxrpc_sock *rx, gfp_t gfp,
160
160
spin_lock_init (& call -> notify_lock );
161
161
spin_lock_init (& call -> input_lock );
162
162
rwlock_init (& call -> state_lock );
163
- atomic_set (& call -> usage , 1 );
163
+ refcount_set (& call -> ref , 1 );
164
164
call -> debug_id = debug_id ;
165
165
call -> tx_total_len = -1 ;
166
166
call -> next_rx_timo = 20 * HZ ;
@@ -299,7 +299,7 @@ struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *rx,
299
299
call -> interruptibility = p -> interruptibility ;
300
300
call -> tx_total_len = p -> tx_total_len ;
301
301
trace_rxrpc_call (call -> debug_id , rxrpc_call_new_client ,
302
- atomic_read (& call -> usage ),
302
+ refcount_read (& call -> ref ),
303
303
here , (const void * )p -> user_call_ID );
304
304
if (p -> kernel )
305
305
__set_bit (RXRPC_CALL_KERNEL , & call -> flags );
@@ -352,7 +352,7 @@ struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *rx,
352
352
goto error_attached_to_socket ;
353
353
354
354
trace_rxrpc_call (call -> debug_id , rxrpc_call_connected ,
355
- atomic_read (& call -> usage ), here , NULL );
355
+ refcount_read (& call -> ref ), here , NULL );
356
356
357
357
rxrpc_start_call_timer (call );
358
358
@@ -372,7 +372,7 @@ struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *rx,
372
372
__rxrpc_set_call_completion (call , RXRPC_CALL_LOCAL_ERROR ,
373
373
RX_CALL_DEAD , - EEXIST );
374
374
trace_rxrpc_call (call -> debug_id , rxrpc_call_error ,
375
- atomic_read (& call -> usage ), here , ERR_PTR (- EEXIST ));
375
+ refcount_read (& call -> ref ), here , ERR_PTR (- EEXIST ));
376
376
rxrpc_release_call (rx , call );
377
377
mutex_unlock (& call -> user_mutex );
378
378
rxrpc_put_call (call , rxrpc_call_put );
@@ -386,7 +386,7 @@ struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *rx,
386
386
*/
387
387
error_attached_to_socket :
388
388
trace_rxrpc_call (call -> debug_id , rxrpc_call_error ,
389
- atomic_read (& call -> usage ), here , ERR_PTR (ret ));
389
+ refcount_read (& call -> ref ), here , ERR_PTR (ret ));
390
390
set_bit (RXRPC_CALL_DISCONNECTED , & call -> flags );
391
391
__rxrpc_set_call_completion (call , RXRPC_CALL_LOCAL_ERROR ,
392
392
RX_CALL_DEAD , ret );
@@ -442,8 +442,9 @@ void rxrpc_incoming_call(struct rxrpc_sock *rx,
442
442
bool rxrpc_queue_call (struct rxrpc_call * call )
443
443
{
444
444
const void * here = __builtin_return_address (0 );
445
- int n = atomic_fetch_add_unless (& call -> usage , 1 , 0 );
446
- if (n == 0 )
445
+ int n ;
446
+
447
+ if (!__refcount_inc_not_zero (& call -> ref , & n ))
447
448
return false;
448
449
if (rxrpc_queue_work (& call -> processor ))
449
450
trace_rxrpc_call (call -> debug_id , rxrpc_call_queued , n + 1 ,
@@ -459,7 +460,7 @@ bool rxrpc_queue_call(struct rxrpc_call *call)
459
460
bool __rxrpc_queue_call (struct rxrpc_call * call )
460
461
{
461
462
const void * here = __builtin_return_address (0 );
462
- int n = atomic_read (& call -> usage );
463
+ int n = refcount_read (& call -> ref );
463
464
ASSERTCMP (n , >=, 1 );
464
465
if (rxrpc_queue_work (& call -> processor ))
465
466
trace_rxrpc_call (call -> debug_id , rxrpc_call_queued_ref , n ,
@@ -476,7 +477,7 @@ void rxrpc_see_call(struct rxrpc_call *call)
476
477
{
477
478
const void * here = __builtin_return_address (0 );
478
479
if (call ) {
479
- int n = atomic_read (& call -> usage );
480
+ int n = refcount_read (& call -> ref );
480
481
481
482
trace_rxrpc_call (call -> debug_id , rxrpc_call_seen , n ,
482
483
here , NULL );
@@ -486,11 +487,11 @@ void rxrpc_see_call(struct rxrpc_call *call)
486
487
bool rxrpc_try_get_call (struct rxrpc_call * call , enum rxrpc_call_trace op )
487
488
{
488
489
const void * here = __builtin_return_address (0 );
489
- int n = atomic_fetch_add_unless ( & call -> usage , 1 , 0 ) ;
490
+ int n ;
490
491
491
- if (n == 0 )
492
+ if (! __refcount_inc_not_zero ( & call -> ref , & n ) )
492
493
return false;
493
- trace_rxrpc_call (call -> debug_id , op , n , here , NULL );
494
+ trace_rxrpc_call (call -> debug_id , op , n + 1 , here , NULL );
494
495
return true;
495
496
}
496
497
@@ -500,9 +501,10 @@ bool rxrpc_try_get_call(struct rxrpc_call *call, enum rxrpc_call_trace op)
500
501
void rxrpc_get_call (struct rxrpc_call * call , enum rxrpc_call_trace op )
501
502
{
502
503
const void * here = __builtin_return_address (0 );
503
- int n = atomic_inc_return ( & call -> usage ) ;
504
+ int n ;
504
505
505
- trace_rxrpc_call (call -> debug_id , op , n , here , NULL );
506
+ __refcount_inc (& call -> ref , & n );
507
+ trace_rxrpc_call (call -> debug_id , op , n + 1 , here , NULL );
506
508
}
507
509
508
510
/*
@@ -527,10 +529,10 @@ void rxrpc_release_call(struct rxrpc_sock *rx, struct rxrpc_call *call)
527
529
struct rxrpc_connection * conn = call -> conn ;
528
530
bool put = false;
529
531
530
- _enter ("{%d,%d}" , call -> debug_id , atomic_read (& call -> usage ));
532
+ _enter ("{%d,%d}" , call -> debug_id , refcount_read (& call -> ref ));
531
533
532
534
trace_rxrpc_call (call -> debug_id , rxrpc_call_release ,
533
- atomic_read (& call -> usage ),
535
+ refcount_read (& call -> ref ),
534
536
here , (const void * )call -> flags );
535
537
536
538
ASSERTCMP (call -> state , = = , RXRPC_CALL_COMPLETE );
@@ -619,14 +621,14 @@ void rxrpc_put_call(struct rxrpc_call *call, enum rxrpc_call_trace op)
619
621
struct rxrpc_net * rxnet = call -> rxnet ;
620
622
const void * here = __builtin_return_address (0 );
621
623
unsigned int debug_id = call -> debug_id ;
624
+ bool dead ;
622
625
int n ;
623
626
624
627
ASSERT (call != NULL );
625
628
626
- n = atomic_dec_return (& call -> usage );
629
+ dead = __refcount_dec_and_test (& call -> ref , & n );
627
630
trace_rxrpc_call (debug_id , op , n , here , NULL );
628
- ASSERTCMP (n , >=, 0 );
629
- if (n == 0 ) {
631
+ if (dead ) {
630
632
_debug ("call %d dead" , call -> debug_id );
631
633
ASSERTCMP (call -> state , = = , RXRPC_CALL_COMPLETE );
632
634
@@ -716,7 +718,7 @@ void rxrpc_destroy_all_calls(struct rxrpc_net *rxnet)
716
718
list_del_init (& call -> link );
717
719
718
720
pr_err ("Call %p still in use (%d,%s,%lx,%lx)!\n" ,
719
- call , atomic_read (& call -> usage ),
721
+ call , refcount_read (& call -> ref ),
720
722
rxrpc_call_states [call -> state ],
721
723
call -> flags , call -> events );
722
724
0 commit comments