X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=fs%2Fdirect-io.c;h=3931e7f1e6bf34a53caad0ced825942b14c18e1b;hb=bd6a59b22fd3bd044bb14978b885bcd042a10e8e;hp=0d06097bc995f93cd0074c424cbf24d221b80490;hpb=603fff54420a0ccc4c3b48bfef43896fb4e33161;p=~andy%2Flinux diff --git a/fs/direct-io.c b/fs/direct-io.c index 0d06097bc99..3931e7f1e6b 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -162,6 +162,7 @@ static int dio_refill_pages(struct dio *dio) up_read(¤t->mm->mmap_sem); if (ret < 0 && dio->blocks_available && (dio->rw == WRITE)) { + struct page *page = ZERO_PAGE(dio->curr_user_address); /* * A memory fault, but the filesystem has some outstanding * mapped blocks. We need to use those blocks up to avoid @@ -169,7 +170,8 @@ static int dio_refill_pages(struct dio *dio) */ if (dio->page_errors == 0) dio->page_errors = ret; - dio->pages[0] = ZERO_PAGE(dio->curr_user_address); + page_cache_get(page); + dio->pages[0] = page; dio->head = 0; dio->tail = 1; ret = 0;