On 2019/4/22 1:47 上午, Chaitanya Kulkarni wrote:
> May be we should make this as an inline function instead of macro ?
> Reason being:-
> 1. It is not a simple substitution.
> 2. It has multiple function calls.
> 3. With this patch it is now dependent on local variable declared
>     outside of macro.
> 
> Any thoughts ?
> 

Hi Chaitanya,

I agree with you. There are some symbol names shared with "caller" of
read_bucket(), so it is not very simple change to change the macro into
an inline function. At this moment I will keep the change as simple as
possible, and later I will think of change this macro into an inline
routine.

Thanks.

Coly Li


> 
> On 04/19/2019 11:24 AM, Coly Li wrote:
>> 'int ret' is defined as a local variable inside macro read_bucket().
>> Since this macro is called multiple times, and following patches will
>> use a 'int ret' variable in bch_journal_read(), this patch moves
>> definition of 'int ret' from macro read_bucket() to range of function
>> bch_journal_read().
>>
>> Signed-off-by: Coly Li <[email protected]>
>> ---
>>   drivers/md/bcache/journal.c | 5 +++--
>>   1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
>> index b2fd412715b1..6e18057d1d82 100644
>> --- a/drivers/md/bcache/journal.c
>> +++ b/drivers/md/bcache/journal.c
>> @@ -147,7 +147,7 @@ int bch_journal_read(struct cache_set *c, struct 
>> list_head *list)
>>   {
>>   #define read_bucket(b)                                                     
>> \
>>      ({                                                              \
>> -            int ret = journal_read_bucket(ca, list, b);             \
>> +            ret = journal_read_bucket(ca, list, b);                 \
>>              __set_bit(b, bitmap);                                   \
>>              if (ret < 0)                                            \
>>                      return ret;                                     \
>> @@ -156,6 +156,7 @@ int bch_journal_read(struct cache_set *c, struct 
>> list_head *list)
>>
>>      struct cache *ca;
>>      unsigned int iter;
>> +    int ret = 0;
>>
>>      for_each_cache(ca, c, iter) {
>>              struct journal_device *ja = &ca->journal;
>> @@ -267,7 +268,7 @@ int bch_journal_read(struct cache_set *c, struct 
>> list_head *list)
>>                                          struct journal_replay,
>>                                          list)->j.seq;
>>
>> -    return 0;
>> +    return ret;
>>   #undef read_bucket
>>   }
>>
>>
> 


-- 

Coly Li

Reply via email to