Skip to contentSkip to conversation

jbd: Add fixed tracepoints

DISCUSSION Dan Carpenter 2 participants 2 messages Mar 18, 2015

lore
Share & tools
lore
#0 lore raw

Hello Lukas Czerner,

The patch 99cb1a318c37: "jbd: Add fixed tracepoints" from May 23, 2011, leads to the following static checker warning:

fs/jbd/commit.c:1016 journal_commit_transaction()
warn: 'commit_transaction' was already freed.

fs/jbd/commit.c
993 spin_unlock(&journal->j_state_lock);
994
995 if (commit_transaction->t_checkpoint_list == NULL &&
996 commit_transaction->t_checkpoint_io_list == NULL) {

   997                  __journal_drop_transaction(journal, commit_transaction);
                                                            ^^^^^^^^^^^^^^^^^^

Freed here.

998 } else {
999 if (journal->j_checkpoint_transactions == NULL) {

  1000                          journal->j_checkpoint_transactions = commit_transaction;
  1001                          commit_transaction->t_cpnext = commit_transaction;
  1002                          commit_transaction->t_cpprev = commit_transaction;
  1003                  } else {
  1004                          commit_transaction->t_cpnext =
  1005                                  journal->j_checkpoint_transactions;
  1006                          commit_transaction->t_cpprev =
  1007                                  commit_transaction->t_cpnext->t_cpprev;
  1008                          commit_transaction->t_cpnext->t_cpprev =
  1009                                  commit_transaction;
  1010                          commit_transaction->t_cpprev->t_cpnext =
  1011                                  commit_transaction;
  1012                  }
  1013          }
  1014          spin_unlock(&journal->j_list_lock);
  1015  
  1016          trace_jbd_end_commit(journal, commit_transaction);
                                              ^^^^^^^^^^^^^^^^^^

Dereferenced here.

1017 jbd_debug(1, "JBD: commit %d complete, head %d\n",
1018 journal->j_commit_sequence, journal->j_tail_sequence);
1019
1020 wake_up(&journal->j_wait_done_commit);
1021 }

regards,
dan carpenter

#1 lore raw
Quoted 10 lines · Dan Carpenter

Date: Wed, 18 Mar 2015 11:05:33 +0300
From: Dan Carpenter <[email protected]>
To: [email protected]
Cc: [email protected]
Subject: re: jbd: Add fixed tracepoints

Hello Lukas Czerner,

The patch 99cb1a318c37: "jbd: Add fixed tracepoints" from May 23, 2011, leads to the following static checker warning:

Hi Dan,

thanks for the report. I'll send a fix.

-Lukas

Quoted 44 lines

fs/jbd/commit.c:1016 journal_commit_transaction()
warn: 'commit_transaction' was already freed.

fs/jbd/commit.c

   993          spin_unlock(&journal->j_state_lock);
   994  
   995          if (commit_transaction->t_checkpoint_list == NULL &&
   996              commit_transaction->t_checkpoint_io_list == NULL) {
   997                  __journal_drop_transaction(journal, commit_transaction);
                                                            ^^^^^^^^^^^^^^^^^^

Freed here.

   998          } else {
   999                  if (journal->j_checkpoint_transactions == NULL) {
  1000                          journal->j_checkpoint_transactions = commit_transaction;
  1001                          commit_transaction->t_cpnext = commit_transaction;
  1002                          commit_transaction->t_cpprev = commit_transaction;
  1003                  } else {
  1004                          commit_transaction->t_cpnext =
  1005                                  journal->j_checkpoint_transactions;
  1006                          commit_transaction->t_cpprev =
  1007                                  commit_transaction->t_cpnext->t_cpprev;
  1008                          commit_transaction->t_cpnext->t_cpprev =
  1009                                  commit_transaction;
  1010                          commit_transaction->t_cpprev->t_cpnext =
  1011                                  commit_transaction;
  1012                  }
  1013          }
  1014          spin_unlock(&journal->j_list_lock);
  1015  
  1016          trace_jbd_end_commit(journal, commit_transaction);
                                              ^^^^^^^^^^^^^^^^^^

Dereferenced here.

1017 jbd_debug(1, "JBD: commit %d complete, head %d\n",
1018 journal->j_commit_sequence, journal->j_tail_sequence);
1019
1020 wake_up(&journal->j_wait_done_commit);
1021 }

regards,
dan carpenter