ext4: Allow ext4 to run without a journal
[linux-block.git] / fs / ext4 / ext4_jbd2.c
CommitLineData
8984d137
AM
1/*
2 * Interface between ext4 and JBD
3 */
4
3dcf5451 5#include "ext4_jbd2.h"
8984d137
AM
6
7int __ext4_journal_get_undo_access(const char *where, handle_t *handle,
8 struct buffer_head *bh)
9{
0390131b
FM
10 int err = 0;
11
12 if (ext4_handle_valid(handle)) {
13 err = jbd2_journal_get_undo_access(handle, bh);
14 if (err)
15 ext4_journal_abort_handle(where, __func__, bh,
16 handle, err);
17 }
8984d137
AM
18 return err;
19}
20
21int __ext4_journal_get_write_access(const char *where, handle_t *handle,
22 struct buffer_head *bh)
23{
0390131b
FM
24 int err = 0;
25
26 if (ext4_handle_valid(handle)) {
27 err = jbd2_journal_get_write_access(handle, bh);
28 if (err)
29 ext4_journal_abort_handle(where, __func__, bh,
30 handle, err);
31 }
8984d137
AM
32 return err;
33}
34
35int __ext4_journal_forget(const char *where, handle_t *handle,
36 struct buffer_head *bh)
37{
0390131b
FM
38 int err = 0;
39
40 if (ext4_handle_valid(handle)) {
41 err = jbd2_journal_forget(handle, bh);
42 if (err)
43 ext4_journal_abort_handle(where, __func__, bh,
44 handle, err);
45 }
8984d137
AM
46 return err;
47}
48
49int __ext4_journal_revoke(const char *where, handle_t *handle,
50 ext4_fsblk_t blocknr, struct buffer_head *bh)
51{
0390131b
FM
52 int err = 0;
53
54 if (ext4_handle_valid(handle)) {
55 err = jbd2_journal_revoke(handle, blocknr, bh);
56 if (err)
57 ext4_journal_abort_handle(where, __func__, bh,
58 handle, err);
59 }
8984d137
AM
60 return err;
61}
62
63int __ext4_journal_get_create_access(const char *where,
64 handle_t *handle, struct buffer_head *bh)
65{
0390131b
FM
66 int err = 0;
67
68 if (ext4_handle_valid(handle)) {
69 err = jbd2_journal_get_create_access(handle, bh);
70 if (err)
71 ext4_journal_abort_handle(where, __func__, bh,
72 handle, err);
73 }
8984d137
AM
74 return err;
75}
76
0390131b
FM
77int __ext4_handle_dirty_metadata(const char *where, handle_t *handle,
78 struct inode *inode, struct buffer_head *bh)
8984d137 79{
0390131b
FM
80 int err = 0;
81
82 if (ext4_handle_valid(handle)) {
83 err = jbd2_journal_dirty_metadata(handle, bh);
84 if (err)
85 ext4_journal_abort_handle(where, __func__, bh,
86 handle, err);
87 } else {
88 mark_buffer_dirty(bh);
89 if (inode && inode_needs_sync(inode)) {
90 sync_dirty_buffer(bh);
91 if (buffer_req(bh) && !buffer_uptodate(bh)) {
92 ext4_error(inode->i_sb, __func__,
93 "IO error syncing inode, "
94 "inode=%lu, block=%llu",
95 inode->i_ino,
96 (unsigned long long) bh->b_blocknr);
97 err = -EIO;
98 }
99 }
100 }
8984d137
AM
101 return err;
102}