jbd2: Make jbd2_handle_buffer_credits() handle reserved handles
diff mbox series

Message ID 20191115102210.29445-1-jack@suse.cz
State New
Headers show
Series
  • jbd2: Make jbd2_handle_buffer_credits() handle reserved handles
Related show

Commit Message

Jan Kara Nov. 15, 2019, 10:22 a.m. UTC
The helper jbd2_handle_buffer_credits() doesn't correctly handle reserved
handles which can lead to crashes. Fix it getting of journal pointer to
work for reserved handles as well.

Fixes: a9a8344ee171 ("ext4, jbd2: Provide accessor function for handle credits")
Reported-by: Eric Biggers <ebiggers@kernel.org>
Signed-off-by: Jan Kara <jack@suse.cz>
---
 include/linux/jbd2.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Theodore Ts'o Nov. 15, 2019, 2:23 p.m. UTC | #1
On Fri, Nov 15, 2019 at 11:22:10AM +0100, Jan Kara wrote:
> The helper jbd2_handle_buffer_credits() doesn't correctly handle reserved
> handles which can lead to crashes. Fix it getting of journal pointer to
> work for reserved handles as well.
> 
> Fixes: a9a8344ee171 ("ext4, jbd2: Provide accessor function for handle credits")
> Reported-by: Eric Biggers <ebiggers@kernel.org>
> Signed-off-by: Jan Kara <jack@suse.cz>

Thanks, applied.

					- Ted
Ritesh Harjani Nov. 18, 2019, 7:59 a.m. UTC | #2
On 11/15/19 3:52 PM, Jan Kara wrote:
> The helper jbd2_handle_buffer_credits() doesn't correctly handle reserved
> handles which can lead to crashes. Fix it getting of journal pointer to
> work for reserved handles as well.
> 
> Fixes: a9a8344ee171 ("ext4, jbd2: Provide accessor function for handle credits")
> Reported-by: Eric Biggers <ebiggers@kernel.org>
> Signed-off-by: Jan Kara <jack@suse.cz>

Thanks Jan,
Yes, this also fixes the problem for me with dioread_nolock on ppc64 
machine.

You may add -

Tested-by: Ritesh Harjani <riteshh@linux.ibm.com>


> ---
>   include/linux/jbd2.h | 8 ++++++--
>   1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
> index 3115eeb44039..a23a3528e07a 100644
> --- a/include/linux/jbd2.h
> +++ b/include/linux/jbd2.h
> @@ -1648,10 +1648,14 @@ static inline tid_t  jbd2_get_latest_transaction(journal_t *journal)
>   	return tid;
>   }
> 
> -
>   static inline int jbd2_handle_buffer_credits(handle_t *handle)
>   {
> -	journal_t *journal = handle->h_transaction->t_journal;
> +	journal_t *journal;
> +
> +	if (!handle->h_reserved)
> +		journal = handle->h_transaction->t_journal;
> +	else
> +		journal = handle->h_journal;
> 
>   	return handle->h_total_credits -
>   		DIV_ROUND_UP(handle->h_revoke_credits_requested,
>

Patch
diff mbox series

diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
index 3115eeb44039..a23a3528e07a 100644
--- a/include/linux/jbd2.h
+++ b/include/linux/jbd2.h
@@ -1648,10 +1648,14 @@  static inline tid_t  jbd2_get_latest_transaction(journal_t *journal)
 	return tid;
 }
 
-
 static inline int jbd2_handle_buffer_credits(handle_t *handle)
 {
-	journal_t *journal = handle->h_transaction->t_journal;
+	journal_t *journal;
+
+	if (!handle->h_reserved)
+		journal = handle->h_transaction->t_journal;
+	else
+		journal = handle->h_journal;
 
 	return handle->h_total_credits -
 		DIV_ROUND_UP(handle->h_revoke_credits_requested,