2020-01-22 07:07:04

by Shijie Luo

[permalink] [raw]
Subject: [PATCH] jbd2: modify assert condition in __journal_remove_journal_head

Only when jh->b_jcount = 0 in jbd2_journal_put_journal_head, we are allowed
to call __journal_remove_journal_head.

Signed-off-by: Shijie Luo <[email protected]>
---
fs/jbd2/journal.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index 5e408ee24a1a..4f417a7f1ae0 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -2556,7 +2556,7 @@ static void __journal_remove_journal_head(struct buffer_head *bh)
{
struct journal_head *jh = bh2jh(bh);

- J_ASSERT_JH(jh, jh->b_jcount >= 0);
+ J_ASSERT_JH(jh, jh->b_jcount == 0);
J_ASSERT_JH(jh, jh->b_transaction == NULL);
J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
J_ASSERT_JH(jh, jh->b_cp_transaction == NULL);
--
2.19.1


2020-01-22 08:50:48

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH] jbd2: modify assert condition in __journal_remove_journal_head

On Wed 22-01-20 02:05:48, Shijie Luo wrote:
> Only when jh->b_jcount = 0 in jbd2_journal_put_journal_head, we are allowed
> to call __journal_remove_journal_head.
>
> Signed-off-by: Shijie Luo <[email protected]>

Thanks for the patch. You're right but given that
__journal_remove_journal_head() has exactly one caller and that checks for
jh->b_jcount == 0 just before calling __journal_remove_journal_head(), I
think the assertion is pretty pointless. So I'd rather just remove it
completely.

Honza

> ---
> fs/jbd2/journal.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
> index 5e408ee24a1a..4f417a7f1ae0 100644
> --- a/fs/jbd2/journal.c
> +++ b/fs/jbd2/journal.c
> @@ -2556,7 +2556,7 @@ static void __journal_remove_journal_head(struct buffer_head *bh)
> {
> struct journal_head *jh = bh2jh(bh);
>
> - J_ASSERT_JH(jh, jh->b_jcount >= 0);
> + J_ASSERT_JH(jh, jh->b_jcount == 0);
> J_ASSERT_JH(jh, jh->b_transaction == NULL);
> J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
> J_ASSERT_JH(jh, jh->b_cp_transaction == NULL);
> --
> 2.19.1
>
--
Jan Kara <[email protected]>
SUSE Labs, CR

2020-01-23 06:26:53

by Shijie Luo

[permalink] [raw]
Subject: Re: [PATCH] jbd2: modify assert condition in __journal_remove_journal_head


On 2020/1/22 16:50, Jan Kara wrote:
> On Wed 22-01-20 02:05:48, Shijie Luo wrote:
>> Only when jh->b_jcount = 0 in jbd2_journal_put_journal_head, we are allowed
>> to call __journal_remove_journal_head.
>>
>> Signed-off-by: Shijie Luo <[email protected]>
> Thanks for the patch. You're right but given that
> __journal_remove_journal_head() has exactly one caller and that checks for
> jh->b_jcount == 0 just before calling __journal_remove_journal_head(), I
> think the assertion is pretty pointless. So I'd rather just remove it
> completely.
>
> Honza
Thanks for your review. It 's much better to remove the assertion.
>> ---
>> fs/jbd2/journal.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
>> index 5e408ee24a1a..4f417a7f1ae0 100644
>> --- a/fs/jbd2/journal.c
>> +++ b/fs/jbd2/journal.c
>> @@ -2556,7 +2556,7 @@ static void __journal_remove_journal_head(struct buffer_head *bh)
>> {
>> struct journal_head *jh = bh2jh(bh);
>>
>> - J_ASSERT_JH(jh, jh->b_jcount >= 0);
>> + J_ASSERT_JH(jh, jh->b_jcount == 0);
>> J_ASSERT_JH(jh, jh->b_transaction == NULL);
>> J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
>> J_ASSERT_JH(jh, jh->b_cp_transaction == NULL);
>> --
>> 2.19.1
>>