2 * Interface between ext4 and JBD
7 int __ext4_journal_get_undo_access(const char *where
, handle_t
*handle
,
8 struct buffer_head
*bh
)
12 if (ext4_handle_valid(handle
)) {
13 err
= jbd2_journal_get_undo_access(handle
, bh
);
15 ext4_journal_abort_handle(where
, __func__
, bh
,
21 int __ext4_journal_get_write_access(const char *where
, handle_t
*handle
,
22 struct buffer_head
*bh
)
26 if (ext4_handle_valid(handle
)) {
27 err
= jbd2_journal_get_write_access(handle
, bh
);
29 ext4_journal_abort_handle(where
, __func__
, bh
,
35 int __ext4_journal_forget(const char *where
, handle_t
*handle
,
36 struct buffer_head
*bh
)
40 if (ext4_handle_valid(handle
)) {
41 err
= jbd2_journal_forget(handle
, bh
);
43 ext4_journal_abort_handle(where
, __func__
, bh
,
49 int __ext4_journal_revoke(const char *where
, handle_t
*handle
,
50 ext4_fsblk_t blocknr
, struct buffer_head
*bh
)
54 if (ext4_handle_valid(handle
)) {
55 err
= jbd2_journal_revoke(handle
, blocknr
, bh
);
57 ext4_journal_abort_handle(where
, __func__
, bh
,
63 int __ext4_journal_get_create_access(const char *where
,
64 handle_t
*handle
, struct buffer_head
*bh
)
68 if (ext4_handle_valid(handle
)) {
69 err
= jbd2_journal_get_create_access(handle
, bh
);
71 ext4_journal_abort_handle(where
, __func__
, bh
,
77 int __ext4_handle_dirty_metadata(const char *where
, handle_t
*handle
,
78 struct inode
*inode
, struct buffer_head
*bh
)
82 if (ext4_handle_valid(handle
)) {
83 err
= jbd2_journal_dirty_metadata(handle
, bh
);
85 ext4_journal_abort_handle(where
, __func__
, bh
,
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",
96 (unsigned long long) bh
->b_blocknr
);