Skip to contentSkip to conversation

fs: move code out of buffer.c

PATCH New Nick Piggin 1 participant 1 message Jun 3, 2010

Subsystems (23)
Memory management VFS SCSI PowerPC +19 more subsystems
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fs: move code out of buffer.c

Another step towards decoupling mm/vfs from buffer_head code, and a good cleanup in itself.

--

Move invalidate_bdev, block_sync_page into fs/block_dev.c. Export kill_bdev as well, so brd doesn't have to open code it. Reduce buffer_head.h requirement accordingly.

Removed a rather large comment from invalidate_bdev, as it looked a bit obsolete to bother moving. The small comment replacing it says enough.

---
 arch/powerpc/sysdev/axonram.c           |    1 
 block/genhd.c                           |    1 
 block/ioctl.c                           |    2 -
 drivers/block/amiflop.c                 |    2 -
 drivers/block/brd.c                     |    9 ++---
 drivers/block/floppy.c                  |    1 
 drivers/block/loop.c                    |    1 
 drivers/cdrom/cdrom.c                   |    1 
 drivers/char/sysrq.c                    |    1 
 drivers/md/dm.c                         |    1 
 drivers/md/md.c                         |    2 -
 drivers/mtd/devices/block2mtd.c         |    1 
 drivers/s390/block/dasd.c               |    1 
 drivers/s390/char/tape_block.c          |    1 
 drivers/scsi/scsicam.c                  |    1 
 drivers/staging/ramzswap/ramzswap_drv.c |    1 
 fs/block_dev.c                          |   36 ++++++++++++++++++--
 fs/buffer.c                             |   56 --------------------------------
 fs/cachefiles/interface.c               |    1 
 fs/cramfs/inode.c                       |    1 
 fs/fs-writeback.c                       |    1 
 fs/libfs.c                              |    2 -
 fs/quota/dquot.c                        |    1 
 fs/quota/quota.c                        |    1 
 fs/splice.c                             |    1 
 fs/sync.c                               |    1 
 include/linux/buffer_head.h             |    1 
 include/linux/fs.h                      |    3 +
 kernel/power/swap.c                     |    1 
 mm/page-writeback.c                     |    2 -
 mm/swap_state.c                         |    1 
 31 files changed, 45 insertions(+), 91 deletions(-)
drivers/block/brd.c +4 -5
Index: linux-2.6/drivers/block/brd.c
===================================================================
@@ -16,7 +16,7 @@
 #include <linux/bio.h>
 #include <linux/highmem.h>
 #include <linux/radix-tree.h>
-#include <linux/buffer_head.h> /* invalidate_bh_lrus() */
+#include <linux/fs.h>
 #include <linux/slab.h>
 
 #include <asm/uaccess.h>
@@ -359,14 +359,13 @@ static int brd_ioctl(struct block_device
 	error = -EBUSY;
 	if (bdev->bd_openers <= 1) {
 		/*
-		 * Invalidate the cache first, so it isn't written
-		 * back to the device.
+		 * Kill the cache first, so it isn't written back to the
+		 * device.
 		 *
 		 * Another thread might instantiate more buffercache here,
 		 * but there is not much we can do to close that race.
 		 */
-		invalidate_bh_lrus();
-		truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
+		kill_bdev(bdev);
 		brd_free_pages(brd);
 		error = 0;
 	}
drivers/block/loop.c +0 -1
Index: linux-2.6/drivers/block/loop.c
===================================================================
@@ -68,7 +68,6 @@
 #include <linux/suspend.h>
 #include <linux/freezer.h>
 #include <linux/writeback.h>
-#include <linux/buffer_head.h>		/* for invalidate_bdev() */
 #include <linux/completion.h>
 #include <linux/highmem.h>
 #include <linux/kthread.h>
drivers/md/md.c +1 -1
Index: linux-2.6/drivers/md/md.c
===================================================================
@@ -36,7 +36,7 @@
 #include <linux/blkdev.h>
 #include <linux/sysctl.h>
 #include <linux/seq_file.h>
-#include <linux/buffer_head.h> /* for invalidate_bdev */
+#include <linux/fs.h>
 #include <linux/poll.h>
 #include <linux/ctype.h>
 #include <linux/string.h>
fs/block_dev.c +33 -3
Index: linux-2.6/fs/block_dev.c
===================================================================
@@ -18,6 +18,7 @@
 #include <linux/module.h>
 #include <linux/blkpg.h>
 #include <linux/buffer_head.h>
+#include <linux/swap.h>
 #include <linux/pagevec.h>
 #include <linux/writeback.h>
 #include <linux/mpage.h>
@@ -62,13 +63,31 @@ static sector_t max_block(struct block_d
 }
 
 /* Kill _all_ buffers and pagecache , dirty or not.. */
-static void kill_bdev(struct block_device *bdev)
+void kill_bdev(struct block_device *bdev)
 {
-	if (bdev->bd_inode->i_mapping->nrpages == 0)
+	struct address_space *mapping = bdev->bd_inode->i_mapping;
+
+	if (mapping->nrpages == 0)
 		return;
+
 	invalidate_bh_lrus();
-	truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
+	truncate_inode_pages(mapping, 0);
 }	
+EXPORT_SYMBOL(kill_bdev);
+
+/* Invalidate clean unused buffers and pagecache. */
+void invalidate_bdev(struct block_device *bdev)
+{
+	struct address_space *mapping = bdev->bd_inode->i_mapping;
+
+	if (mapping->nrpages == 0)
+		return;
+
+	invalidate_bh_lrus();
+	lru_add_drain_all();	/* make sure all lru add caches are flushed */
+	invalidate_mapping_pages(mapping, 0, -1);
+}
+EXPORT_SYMBOL(invalidate_bdev);
 
 int set_blocksize(struct block_device *bdev, int size)
 {
@@ -1582,6 +1601,17 @@ ssize_t blkdev_aio_write(struct kiocb *i
 }
 EXPORT_SYMBOL_GPL(blkdev_aio_write);
 
+void block_sync_page(struct page *page)
+{
+	struct address_space *mapping;
+
+	smp_mb();
+	mapping = page_mapping(page);
+	if (mapping)
+		blk_run_backing_dev(mapping->backing_dev_info, page);
+}
+EXPORT_SYMBOL(block_sync_page);
+
 /*
  * Try to release a page associated with block device when the system
  * is under memory pressure.
fs/quota/dquot.c +0 -1
Index: linux-2.6/fs/quota/dquot.c
===================================================================
@@ -73,7 +73,6 @@
 #include <linux/security.h>
 #include <linux/kmod.h>
 #include <linux/namei.h>
-#include <linux/buffer_head.h>
 #include <linux/capability.h>
 #include <linux/quotaops.h>
 #include <linux/writeback.h> /* for inode_lock, oddly enough.. */
fs/quota/quota.c +0 -1
Index: linux-2.6/fs/quota/quota.c
===================================================================
@@ -13,7 +13,6 @@
 #include <linux/kernel.h>
 #include <linux/security.h>
 #include <linux/syscalls.h>
-#include <linux/buffer_head.h>
 #include <linux/capability.h>
 #include <linux/quotaops.h>
 #include <linux/types.h>
include/linux/fs.h +3 -0
Index: linux-2.6/include/linux/fs.h
===================================================================
@@ -1948,6 +1948,7 @@ extern void bd_set_size(struct block_dev
 extern void bd_forget(struct inode *inode);
 extern void bdput(struct block_device *);
 extern struct block_device *open_by_devnum(dev_t, fmode_t);
+extern void kill_bdev(struct block_device *);
 extern void invalidate_bdev(struct block_device *);
 extern int sync_blockdev(struct block_device *bdev);
 extern struct super_block *freeze_bdev(struct block_device *);
@@ -1957,6 +1958,7 @@ extern int fsync_bdev(struct block_devic
 #else
 static inline void bd_forget(struct inode *inode) {}
 static inline int sync_blockdev(struct block_device *bdev) { return 0; }
+static inline void kill_bdev(struct block_device *bdev) {}
 static inline void invalidate_bdev(struct block_device *bdev) {}
 
 static inline struct super_block *freeze_bdev(struct block_device *sb)
@@ -2214,6 +2216,7 @@ extern int generic_segment_checks(const
 extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov,
 				unsigned long nr_segs, loff_t pos);
 extern int blkdev_fsync(struct file *filp, int datasync);
+extern void block_sync_page(struct page *page);
 
 /* fs/splice.c */
 extern ssize_t generic_file_splice_read(struct file *, loff_t *,
block/genhd.c +0 -1
Index: linux-2.6/block/genhd.c
===================================================================
@@ -15,7 +15,6 @@
 #include <linux/slab.h>
 #include <linux/kmod.h>
 #include <linux/kobj_map.h>
-#include <linux/buffer_head.h>
 #include <linux/mutex.h>
 #include <linux/idr.h>
 
block/ioctl.c +1 -1
Index: linux-2.6/block/ioctl.c
===================================================================
@@ -4,7 +4,7 @@
 #include <linux/blkpg.h>
 #include <linux/hdreg.h>
 #include <linux/backing-dev.h>
-#include <linux/buffer_head.h>
+#include <linux/fs.h>
 #include <linux/smp_lock.h>
 #include <linux/blktrace_api.h>
 #include <asm/uaccess.h>
drivers/block/amiflop.c +1 -1
Index: linux-2.6/drivers/block/amiflop.c
===================================================================
@@ -62,7 +62,7 @@
 #include <linux/init.h>
 #include <linux/amifdreg.h>
 #include <linux/amifd.h>
-#include <linux/buffer_head.h>
+#include <linux/fs.h>
 #include <linux/blkdev.h>
 #include <linux/elevator.h>
 #include <linux/interrupt.h>
drivers/block/floppy.c +0 -1
Index: linux-2.6/drivers/block/floppy.c
===================================================================
@@ -188,7 +188,6 @@ static int print_unex = 1;
 #include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/mod_devicetable.h>
-#include <linux/buffer_head.h>	/* for invalidate_buffers() */
 #include <linux/mutex.h>
 #include <linux/io.h>
 #include <linux/uaccess.h>
drivers/char/sysrq.c +0 -1
Index: linux-2.6/drivers/char/sysrq.c
===================================================================
@@ -33,7 +33,6 @@
 #include <linux/module.h>
 #include <linux/suspend.h>
 #include <linux/writeback.h>
-#include <linux/buffer_head.h>		/* for fsync_bdev() */
 #include <linux/swap.h>
 #include <linux/spinlock.h>
 #include <linux/vt_kern.h>
arch/powerpc/sysdev/axonram.c +0 -1
Index: linux-2.6/arch/powerpc/sysdev/axonram.c
===================================================================
@@ -25,7 +25,6 @@
 
 #include <linux/bio.h>
 #include <linux/blkdev.h>
-#include <linux/buffer_head.h>
 #include <linux/device.h>
 #include <linux/errno.h>
 #include <linux/fs.h>
drivers/cdrom/cdrom.c +0 -1
Index: linux-2.6/drivers/cdrom/cdrom.c
===================================================================
@@ -265,7 +265,6 @@
 
 #include <linux/module.h>
 #include <linux/fs.h>
-#include <linux/buffer_head.h>
 #include <linux/major.h>
 #include <linux/types.h>
 #include <linux/errno.h>
drivers/md/dm.c +0 -1
Index: linux-2.6/drivers/md/dm.c
===================================================================
@@ -14,7 +14,6 @@
 #include <linux/moduleparam.h>
 #include <linux/blkpg.h>
 #include <linux/bio.h>
-#include <linux/buffer_head.h>
 #include <linux/mempool.h>
 #include <linux/slab.h>
 #include <linux/idr.h>
drivers/mtd/devices/block2mtd.c +0 -1
Index: linux-2.6/drivers/mtd/devices/block2mtd.c
===================================================================
@@ -14,7 +14,6 @@
 #include <linux/list.h>
 #include <linux/init.h>
 #include <linux/mtd/mtd.h>
-#include <linux/buffer_head.h>
 #include <linux/mutex.h>
 #include <linux/mount.h>
 #include <linux/slab.h>
drivers/s390/block/dasd.c +0 -1
Index: linux-2.6/drivers/s390/block/dasd.c
===================================================================
@@ -17,7 +17,6 @@
 #include <linux/ctype.h>
 #include <linux/major.h>
 #include <linux/slab.h>
-#include <linux/buffer_head.h>
 #include <linux/hdreg.h>
 #include <linux/async.h>
 #include <linux/mutex.h>
drivers/s390/char/tape_block.c +0 -1
Index: linux-2.6/drivers/s390/char/tape_block.c
===================================================================
@@ -17,7 +17,6 @@
 #include <linux/module.h>
 #include <linux/blkdev.h>
 #include <linux/interrupt.h>
-#include <linux/buffer_head.h>
 #include <linux/kernel.h>
 
 #include <asm/debug.h>
drivers/scsi/scsicam.c +0 -1
Index: linux-2.6/drivers/scsi/scsicam.c
===================================================================
@@ -16,7 +16,6 @@
 #include <linux/genhd.h>
 #include <linux/kernel.h>
 #include <linux/blkdev.h>
-#include <linux/buffer_head.h>
 #include <asm/unaligned.h>
 
 #include <scsi/scsicam.h>
kernel/power/swap.c +0 -1
Index: linux-2.6/kernel/power/swap.c
===================================================================
@@ -17,7 +17,6 @@
 #include <linux/bitops.h>
 #include <linux/genhd.h>
 #include <linux/device.h>
-#include <linux/buffer_head.h>
 #include <linux/bio.h>
 #include <linux/blkdev.h>
 #include <linux/swap.h>
drivers/staging/ramzswap/ramzswap_drv.c +0 -1
Index: linux-2.6/drivers/staging/ramzswap/ramzswap_drv.c
===================================================================
@@ -19,7 +19,6 @@
 #include <linux/kernel.h>
 #include <linux/bitops.h>
 #include <linux/blkdev.h>
-#include <linux/buffer_head.h>
 #include <linux/device.h>
 #include <linux/genhd.h>
 #include <linux/highmem.h>
fs/cachefiles/interface.c +0 -1
Index: linux-2.6/fs/cachefiles/interface.c
===================================================================
@@ -11,7 +11,6 @@
 
 #include <linux/slab.h>
 #include <linux/mount.h>
-#include <linux/buffer_head.h>
 #include "internal.h"
 
 #define list_to_page(head) (list_entry((head)->prev, struct page, lru))
fs/cramfs/inode.c +0 -1
Index: linux-2.6/fs/cramfs/inode.c
===================================================================
@@ -20,7 +20,6 @@
 #include <linux/cramfs_fs.h>
 #include <linux/slab.h>
 #include <linux/cramfs_fs_sb.h>
-#include <linux/buffer_head.h>
 #include <linux/vfs.h>
 #include <linux/mutex.h>
 
fs/fs-writeback.c +0 -1
Index: linux-2.6/fs/fs-writeback.c
===================================================================
@@ -25,7 +25,6 @@
 #include <linux/writeback.h>
 #include <linux/blkdev.h>
 #include <linux/backing-dev.h>
-#include <linux/buffer_head.h>
 #include "internal.h"
 
 #define inode_to_bdi(inode)	((inode)->i_mapping->backing_dev_info)
fs/splice.c +0 -1
Index: linux-2.6/fs/splice.c
===================================================================
@@ -25,7 +25,6 @@
 #include <linux/mm_inline.h>
 #include <linux/swap.h>
 #include <linux/writeback.h>
-#include <linux/buffer_head.h>
 #include <linux/module.h>
 #include <linux/syscalls.h>
 #include <linux/uio.h>
fs/sync.c +0 -1
Index: linux-2.6/fs/sync.c
===================================================================
@@ -13,7 +13,6 @@
 #include <linux/linkage.h>
 #include <linux/pagemap.h>
 #include <linux/quotaops.h>
-#include <linux/buffer_head.h>
 #include <linux/backing-dev.h>
 #include "internal.h"
 
mm/page-writeback.c +1 -1
Index: linux-2.6/mm/page-writeback.c
===================================================================
@@ -32,7 +32,7 @@
 #include <linux/sysctl.h>
 #include <linux/cpu.h>
 #include <linux/syscalls.h>
-#include <linux/buffer_head.h>
+#include <linux/buffer_head.h> /* __set_page_dirty_buffers */
 #include <linux/pagevec.h>
 
 /*
mm/swap_state.c +0 -1
Index: linux-2.6/mm/swap_state.c
===================================================================
@@ -14,7 +14,6 @@
 #include <linux/swapops.h>
 #include <linux/init.h>
 #include <linux/pagemap.h>
-#include <linux/buffer_head.h>
 #include <linux/backing-dev.h>
 #include <linux/pagevec.h>
 #include <linux/migrate.h>
fs/buffer.c +0 -56

68 lines not on this page · raw message

include/linux/buffer_head.h +0 -1
Index: linux-2.6/include/linux/buffer_head.h
===================================================================
@@ -227,7 +227,6 @@ int generic_cont_expand_simple(struct in
 int block_commit_write(struct page *page, unsigned from, unsigned to);
 int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
 				get_block_t get_block);
-void block_sync_page(struct page *);
 sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *);
 int block_truncate_page(struct address_space *, loff_t, get_block_t *);
 int file_fsync(struct file *, int);
fs/libfs.c +1 -1
Index: linux-2.6/fs/libfs.c
===================================================================
@@ -12,7 +12,7 @@
 #include <linux/mutex.h>
 #include <linux/exportfs.h>
 #include <linux/writeback.h>
-#include <linux/buffer_head.h>
+#include <linux/buffer_head.h> /* sync_mapping_buffers */
 
 #include <asm/uaccess.h>