diff options
author | Theodore Ts'o <tytso@mit.edu> | 2009-11-22 20:52:12 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2009-11-22 20:52:12 -0500 |
commit | d6797d14b1640d088652c72508b529a3aea479e3 (patch) | |
tree | 2e608c3e362b94439a2e7503b7d97cb3891bb101 /fs/ext4/inode.c | |
parent | e3bb52ae2bb9573e84c17b8e3560378d13a5c798 (diff) |
ext4: move ext4_forget() to ext4_jbd2.c
The ext4_forget() function better belongs in ext4_jbd2.c. This will
allow us to do some cleanup of the ext4_journal_revoke() and
ext4_journal_forget() functions, as well as giving us better error
reporting since we can report the caller of ext4_forget() when things
go wrong.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/inode.c')
-rw-r--r-- | fs/ext4/inode.c | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 3673ec7b1c98..fa37f9504ece 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -71,59 +71,6 @@ static int ext4_inode_is_fast_symlink(struct inode *inode) | |||
71 | } | 71 | } |
72 | 72 | ||
73 | /* | 73 | /* |
74 | * The ext4 forget function must perform a revoke if we are freeing data | ||
75 | * which has been journaled. Metadata (eg. indirect blocks) must be | ||
76 | * revoked in all cases. | ||
77 | * | ||
78 | * "bh" may be NULL: a metadata block may have been freed from memory | ||
79 | * but there may still be a record of it in the journal, and that record | ||
80 | * still needs to be revoked. | ||
81 | * | ||
82 | * If the handle isn't valid we're not journaling, but we still need to | ||
83 | * call into ext4_journal_revoke() to put the buffer head. | ||
84 | */ | ||
85 | int ext4_forget(handle_t *handle, int is_metadata, struct inode *inode, | ||
86 | struct buffer_head *bh, ext4_fsblk_t blocknr) | ||
87 | { | ||
88 | int err; | ||
89 | |||
90 | might_sleep(); | ||
91 | |||
92 | trace_ext4_forget(inode, is_metadata, blocknr); | ||
93 | BUFFER_TRACE(bh, "enter"); | ||
94 | |||
95 | jbd_debug(4, "forgetting bh %p: is_metadata = %d, mode %o, " | ||
96 | "data mode %x\n", | ||
97 | bh, is_metadata, inode->i_mode, | ||
98 | test_opt(inode->i_sb, DATA_FLAGS)); | ||
99 | |||
100 | /* Never use the revoke function if we are doing full data | ||
101 | * journaling: there is no need to, and a V1 superblock won't | ||
102 | * support it. Otherwise, only skip the revoke on un-journaled | ||
103 | * data blocks. */ | ||
104 | |||
105 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA || | ||
106 | (!is_metadata && !ext4_should_journal_data(inode))) { | ||
107 | if (bh) { | ||
108 | BUFFER_TRACE(bh, "call jbd2_journal_forget"); | ||
109 | return ext4_journal_forget(handle, bh); | ||
110 | } | ||
111 | return 0; | ||
112 | } | ||
113 | |||
114 | /* | ||
115 | * data!=journal && (is_metadata || should_journal_data(inode)) | ||
116 | */ | ||
117 | BUFFER_TRACE(bh, "call ext4_journal_revoke"); | ||
118 | err = ext4_journal_revoke(handle, blocknr, bh); | ||
119 | if (err) | ||
120 | ext4_abort(inode->i_sb, __func__, | ||
121 | "error %d when attempting revoke", err); | ||
122 | BUFFER_TRACE(bh, "exit"); | ||
123 | return err; | ||
124 | } | ||
125 | |||
126 | /* | ||
127 | * Work out how many blocks we need to proceed with the next chunk of a | 74 | * Work out how many blocks we need to proceed with the next chunk of a |
128 | * truncate transaction. | 75 | * truncate transaction. |
129 | */ | 76 | */ |