fix: ext4: Reserve revoke credits for freed blocks (v5.5)
authorMichael Jeanson <mjeanson@efficios.com>
Tue, 10 Dec 2019 16:41:14 +0000 (11:41 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 10 Dec 2019 17:17:08 +0000 (12:17 -0500)
See upstream commit:

  commit 83448bdfb59731c2f54784ed3f4a93ff95be6e7e
  Author: Jan Kara <jack@suse.cz>
  Date:   Tue Nov 5 17:44:29 2019 +0100

    ext4: Reserve revoke credits for freed blocks

    So far we have reserved only relatively high fixed amount of revoke
    credits for each transaction. We over-reserved by large amount for most
    cases but when freeing large directories or files with data journalling,
    the fixed amount is not enough. In fact the worst case estimate is
    inconveniently large (maximum extent size) for freeing of one extent.

    We fix this by doing proper estimate of the amount of blocks that need
    to be revoked when removing blocks from the inode due to truncate or
    hole punching and otherwise reserve just a small amount of revoke
    credits for each transaction to accommodate freeing of xattrs block or
    so.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
instrumentation/events/lttng-module/ext4.h

index 83a80baa1a3d74852d18594b652156650281b9cc..0cdd52e92a8d3759c78fbb9e8a84c2752cdef6c9 100644 (file)
@@ -1403,7 +1403,36 @@ LTTNG_TRACEPOINT_EVENT(ext4_load_inode,
 )
 #endif
 
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0))
+
+LTTNG_TRACEPOINT_EVENT(ext4_journal_start,
+       TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks,
+                int revoke_creds, unsigned long IP),
+
+       TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, IP),
+
+       TP_FIELDS(
+               ctf_integer(dev_t, dev, sb->s_dev)
+               ctf_integer(unsigned long, ip, IP)
+               ctf_integer(int, blocks, blocks)
+               ctf_integer(int, rsv_blocks, rsv_blocks)
+               ctf_integer(int, revoke_creds, revoke_creds)
+       )
+)
+
+LTTNG_TRACEPOINT_EVENT(ext4_journal_start_reserved,
+       TP_PROTO(struct super_block *sb, int blocks, unsigned long IP),
+
+       TP_ARGS(sb, blocks, IP),
+
+       TP_FIELDS(
+               ctf_integer(dev_t, dev, sb->s_dev)
+               ctf_integer(unsigned long, ip, IP)
+               ctf_integer(int, blocks, blocks)
+       )
+)
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0))
 
 LTTNG_TRACEPOINT_EVENT(ext4_journal_start,
        TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks,
This page took 0.027948 seconds and 4 git commands to generate.