2037 J_ASSERT(jinode->i_transaction ==
2038 journal->j_committing_transaction);
2039 jinode->i_next_transaction = transaction;
2040 goto done;
2041 }
2042
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
2054
2055
2056
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: