Hi Peng, Peng Tao wrote: > move_extent_par_page calls a_ops->write_begin() to increase journal handler's > reference count. However, if either mext_replace_branches() or ext4_get_block > fails, the increased reference count isn't decreased. This will cause later > umounting of the fs forever hangs. The patch addresses the issue by calling > ext4_journal_stop() if page is not NULL (which means a_ops->write_end() isn't > invoked). In case mext_replaced_branches() or ext4_get_block failed, ext4_journal_stop() is called at out2 label(*) and then journal reference counter is decreased. Therefore I think this fix is not necessary. static int move_extent_par_page(struct file *o_filp, struct inode *donor_inode, pgoff_t orig_page_offset, int data_offset_in_page, int block_len_in_page, int uninit) <snip> out: if (unlikely(page)) { if (PageLocked(page)) unlock_page(page); page_cache_release(page); } out2: * ext4_journal_stop(handle); return ret < 0 ? ret : 0; } Regards, Akira Fujita -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html