Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso...
[linux-2.6-microblaze.git] / fs / ext4 / ext4_jbd2.c
index b60f015..6def733 100644 (file)
@@ -218,9 +218,11 @@ static void ext4_check_bdev_write_error(struct super_block *sb)
 }
 
 int __ext4_journal_get_write_access(const char *where, unsigned int line,
-                                   handle_t *handle, struct buffer_head *bh)
+                                   handle_t *handle, struct super_block *sb,
+                                   struct buffer_head *bh,
+                                   enum ext4_journal_trigger_type trigger_type)
 {
-       int err = 0;
+       int err;
 
        might_sleep();
 
@@ -229,11 +231,18 @@ int __ext4_journal_get_write_access(const char *where, unsigned int line,
 
        if (ext4_handle_valid(handle)) {
                err = jbd2_journal_get_write_access(handle, bh);
-               if (err)
+               if (err) {
                        ext4_journal_abort_handle(where, line, __func__, bh,
                                                  handle, err);
+                       return err;
+               }
        }
-       return err;
+       if (trigger_type == EXT4_JTR_NONE || !ext4_has_metadata_csum(sb))
+               return 0;
+       BUG_ON(trigger_type >= EXT4_JOURNAL_TRIGGER_COUNT);
+       jbd2_journal_set_triggers(bh,
+               &EXT4_SB(sb)->s_journal_triggers[trigger_type].tr_triggers);
+       return 0;
 }
 
 /*
@@ -301,17 +310,27 @@ int __ext4_forget(const char *where, unsigned int line, handle_t *handle,
 }
 
 int __ext4_journal_get_create_access(const char *where, unsigned int line,
-                               handle_t *handle, struct buffer_head *bh)
+                               handle_t *handle, struct super_block *sb,
+                               struct buffer_head *bh,
+                               enum ext4_journal_trigger_type trigger_type)
 {
-       int err = 0;
+       int err;
 
-       if (ext4_handle_valid(handle)) {
-               err = jbd2_journal_get_create_access(handle, bh);
-               if (err)
-                       ext4_journal_abort_handle(where, line, __func__,
-                                                 bh, handle, err);
+       if (!ext4_handle_valid(handle))
+               return 0;
+
+       err = jbd2_journal_get_create_access(handle, bh);
+       if (err) {
+               ext4_journal_abort_handle(where, line, __func__, bh, handle,
+                                         err);
+               return err;
        }
-       return err;
+       if (trigger_type == EXT4_JTR_NONE || !ext4_has_metadata_csum(sb))
+               return 0;
+       BUG_ON(trigger_type >= EXT4_JOURNAL_TRIGGER_COUNT);
+       jbd2_journal_set_triggers(bh,
+               &EXT4_SB(sb)->s_journal_triggers[trigger_type].tr_triggers);
+       return 0;
 }
 
 int __ext4_handle_dirty_metadata(const char *where, unsigned int line,