Merge tag 'kgdb-5.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/danielt...
[linux-2.6-microblaze.git] / include / linux / jbd2.h
index db0e192..6cc0353 100644 (file)
@@ -779,6 +779,11 @@ struct journal_s
         */
        unsigned long           j_flags;
 
+       /**
+        * @j_atomic_flags: Atomic journaling state flags.
+        */
+       unsigned long           j_atomic_flags;
+
        /**
         * @j_errno:
         *
@@ -904,6 +909,29 @@ struct journal_s
         */
        struct buffer_head      *j_chkpt_bhs[JBD2_NR_BATCH];
 
+       /**
+        * @j_shrinker:
+        *
+        * Journal head shrinker, reclaim buffer's journal head which
+        * has been written back.
+        */
+       struct shrinker         j_shrinker;
+
+       /**
+        * @j_jh_shrink_count:
+        *
+        * Number of journal buffers on the checkpoint list. [j_list_lock]
+        */
+       struct percpu_counter   j_jh_shrink_count;
+
+       /**
+        * @j_shrink_transaction:
+        *
+        * Record next transaction will shrink on the checkpoint list.
+        * [j_list_lock]
+        */
+       transaction_t           *j_shrink_transaction;
+
        /**
         * @j_head:
         *
@@ -1370,6 +1398,16 @@ JBD2_FEATURE_INCOMPAT_FUNCS(fast_commit, FAST_COMMIT)
                                                 * mode */
 #define JBD2_FAST_COMMIT_ONGOING       0x100   /* Fast commit is ongoing */
 #define JBD2_FULL_COMMIT_ONGOING       0x200   /* Full commit is ongoing */
+#define JBD2_JOURNAL_FLUSH_DISCARD     0x0001
+#define JBD2_JOURNAL_FLUSH_ZEROOUT     0x0002
+#define JBD2_JOURNAL_FLUSH_VALID       (JBD2_JOURNAL_FLUSH_DISCARD | \
+                                       JBD2_JOURNAL_FLUSH_ZEROOUT)
+
+/*
+ * Journal atomic flag definitions
+ */
+#define JBD2_CHECKPOINT_IO_ERROR       0x001   /* Detect io error while writing
+                                                * buffer back to disk */
 
 /*
  * Function declarations for the journaling transaction and buffer
@@ -1407,6 +1445,7 @@ extern void jbd2_journal_commit_transaction(journal_t *);
 
 /* Checkpoint list management */
 void __jbd2_journal_clean_checkpoint_list(journal_t *journal, bool destroy);
+unsigned long jbd2_journal_shrink_checkpoint_list(journal_t *journal, unsigned long *nr_to_scan);
 int __jbd2_journal_remove_checkpoint(struct journal_head *);
 void jbd2_journal_destroy_checkpoint(journal_t *journal);
 void __jbd2_journal_insert_checkpoint(struct journal_head *, transaction_t *);
@@ -1500,7 +1539,7 @@ extern int         jbd2_journal_invalidatepage(journal_t *,
                                struct page *, unsigned int, unsigned int);
 extern int      jbd2_journal_try_to_free_buffers(journal_t *journal, struct page *page);
 extern int      jbd2_journal_stop(handle_t *);
-extern int      jbd2_journal_flush (journal_t *);
+extern int      jbd2_journal_flush(journal_t *journal, unsigned int flags);
 extern void     jbd2_journal_lock_updates (journal_t *);
 extern void     jbd2_journal_unlock_updates (journal_t *);
 
@@ -1517,6 +1556,8 @@ extern int           jbd2_journal_set_features
                   (journal_t *, unsigned long, unsigned long, unsigned long);
 extern void       jbd2_journal_clear_features
                   (journal_t *, unsigned long, unsigned long, unsigned long);
+extern int        jbd2_journal_register_shrinker(journal_t *journal);
+extern void       jbd2_journal_unregister_shrinker(journal_t *journal);
 extern int        jbd2_journal_load       (journal_t *journal);
 extern int        jbd2_journal_destroy    (journal_t *);
 extern int        jbd2_journal_recover    (journal_t *journal);