Hello Tejun Heo, The patch 2cf855837b89: "memcontrol: schedule throttling if we are congested" from Jul 3, 2018, leads to the following Smatch static checker warning: block/blk-cgroup.c:1863 blkcg_schedule_throttle() warn: sleeping in atomic context The call tree looks like: ioc_rqos_merge() <- disables preempt __cgroup_throttle_swaprate() <- disables preempt -> blkcg_schedule_throttle() Here is one of the callers: mm/swapfile.c 3657 spin_lock(&swap_avail_lock); ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Takes spin lock. 3658 plist_for_each_entry_safe(si, next, &swap_avail_heads[nid], 3659 avail_lists[nid]) { 3660 if (si->bdev) { 3661 blkcg_schedule_throttle(si->bdev->bd_disk, true); ^^^^^^^^^^^^^^^^^^^^^^^ Calls blkcg_schedule_throttle(). 3662 break; 3663 } 3664 } block/blk-cgroup.c 1851 void blkcg_schedule_throttle(struct gendisk *disk, bool use_memdelay) 1852 { 1853 struct request_queue *q = disk->queue; 1854 1855 if (unlikely(current->flags & PF_KTHREAD)) 1856 return; 1857 1858 if (current->throttle_queue != q) { 1859 if (!blk_get_queue(q)) 1860 return; 1861 1862 if (current->throttle_queue) 1863 blk_put_queue(current->throttle_queue); ^^^^^^^^^^^^^^ Sleeps. 1864 current->throttle_queue = q; 1865 } 1866 1867 if (use_memdelay) 1868 current->use_memdelay = use_memdelay; 1869 set_notify_resume(current); 1870 } regards, dan carpenter