> if (error == AOP_TRUNCATED_PAGE) > put_page(page); > + up_read(&mapping->host->i_mapping_sem); > return error; Please add an unlock_mapping label above this up_read and consolidate most of the other unlocks by jumping there (put_and_wait_on_page_locked probablt can't use it). > truncated: > unlock_page(page); > @@ -2309,6 +2324,7 @@ static int filemap_update_page(struct kiocb *iocb, > return AOP_TRUNCATED_PAGE; The trunated case actually seems to miss the unlock. Similarly I think filemap_fault would benefit from a common unlock path.