mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-02 04:38:08 +00:00
fs: move code out of buffer.c
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. Signed-off-by: Nick Piggin <npiggin@suse.de> Cc: Al Viro <viro@ZenIV.linux.org.uk> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
94ea4158f1
commit
ff01bb4832
@ -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>
|
||||
|
@ -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>
|
||||
#include <linux/log2.h>
|
||||
|
@ -5,7 +5,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/blktrace_api.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
|
@ -63,7 +63,7 @@
|
||||
#include <linux/mutex.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>
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/mutex.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>
|
||||
@ -402,14 +402,13 @@ static int brd_ioctl(struct block_device *bdev, fmode_t mode,
|
||||
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;
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -69,7 +69,6 @@
|
||||
#include <linux/freezer.h>
|
||||
#include <linux/mutex.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>
|
||||
|
@ -267,7 +267,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>
|
||||
|
@ -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>
|
||||
|
@ -36,8 +36,7 @@
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/sysctl.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/mutex.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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -32,7 +32,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>
|
||||
@ -41,6 +40,7 @@
|
||||
#include <linux/oom.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/irq_regs.h>
|
||||
|
@ -17,6 +17,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>
|
||||
@ -25,6 +26,7 @@
|
||||
#include <linux/namei.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/kmemleak.h>
|
||||
#include <linux/cleancache.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include "internal.h"
|
||||
|
||||
@ -82,13 +84,35 @@ static sector_t max_block(struct block_device *bdev)
|
||||
}
|
||||
|
||||
/* 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);
|
||||
/* 99% of the time, we don't need to flush the cleancache on the bdev.
|
||||
* But, for the strange corners, lets be cautious
|
||||
*/
|
||||
cleancache_flush_inode(mapping);
|
||||
}
|
||||
EXPORT_SYMBOL(invalidate_bdev);
|
||||
|
||||
int set_blocksize(struct block_device *bdev, int size)
|
||||
{
|
||||
|
50
fs/buffer.c
50
fs/buffer.c
@ -41,7 +41,6 @@
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/mpage.h>
|
||||
#include <linux/bit_spinlock.h>
|
||||
#include <linux/cleancache.h>
|
||||
|
||||
static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
|
||||
|
||||
@ -231,55 +230,6 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* If invalidate_buffers() will trash dirty buffers, it means some kind
|
||||
of fs corruption is going on. Trashing dirty data always imply losing
|
||||
information that was supposed to be just stored on the physical layer
|
||||
by the user.
|
||||
|
||||
Thus invalidate_buffers in general usage is not allwowed to trash
|
||||
dirty buffers. For example ioctl(FLSBLKBUF) expects dirty data to
|
||||
be preserved. These buffers are simply skipped.
|
||||
|
||||
We also skip buffers which are still in use. For example this can
|
||||
happen if a userspace program is reading the block device.
|
||||
|
||||
NOTE: In the case where the user removed a removable-media-disk even if
|
||||
there's still dirty data not synced on disk (due a bug in the device driver
|
||||
or due an error of the user), by not destroying the dirty buffers we could
|
||||
generate corruption also on the next media inserted, thus a parameter is
|
||||
necessary to handle this case in the most safe way possible (trying
|
||||
to not corrupt also the new disk inserted with the data belonging to
|
||||
the old now corrupted disk). Also for the ramdisk the natural thing
|
||||
to do in order to release the ramdisk memory is to destroy dirty buffers.
|
||||
|
||||
These are two special cases. Normal usage imply the device driver
|
||||
to issue a sync on the device (without waiting I/O completion) and
|
||||
then an invalidate_buffers call that doesn't trash dirty buffers.
|
||||
|
||||
For handling cache coherency with the blkdev pagecache the 'update' case
|
||||
is been introduced. It is needed to re-read from disk any pinned
|
||||
buffer. NOTE: re-reading from disk is destructive so we can do it only
|
||||
when we assume nobody is changing the buffercache under our I/O and when
|
||||
we think the disk contains more recent information than the buffercache.
|
||||
The update == 1 pass marks the buffers we need to update, the update == 2
|
||||
pass does the actual I/O. */
|
||||
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);
|
||||
/* 99% of the time, we don't need to flush the cleancache on the bdev.
|
||||
* But, for the strange corners, lets be cautious
|
||||
*/
|
||||
cleancache_flush_inode(mapping);
|
||||
}
|
||||
EXPORT_SYMBOL(invalidate_bdev);
|
||||
|
||||
/*
|
||||
* Kick the writeback threads then try to free up some ZONE_NORMAL memory.
|
||||
*/
|
||||
|
@ -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))
|
||||
|
@ -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>
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
||||
#include <linux/writeback.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/backing-dev.h>
|
||||
#include <linux/buffer_head.h>
|
||||
#include <linux/tracepoint.h>
|
||||
#include "internal.h"
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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 "../internal.h" /* ugh */
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -14,7 +14,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"
|
||||
|
||||
|
@ -2092,6 +2092,7 @@ extern void bd_forget(struct inode *inode);
|
||||
extern void bdput(struct block_device *);
|
||||
extern void invalidate_bdev(struct block_device *);
|
||||
extern int sync_blockdev(struct block_device *bdev);
|
||||
extern void kill_bdev(struct block_device *);
|
||||
extern struct super_block *freeze_bdev(struct block_device *);
|
||||
extern void emergency_thaw_all(void);
|
||||
extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
|
||||
@ -2099,6 +2100,7 @@ extern int fsync_bdev(struct block_device *);
|
||||
#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)
|
||||
@ -2415,6 +2417,7 @@ 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, loff_t start, loff_t end,
|
||||
int datasync);
|
||||
extern void block_sync_page(struct page *page);
|
||||
|
||||
/* fs/splice.c */
|
||||
extern ssize_t generic_file_splice_read(struct file *, loff_t *,
|
||||
|
@ -18,7 +18,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>
|
||||
|
@ -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>
|
||||
#include <trace/events/writeback.h>
|
||||
|
||||
|
@ -13,7 +13,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>
|
||||
|
Loading…
Reference in New Issue
Block a user