summaryrefslogtreecommitdiff
path: root/tools/lib/python
diff options
context:
space:
mode:
authorJosef Bacik <josef@toxicpanda.com>2026-10-04 20:33:45 +0000
committerChristian Brauner <brauner@kernel.org>2026-10-29 10:38:13 +0100
commitaa6439028dc39230e62917ba0a7dafdc103564cf (patch)
treee031cef06742c80485f21a7ee77339b91f598150 /tools/lib/python
parentb14fcabd34e02c40f72d3cd1e9bd4fd18df40ff1 (diff)
writeback: don't kick a missing wb for dontcache writes
With CONFIG_CGROUP_WRITEBACK, inode->i_wb stays NULL until the inode is dirtied for the first time (folio_account_dirtied(), __mark_inode_dirty() or wbc_attach_fdatawrite_inode() attach it). generic_write_sync() calls filemap_dontcache_kick_writeback() for every IOCB_DONTCACHE write, including O_DIRECT ones, which never dirty the page cache. The function then passes the NULL returned by unlocked_inode_to_wb_begin() to wb_has_dirty_io(): fd = open("/dev/ram0", O_WRONLY | O_DIRECT); pwritev2(fd, &iov, 1, 0, RWF_DONTCACHE); BUG: KASAN: null-ptr-deref in filemap_dontcache_kick_writeback+0xec Oops: general protection fault, probably for non-canonical address RIP: 0010:filemap_dontcache_kick_writeback+0xfd/0x7a0 The task dies inside rcu_read_lock(). blkdev_write_iter() gets there for any block device whose page cache has not been dirtied yet. nfs_file_direct_write() calls generic_write_sync() the same way. An inode without a wb has never had dirty pages, so there is nothing to flush: skip the kick. Fixes: e1bf79628453 ("mm: kick writeback flusher for IOCB_DONTCACHE with targeted dirty tracking") Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
Diffstat (limited to 'tools/lib/python')
0 files changed, 0 insertions, 0 deletions