if ore_write() fails, we would unlock the pages of pcol, which is now empty, rather than pcol_copy which owns the pages when ore_write() is called. this means that no pages will actually be unlocked (pcol.nr_pages == 0) and the writing process (more accurately, the syncing process) will hang waiting for a writeback notification that never comes. Signed-off-by: Idan Kedar <idank@xxxxxxxxxx> --- fs/exofs/inode.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index b561810..bc5f1fe 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c @@ -676,7 +676,7 @@ static int write_exec(struct page_collect *pcol) return 0; err: - _unlock_pcol_pages(pcol, ret, WRITE); + _unlock_pcol_pages(pcol->pages ? pcol : pcol_copy, ret, WRITE); pcol_free(pcol); kfree(pcol_copy); -- 1.7.6.5 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html