• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/exofs/

Lines Matching refs:pcol

62 static void _pcol_init(struct page_collect *pcol, unsigned expected_pages,
67 pcol->sbi = sbi;
68 pcol->inode = inode;
69 pcol->expected_pages = expected_pages;
71 pcol->ios = NULL;
72 pcol->pages = NULL;
73 pcol->alloc_pages = 0;
74 pcol->nr_pages = 0;
75 pcol->length = 0;
76 pcol->pg_first = -1;
77 pcol->read_4_write = false;
80 static void _pcol_reset(struct page_collect *pcol)
82 pcol->expected_pages -= min(pcol->nr_pages, pcol->expected_pages);
84 pcol->pages = NULL;
85 pcol->alloc_pages = 0;
86 pcol->nr_pages = 0;
87 pcol->length = 0;
88 pcol->pg_first = -1;
89 pcol->ios = NULL;
94 if (!pcol->expected_pages)
95 pcol->expected_pages = MAX_PAGES_KMALLOC;
98 static int pcol_try_alloc(struct page_collect *pcol)
100 unsigned pages = min_t(unsigned, pcol->expected_pages,
103 if (!pcol->ios) { /* First time allocate io_state */
104 int ret = exofs_get_io_state(&pcol->sbi->layout, &pcol->ios);
112 pcol->sbi->layout.group_width * BIO_MAX_PAGES_KMALLOC);
115 pcol->pages = kmalloc(pages * sizeof(struct page *),
117 if (likely(pcol->pages)) {
118 pcol->alloc_pages = pages;
124 pcol->expected_pages);
128 static void pcol_free(struct page_collect *pcol)
130 kfree(pcol->pages);
131 pcol->pages = NULL;
133 if (pcol->ios) {
134 exofs_put_io_state(pcol->ios);
135 pcol->ios = NULL;
139 static int pcol_add_page(struct page_collect *pcol, struct page *page,
142 if (unlikely(pcol->nr_pages >= pcol->alloc_pages))
145 pcol->pages[pcol->nr_pages++] = page;
146 pcol->length += len;
188 static int __readpages_done(struct page_collect *pcol, bool do_unlock)
194 int ret = exofs_check_io(pcol->ios, &resid);
197 good_bytes = pcol->length;
199 good_bytes = pcol->length - resid;
203 pcol->inode->i_ino, _LLU(good_bytes), pcol->length,
204 pcol->nr_pages);
206 for (i = 0; i < pcol->nr_pages; i++) {
207 struct page *page = pcol->pages[i];
211 if (inode != pcol->inode)
229 pcol_free(pcol);
237 struct page_collect *pcol = p;
239 __readpages_done(pcol, true);
240 atomic_dec(&pcol->sbi->s_curr_pending);
241 kfree(pcol);
244 static void _unlock_pcol_pages(struct page_collect *pcol, int ret, int rw)
248 for (i = 0; i < pcol->nr_pages; i++) {
249 struct page *page = pcol->pages[i];
260 static int read_exec(struct page_collect *pcol, bool is_sync)
262 struct exofs_i_info *oi = exofs_i(pcol->inode);
263 struct exofs_io_state *ios = pcol->ios;
267 if (!pcol->pages)
271 WARN_ON(is_sync && (pcol->nr_pages != 1));
273 ios->pages = pcol->pages;
274 ios->nr_pages = pcol->nr_pages;
275 ios->length = pcol->length;
276 ios->offset = pcol->pg_first << PAGE_CACHE_SHIFT;
279 exofs_oi_read(oi, pcol->ios);
280 return __readpages_done(pcol, false);
289 *pcol_copy = *pcol;
296 atomic_inc(&pcol->sbi->s_curr_pending);
299 ios->obj.id, _LLU(ios->offset), pcol->length);
302 _pcol_reset(pcol);
307 _unlock_pcol_pages(pcol, ret, READ);
309 pcol_free(pcol);
324 struct page_collect *pcol = data;
325 struct inode *inode = pcol->inode;
333 EXOFS_ERR("PageUptodate(0x%lx, 0x%lx)\n", pcol->inode->i_ino,
353 if (!pcol->read_4_write)
358 return read_exec(pcol, false);
363 if (unlikely(pcol->pg_first == -1)) {
364 pcol->pg_first = page->index;
365 } else if (unlikely((pcol->pg_first + pcol->nr_pages) !=
368 ret = read_exec(pcol, false);
374 if (!pcol->pages) {
375 ret = pcol_try_alloc(pcol);
386 ret = pcol_add_page(pcol, page, len);
390 page, len, pcol->nr_pages, pcol->length);
393 ret = read_exec(pcol, false);
411 struct page_collect pcol;
414 _pcol_init(&pcol, nr_pages, mapping->host);
416 ret = read_cache_pages(mapping, pages, readpage_strip, &pcol);
422 return read_exec(&pcol, false);
427 struct page_collect pcol;
430 _pcol_init(&pcol, 1, page->mapping->host);
435 pcol.read_4_write = is_sync;
436 ret = readpage_strip(&pcol, page);
442 return read_exec(&pcol, is_sync);
456 struct page_collect *pcol = p;
463 atomic_dec(&pcol->sbi->s_curr_pending);
466 good_bytes = pcol->length;
468 good_bytes = pcol->length - resid;
472 pcol->inode->i_ino, _LLU(good_bytes), pcol->length,
473 pcol->nr_pages);
475 for (i = 0; i < pcol->nr_pages; i++) {
476 struct page *page = pcol->pages[i];
480 if (inode != pcol->inode)
496 pcol_free(pcol);
497 kfree(pcol);
501 static int write_exec(struct page_collect *pcol)
503 struct exofs_i_info *oi = exofs_i(pcol->inode);
504 struct exofs_io_state *ios = pcol->ios;
508 if (!pcol->pages)
513 EXOFS_ERR("write_exec: Faild to kmalloc(pcol)\n");
518 *pcol_copy = *pcol;
533 atomic_inc(&pcol->sbi->s_curr_pending);
535 pcol->inode->i_ino, pcol->pg_first, _LLU(ios->offset),
536 pcol->length);
538 _pcol_reset(pcol);
542 _unlock_pcol_pages(pcol, ret, WRITE);
543 pcol_free(pcol);
559 struct page_collect *pcol = data;
560 struct inode *inode = pcol->inode;
583 ret = write_exec(pcol);
598 if (unlikely(pcol->pg_first == -1)) {
599 pcol->pg_first = page->index;
600 } else if (unlikely((pcol->pg_first + pcol->nr_pages) !=
603 ret = write_exec(pcol);
612 if (!pcol->pages) {
613 ret = pcol_try_alloc(pcol);
621 ret = pcol_add_page(pcol, page, len);
625 pcol->nr_pages, pcol->length);
628 ret = write_exec(pcol);
653 struct page_collect pcol;
675 _pcol_init(&pcol, expected_pages, mapping->host);
677 ret = write_cache_pages(mapping, wbc, writepage_strip, &pcol);
683 return write_exec(&pcol);
688 struct page_collect pcol;
691 _pcol_init(&pcol, 1, page->mapping->host);
693 ret = writepage_strip(page, NULL, &pcol);
699 return write_exec(&pcol);