Showing error 1871

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: fs/jbd2/transaction.c
Line in file: 2067
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

2037                J_ASSERT(jinode->i_transaction ==
2038                                        journal->j_committing_transaction);
2039                jinode->i_next_transaction = transaction;
2040                goto done;
2041        }
2042        /* Not on any transaction list... */
2043        J_ASSERT(!jinode->i_next_transaction);
2044        jinode->i_transaction = transaction;
2045        list_add(&jinode->i_list, &transaction->t_inode_list);
2046done:
2047        spin_unlock(&journal->j_list_lock);
2048
2049        return 0;
2050}
2051
2052/*
2053 * This function must be called when inode is journaled in ordered mode
2054 * before truncation happens. It starts writeout of truncated part in
2055 * case it is in the committing transaction so that we stand to ordered
2056 * mode consistency guarantees.
2057 */
2058int jbd2_journal_begin_ordered_truncate(struct jbd2_inode *inode,
2059                                        loff_t new_size)
2060{
2061        journal_t *journal;
2062        transaction_t *commit_trans;
2063        int ret = 0;
2064
2065        if (!inode->i_transaction && !inode->i_next_transaction)
2066                goto out;
2067        journal = inode->i_transaction->t_journal;
2068        spin_lock(&journal->j_state_lock);
2069        commit_trans = journal->j_committing_transaction;
2070        spin_unlock(&journal->j_state_lock);
2071        if (inode->i_transaction == commit_trans) {
2072                ret = filemap_fdatawrite_range(inode->i_vfs_inode->i_mapping,
2073                        new_size, LLONG_MAX);
2074                if (ret)
2075                        jbd2_journal_abort(journal, ret);
2076        }
2077out:
Show full sources