#include <linux/sched.h>
 #include <linux/slab.h>
+#include <linux/jump_label.h>
 
 #ifdef CONFIG_TASK_DELAY_ACCT
+DECLARE_STATIC_KEY_TRUE(delayacct_key);
 extern int delayacct_on;       /* Delay accounting turned on/off */
 extern struct kmem_cache *delayacct_cache;
 extern void delayacct_init(void);
 
 static inline void delayacct_blkio_start(void)
 {
+       if (!static_branch_likely(&delayacct_key))
+               return;
+
        delayacct_set_flag(current, DELAYACCT_PF_BLKIO);
        if (current->delays)
                __delayacct_blkio_start();
 
 static inline void delayacct_blkio_end(struct task_struct *p)
 {
+       if (!static_branch_likely(&delayacct_key))
+               return;
+
        if (p->delays)
                __delayacct_blkio_end(p);
        delayacct_clear_flag(p, DELAYACCT_PF_BLKIO);
 
 #include <linux/delayacct.h>
 #include <linux/module.h>
 
+DEFINE_STATIC_KEY_TRUE(delayacct_key);
 int delayacct_on __read_mostly = 1;    /* Delay accounting turned on/off */
 struct kmem_cache *delayacct_cache;
 
 {
        delayacct_cache = KMEM_CACHE(task_delay_info, SLAB_PANIC|SLAB_ACCOUNT);
        delayacct_tsk_init(&init_task);
+       if (!delayacct_on)
+               static_branch_disable(&delayacct_key);
 }
 
 void __delayacct_tsk_init(struct task_struct *tsk)