mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
vfs: Make sys_sync() use fsync_super() (version 4)
It is unnecessarily fragile to have two places (fsync_super() and do_sync()) doing data integrity sync of the filesystem. Alter __fsync_super() to accommodate needs of both callers and use it. So after this patch __fsync_super() is the only place where we gather all the calls needed to properly send all data on a filesystem to disk. Nice bonus is that we get a complete livelock avoidance and write_supers() is now only used for periodic writeback of superblocks. sync_blockdevs() introduced a couple of patches ago is gone now. [build fixes folded] Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
429479f031
commit
5cee5815d1
7 changed files with 52 additions and 136 deletions
|
@ -176,17 +176,22 @@ blkdev_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
|
|||
iov, offset, nr_segs, blkdev_get_blocks, NULL);
|
||||
}
|
||||
|
||||
int __sync_blockdev(struct block_device *bdev, int wait)
|
||||
{
|
||||
if (!bdev)
|
||||
return 0;
|
||||
if (!wait)
|
||||
return filemap_flush(bdev->bd_inode->i_mapping);
|
||||
return filemap_write_and_wait(bdev->bd_inode->i_mapping);
|
||||
}
|
||||
|
||||
/*
|
||||
* Write out and wait upon all the dirty data associated with a block
|
||||
* device via its mapping. Does not take the superblock lock.
|
||||
*/
|
||||
int sync_blockdev(struct block_device *bdev)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (bdev)
|
||||
ret = filemap_write_and_wait(bdev->bd_inode->i_mapping);
|
||||
return ret;
|
||||
return __sync_blockdev(bdev, 1);
|
||||
}
|
||||
EXPORT_SYMBOL(sync_blockdev);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue