diff --git a/[refs] b/[refs] index dce7bd2c61ea..d3ab6387c624 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9b6096a65f99a89dfd8328c4e469e7b53b3ae04a +refs/heads/master: 4ee2491ed8569f370bf4c1a4c046a6efb8032bd2 diff --git a/trunk/fs/buffer.c b/trunk/fs/buffer.c index 42534f67d71b..2e6b1a387b7e 100644 --- a/trunk/fs/buffer.c +++ b/trunk/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);