| From 01215d3edb0f384ddeaa5e4a22c1ae5ff634149f Mon Sep 17 00:00:00 2001 |
| From: "zhangyi (F)" <yi.zhang@huawei.com> |
| Date: Thu, 21 Feb 2019 11:24:09 -0500 |
| Subject: jbd2: fix compile warning when using JBUFFER_TRACE |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: zhangyi (F) <yi.zhang@huawei.com> |
| |
| commit 01215d3edb0f384ddeaa5e4a22c1ae5ff634149f upstream. |
| |
| The jh pointer may be used uninitialized in the two cases below and the |
| compiler complain about it when enabling JBUFFER_TRACE macro, fix them. |
| |
| In file included from fs/jbd2/transaction.c:19:0: |
| fs/jbd2/transaction.c: In function ‘jbd2_journal_get_undo_access’: |
| ./include/linux/jbd2.h:1637:38: warning: ‘jh’ is used uninitialized in this function [-Wuninitialized] |
| #define JBUFFER_TRACE(jh, info) do { printk("%s: %d\n", __func__, jh->b_jcount);} while (0) |
| ^ |
| fs/jbd2/transaction.c:1219:23: note: ‘jh’ was declared here |
| struct journal_head *jh; |
| ^ |
| In file included from fs/jbd2/transaction.c:19:0: |
| fs/jbd2/transaction.c: In function ‘jbd2_journal_dirty_metadata’: |
| ./include/linux/jbd2.h:1637:38: warning: ‘jh’ may be used uninitialized in this function [-Wmaybe-uninitialized] |
| #define JBUFFER_TRACE(jh, info) do { printk("%s: %d\n", __func__, jh->b_jcount);} while (0) |
| ^ |
| fs/jbd2/transaction.c:1332:23: note: ‘jh’ was declared here |
| struct journal_head *jh; |
| ^ |
| |
| Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> |
| Signed-off-by: Theodore Ts'o <tytso@mit.edu> |
| Cc: stable@vger.kernel.org |
| Reviewed-by: Jan Kara <jack@suse.cz> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/jbd2/transaction.c | 16 ++++++++-------- |
| 1 file changed, 8 insertions(+), 8 deletions(-) |
| |
| --- a/fs/jbd2/transaction.c |
| +++ b/fs/jbd2/transaction.c |
| @@ -1252,11 +1252,12 @@ int jbd2_journal_get_undo_access(handle_ |
| struct journal_head *jh; |
| char *committed_data = NULL; |
| |
| - JBUFFER_TRACE(jh, "entry"); |
| if (jbd2_write_access_granted(handle, bh, true)) |
| return 0; |
| |
| jh = jbd2_journal_add_journal_head(bh); |
| + JBUFFER_TRACE(jh, "entry"); |
| + |
| /* |
| * Do this first --- it can drop the journal lock, so we want to |
| * make sure that obtaining the committed_data is done |
| @@ -1367,15 +1368,17 @@ int jbd2_journal_dirty_metadata(handle_t |
| |
| if (is_handle_aborted(handle)) |
| return -EROFS; |
| - if (!buffer_jbd(bh)) { |
| - ret = -EUCLEAN; |
| - goto out; |
| - } |
| + if (!buffer_jbd(bh)) |
| + return -EUCLEAN; |
| + |
| /* |
| * We don't grab jh reference here since the buffer must be part |
| * of the running transaction. |
| */ |
| jh = bh2jh(bh); |
| + jbd_debug(5, "journal_head %p\n", jh); |
| + JBUFFER_TRACE(jh, "entry"); |
| + |
| /* |
| * This and the following assertions are unreliable since we may see jh |
| * in inconsistent state unless we grab bh_state lock. But this is |
| @@ -1409,9 +1412,6 @@ int jbd2_journal_dirty_metadata(handle_t |
| } |
| |
| journal = transaction->t_journal; |
| - jbd_debug(5, "journal_head %p\n", jh); |
| - JBUFFER_TRACE(jh, "entry"); |
| - |
| jbd_lock_bh_state(bh); |
| |
| if (jh->b_modified == 0) { |