ext4: move the jbd2 wrapper functions out of super.c
authorTheodore Ts'o <tytso@mit.edu>
Fri, 8 Feb 2013 18:00:31 +0000 (13:00 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 8 Feb 2013 18:00:31 +0000 (13:00 -0500)
Move the jbd2 wrapper functions which start and stop handles out of
super.c, where they don't really logically belong, and into
ext4_jbd2.c.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/ext4.h
fs/ext4/ext4_jbd2.c
fs/ext4/super.c

index d93393eb5f2d3ed9fd82322550223a0458ad08a1..a5ae87c51401638ee187c58d35e1c312b04b2903 100644 (file)
@@ -2149,6 +2149,8 @@ extern void *ext4_kvzalloc(size_t size, gfp_t flags);
 extern void ext4_kvfree(void *ptr);
 extern int ext4_alloc_flex_bg_array(struct super_block *sb,
                                    ext4_group_t ngroup);
+extern const char *ext4_decode_error(struct super_block *sb, int errno,
+                                    char nbuf[16]);
 extern __printf(4, 5)
 void __ext4_error(struct super_block *, const char *, unsigned int,
                  const char *, ...);
index b4323ba846b52ad09fe0740699ea2d82ff92ba65..6f61145255356a71ecb77644fa95566da9b3af4d 100644 (file)
@@ -6,6 +6,107 @@
 
 #include <trace/events/ext4.h>
 
+/* Just increment the non-pointer handle value */
+static handle_t *ext4_get_nojournal(void)
+{
+       handle_t *handle = current->journal_info;
+       unsigned long ref_cnt = (unsigned long)handle;
+
+       BUG_ON(ref_cnt >= EXT4_NOJOURNAL_MAX_REF_COUNT);
+
+       ref_cnt++;
+       handle = (handle_t *)ref_cnt;
+
+       current->journal_info = handle;
+       return handle;
+}
+
+
+/* Decrement the non-pointer handle value */
+static void ext4_put_nojournal(handle_t *handle)
+{
+       unsigned long ref_cnt = (unsigned long)handle;
+
+       BUG_ON(ref_cnt == 0);
+
+       ref_cnt--;
+       handle = (handle_t *)ref_cnt;
+
+       current->journal_info = handle;
+}
+
+/*
+ * Wrappers for jbd2_journal_start/end.
+ */
+handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
+{
+       journal_t *journal;
+
+       trace_ext4_journal_start(sb, nblocks, _RET_IP_);
+       if (sb->s_flags & MS_RDONLY)
+               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);
+}
+
+int __ext4_journal_stop(const char *where, unsigned int line, handle_t *handle)
+{
+       struct super_block *sb;
+       int err;
+       int rc;
+
+       if (!ext4_handle_valid(handle)) {
+               ext4_put_nojournal(handle);
+               return 0;
+       }
+       sb = handle->h_transaction->t_journal->j_private;
+       err = handle->h_err;
+       rc = jbd2_journal_stop(handle);
+
+       if (!err)
+               err = rc;
+       if (err)
+               __ext4_std_error(sb, where, line, err);
+       return err;
+}
+
+void ext4_journal_abort_handle(const char *caller, unsigned int line,
+                              const char *err_fn, struct buffer_head *bh,
+                              handle_t *handle, int err)
+{
+       char nbuf[16];
+       const char *errstr = ext4_decode_error(NULL, err, nbuf);
+
+       BUG_ON(!ext4_handle_valid(handle));
+
+       if (bh)
+               BUFFER_TRACE(bh, "abort");
+
+       if (!handle->h_err)
+               handle->h_err = err;
+
+       if (is_handle_aborted(handle))
+               return;
+
+       printk(KERN_ERR "EXT4-fs: %s:%d: aborting transaction: %s in %s\n",
+              caller, line, errstr, err_fn);
+
+       jbd2_journal_abort_handle(handle);
+}
+
 int __ext4_journal_get_write_access(const char *where, unsigned int line,
                                    handle_t *handle, struct buffer_head *bh)
 {
index 2e1f94704b1f3fff95c01b003ebcd2e38fa5353f..cb9d67fbc8f057cced96c225efebb9fce44a977c 100644 (file)
@@ -69,8 +69,6 @@ static void ext4_mark_recovery_complete(struct super_block *sb,
 static void ext4_clear_journal_err(struct super_block *sb,
                                   struct ext4_super_block *es);
 static int ext4_sync_fs(struct super_block *sb, int wait);
-static const char *ext4_decode_error(struct super_block *sb, int errno,
-                                    char nbuf[16]);
 static int ext4_remount(struct super_block *sb, int *flags, char *data);
 static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);
 static int ext4_unfreeze(struct super_block *sb);
@@ -296,107 +294,6 @@ void ext4_itable_unused_set(struct super_block *sb,
 }
 
 
-/* Just increment the non-pointer handle value */
-static handle_t *ext4_get_nojournal(void)
-{
-       handle_t *handle = current->journal_info;
-       unsigned long ref_cnt = (unsigned long)handle;
-
-       BUG_ON(ref_cnt >= EXT4_NOJOURNAL_MAX_REF_COUNT);
-
-       ref_cnt++;
-       handle = (handle_t *)ref_cnt;
-
-       current->journal_info = handle;
-       return handle;
-}
-
-
-/* Decrement the non-pointer handle value */
-static void ext4_put_nojournal(handle_t *handle)
-{
-       unsigned long ref_cnt = (unsigned long)handle;
-
-       BUG_ON(ref_cnt == 0);
-
-       ref_cnt--;
-       handle = (handle_t *)ref_cnt;
-
-       current->journal_info = handle;
-}
-
-/*
- * Wrappers for jbd2_journal_start/end.
- */
-handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
-{
-       journal_t *journal;
-
-       trace_ext4_journal_start(sb, nblocks, _RET_IP_);
-       if (sb->s_flags & MS_RDONLY)
-               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);
-}
-
-int __ext4_journal_stop(const char *where, unsigned int line, handle_t *handle)
-{
-       struct super_block *sb;
-       int err;
-       int rc;
-
-       if (!ext4_handle_valid(handle)) {
-               ext4_put_nojournal(handle);
-               return 0;
-       }
-       sb = handle->h_transaction->t_journal->j_private;
-       err = handle->h_err;
-       rc = jbd2_journal_stop(handle);
-
-       if (!err)
-               err = rc;
-       if (err)
-               __ext4_std_error(sb, where, line, err);
-       return err;
-}
-
-void ext4_journal_abort_handle(const char *caller, unsigned int line,
-                              const char *err_fn, struct buffer_head *bh,
-                              handle_t *handle, int err)
-{
-       char nbuf[16];
-       const char *errstr = ext4_decode_error(NULL, err, nbuf);
-
-       BUG_ON(!ext4_handle_valid(handle));
-
-       if (bh)
-               BUFFER_TRACE(bh, "abort");
-
-       if (!handle->h_err)
-               handle->h_err = err;
-
-       if (is_handle_aborted(handle))
-               return;
-
-       printk(KERN_ERR "EXT4-fs: %s:%d: aborting transaction: %s in %s\n",
-              caller, line, errstr, err_fn);
-
-       jbd2_journal_abort_handle(handle);
-}
-
 static void __save_error_info(struct super_block *sb, const char *func,
                            unsigned int line)
 {
@@ -582,8 +479,8 @@ void ext4_error_file(struct file *file, const char *function,
        ext4_handle_error(inode->i_sb);
 }
 
-static const char *ext4_decode_error(struct super_block *sb, int errno,
-                                    char nbuf[16])
+const char *ext4_decode_error(struct super_block *sb, int errno,
+                             char nbuf[16])
 {
        char *errstr = NULL;