diff options
Diffstat (limited to 'fs/buffer.c')
| -rw-r--r-- | fs/buffer.c | 6 | 
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 42534f67d71..2e6b1a387b7 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -743,8 +743,10 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list)  	struct list_head tmp;  	struct address_space *mapping;  	int err = 0, err2; +	struct blk_plug plug;  	INIT_LIST_HEAD(&tmp); +	blk_start_plug(&plug);  	spin_lock(lock);  	while (!list_empty(list)) { @@ -781,6 +783,10 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list)  		}  	} +	spin_unlock(lock); +	blk_finish_plug(&plug); +	spin_lock(lock); +  	while (!list_empty(&tmp)) {  		bh = BH_ENTRY(tmp.prev);  		get_bh(bh);  |