/* * Wrappers for jbd2_journal_start/end. */ handle_t *__ext4_journal_start_sb(struct super_block *sb, unsigned int line, int type, int nblocks) { journal_t *journal; might_sleep(); trace_ext4_journal_start(sb, nblocks, _RET_IP_); if (sb->s_flags & MS_RDONLY && !journal_current_handle()) return ERR_PTR(-EROFS); WARN_ON(sb->s_writers.frozen == SB_FREEZE_COMPLETE); journal = EXT4_SB(sb)->s_journal; if (!journal) return ext4_get_nojournal(); /* * Special case here: if the journal has aborted behind our * backs (eg. EIO in the commit thread), then we still need to * take the FS itself readonly cleanly. */ if (is_journal_aborted(journal)) { ext4_abort(sb, "Detected aborted journal"); return ERR_PTR(-EROFS); } return jbd2__journal_start(journal, nblocks, GFP_NOFS, type, line); }
handle_t *__ext4_journal_start_sb(struct super_block *sb, unsigned int line, int type, int blocks, int rsv_blocks) { journal_t *journal; int err; trace_ext4_journal_start(sb, blocks, rsv_blocks, _RET_IP_); err = ext4_journal_check_start(sb); if (err < 0) return ERR_PTR(err); journal = EXT4_SB(sb)->s_journal; if (!journal) return ext4_get_nojournal(); return jbd2__journal_start(journal, blocks, rsv_blocks, GFP_NOFS, type, line); }
handle_t *jbd2_journal_start(journal_t *journal, int nblocks) { return jbd2__journal_start(journal, nblocks, GFP_NOFS); }