mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 08:03:01 +09:00
block: simplify the block device syncing code
Get rid of the indirections and just provide a sync_bdevs helper for the generic sync code. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20211019062530.2174626-8-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
committed by
Jens Axboe
parent
680e667bc2
commit
1e03a36bdf
17
block/bdev.c
17
block/bdev.c
@@ -1021,7 +1021,7 @@ int __invalidate_device(struct block_device *bdev, bool kill_dirty)
|
||||
}
|
||||
EXPORT_SYMBOL(__invalidate_device);
|
||||
|
||||
void iterate_bdevs(void (*func)(struct block_device *, void *), void *arg)
|
||||
void sync_bdevs(bool wait)
|
||||
{
|
||||
struct inode *inode, *old_inode = NULL;
|
||||
|
||||
@@ -1052,8 +1052,19 @@ void iterate_bdevs(void (*func)(struct block_device *, void *), void *arg)
|
||||
bdev = I_BDEV(inode);
|
||||
|
||||
mutex_lock(&bdev->bd_disk->open_mutex);
|
||||
if (bdev->bd_openers)
|
||||
func(bdev, arg);
|
||||
if (!bdev->bd_openers) {
|
||||
; /* skip */
|
||||
} else if (wait) {
|
||||
/*
|
||||
* We keep the error status of individual mapping so
|
||||
* that applications can catch the writeback error using
|
||||
* fsync(2). See filemap_fdatawait_keep_errors() for
|
||||
* details.
|
||||
*/
|
||||
filemap_fdatawait_keep_errors(inode->i_mapping);
|
||||
} else {
|
||||
filemap_fdatawrite(inode->i_mapping);
|
||||
}
|
||||
mutex_unlock(&bdev->bd_disk->open_mutex);
|
||||
|
||||
spin_lock(&blockdev_superblock->s_inode_list_lock);
|
||||
|
||||
Reference in New Issue
Block a user