ext4, jbd2: Provide accessor function for handle credits
authorJan Kara <jack@suse.cz>
Tue, 5 Nov 2019 16:44:17 +0000 (17:44 +0100)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 5 Nov 2019 21:00:48 +0000 (16:00 -0500)
Provide accessor function to get number of credits available in a handle
and use it from ext4. Later, computation of available credits won't be
so straightforward.

Reviewed-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20191105164437.32602-11-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/ext4_jbd2.c
fs/ext4/ext4_jbd2.h
fs/ext4/xattr.c
include/linux/jbd2.h

index 2b98d89..731bbfd 100644 (file)
@@ -119,8 +119,8 @@ handle_t *__ext4_journal_start_reserved(handle_t *handle, unsigned int line,
                return ext4_get_nojournal();
 
        sb = handle->h_journal->j_private;
-       trace_ext4_journal_start_reserved(sb, handle->h_buffer_credits,
-                                         _RET_IP_);
+       trace_ext4_journal_start_reserved(sb,
+                               jbd2_handle_buffer_credits(handle), _RET_IP_);
        err = ext4_journal_check_start(sb);
        if (err < 0) {
                jbd2_journal_free_reserved(handle);
@@ -138,10 +138,10 @@ int __ext4_journal_ensure_credits(handle_t *handle, int check_cred,
 {
        if (!ext4_handle_valid(handle))
                return 0;
-       if (handle->h_buffer_credits >= check_cred)
+       if (jbd2_handle_buffer_credits(handle) >= check_cred)
                return 0;
        return ext4_journal_extend(handle,
-                                  extend_cred - handle->h_buffer_credits);
+                          extend_cred - jbd2_handle_buffer_credits(handle));
 }
 
 static void ext4_journal_abort_handle(const char *caller, unsigned int line,
@@ -289,7 +289,7 @@ int __ext4_handle_dirty_metadata(const char *where, unsigned int line,
                                       handle->h_type,
                                       handle->h_line_no,
                                       handle->h_requested_credits,
-                                      handle->h_buffer_credits, err);
+                                      jbd2_handle_buffer_credits(handle), err);
                                return err;
                        }
                        ext4_error_inode(inode, where, line,
@@ -300,7 +300,8 @@ int __ext4_handle_dirty_metadata(const char *where, unsigned int line,
                                         handle->h_type,
                                         handle->h_line_no,
                                         handle->h_requested_credits,
-                                        handle->h_buffer_credits, err);
+                                        jbd2_handle_buffer_credits(handle),
+                                        err);
                }
        } else {
                if (inode)
index 1920b97..36aa725 100644 (file)
@@ -288,13 +288,6 @@ static inline int ext4_handle_is_aborted(handle_t *handle)
        return 0;
 }
 
-static inline int ext4_handle_has_enough_credits(handle_t *handle, int needed)
-{
-       if (ext4_handle_valid(handle) && handle->h_buffer_credits < needed)
-               return 0;
-       return 1;
-}
-
 #define ext4_journal_start_sb(sb, type, nblocks)                       \
        __ext4_journal_start_sb((sb), __LINE__, (type), (nblocks), 0)
 
index b79d8ff..48a9dbd 100644 (file)
@@ -2314,7 +2314,7 @@ ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,
                                                   flags & XATTR_CREATE);
                brelse(bh);
 
-               if (!ext4_handle_has_enough_credits(handle, credits)) {
+               if (jbd2_handle_buffer_credits(handle) < credits) {
                        error = -ENOSPC;
                        goto cleanup;
                }
index 10e6049..727ff91 100644 (file)
@@ -1645,6 +1645,12 @@ static inline tid_t  jbd2_get_latest_transaction(journal_t *journal)
        return tid;
 }
 
+
+static inline int jbd2_handle_buffer_credits(handle_t *handle)
+{
+       return handle->h_buffer_credits;
+}
+
 #ifdef __KERNEL__
 
 #define buffer_trace_init(bh)  do {} while (0)