Messages in this thread | | | Date | Sun, 14 Jan 2007 14:59:39 +1100 | From | Nick Piggin <> | Subject | Re: [patch 10/10] mm: fix pagecache write deadlocks |
| |
Nick Piggin wrote:
> @@ -1878,31 +1889,88 @@ generic_file_buffered_write(struct kiocb > break; > } > > + /* > + * non-uptodate pages cannot cope with short copies, and we > + * cannot take a pagefault with the destination page locked. > + * So pin the source page to copy it. > + */ > + if (!PageUptodate(page)) { > + unlock_page(page); > + > + bytes = min(bytes, PAGE_CACHE_SIZE - > + ((unsigned long)buf & ~PAGE_CACHE_MASK)); > + > + /* > + * Cannot get_user_pages with a page locked for the > + * same reason as we can't take a page fault with a > + * page locked (as explained below). > + */ > + status = get_user_pages(current, current->mm, > + (unsigned long)buf & PAGE_CACHE_MASK, 1, > + 0, 0, &src_page, NULL);
Thinko... get_user_pages needs to be called with mmap_sem held, obviously.
-- SUSE Labs, Novell Inc. Send instant messages to your online friends http://au.messenger.yahoo.com
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |