From 97e012bbf087abb5dff904aa042eb0a3e5e0bd08 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Wed, 2 Jun 2004 17:57:52 -0700 Subject: [PATCH] [PATCH] ramfs o_sync oops fix Writing to ramfs files with O_SYNC dereferences null in mpage_writepages(), due to null a_ops->writepage. The call path is generic_file_aio_write_nolock ->generic_osync_inode ->write_inode_now ->__writeback_single_inode ->__sync_single_inode ->do_writepages ->mpage_writepages The best fix for this is to visit all ram-backed filesystems and give them a no-op a_ops.writepages. But baling out if the file is memory-backed is a sufficient coverall and is how we handle this in __filemap_fdatawrite(). Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- fs/fs-writeback.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 6362e20fb2ce9..0e73e308601c5 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -535,6 +535,9 @@ void write_inode_now(struct inode *inode, int sync) .sync_mode = WB_SYNC_ALL, }; + if (inode->i_mapping->backing_dev_info->memory_backed) + return; + spin_lock(&inode_lock); __writeback_single_inode(inode, &wbc); spin_unlock(&inode_lock); -- 2.53.0