/* * 'nblocks' is what you want to add to the current * transaction. extend_trans will either extend the current handle by * nblocks, or commit it and start a new one with nblocks credits. * * This might call journal_restart() which will commit dirty buffers * and then restart the transaction. Before calling * ocfs2_extend_trans(), any changed blocks should have been * dirtied. After calling it, all blocks which need to be changed must * go through another set of journal_access/journal_dirty calls. * * WARNING: This will not release any semaphores or disk locks taken * during the transaction, so make sure they were taken *before* * start_trans or we'll have ordering deadlocks. * * WARNING2: Note that we do *not* drop j_trans_barrier here. This is * good because transaction ids haven't yet been recorded on the * cluster locks associated with this handle. */ int ocfs2_extend_trans(handle_t *handle, int nblocks) { int status; BUG_ON(!handle); BUG_ON(!nblocks); mlog_entry_void(); mlog(0, "Trying to extend transaction by %d blocks\n", nblocks); #ifdef OCFS2_DEBUG_FS status = 1; #else status = journal_extend(handle, nblocks); if (status < 0) { mlog_errno(status); goto bail; } #endif if (status > 0) { mlog(0, "journal_extend failed, trying journal_restart\n"); status = journal_restart(handle, nblocks); if (status < 0) { mlog_errno(status); goto bail; } } status = 0; bail: mlog_exit(status); return status; }
static inline int _mlowerfs_ext3_journal_extend(handle_t *handle, int nblocks) { return journal_extend(handle, nblocks); }