Lines Matching refs:wb

19 static int afs_write_back_from_locked_page(struct afs_writeback *wb,
35 static void afs_unlink_writeback(struct afs_writeback *wb) in afs_unlink_writeback() argument
38 struct afs_vnode *vnode = wb->vnode; in afs_unlink_writeback()
40 list_del_init(&wb->link); in afs_unlink_writeback()
57 static void afs_free_writeback(struct afs_writeback *wb) in afs_free_writeback() argument
60 key_put(wb->key); in afs_free_writeback()
61 kfree(wb); in afs_free_writeback()
67 void afs_put_writeback(struct afs_writeback *wb) in afs_put_writeback() argument
69 struct afs_vnode *vnode = wb->vnode; in afs_put_writeback()
71 _enter("{%d}", wb->usage); in afs_put_writeback()
74 if (--wb->usage == 0) in afs_put_writeback()
75 afs_unlink_writeback(wb); in afs_put_writeback()
77 wb = NULL; in afs_put_writeback()
79 if (wb) in afs_put_writeback()
80 afs_free_writeback(wb); in afs_put_writeback()
122 struct afs_writeback *candidate, *wb; in afs_write_begin() local
169 wb = (struct afs_writeback *) page_private(page); in afs_write_begin()
170 if (wb) { in afs_write_begin()
171 if (wb->key == key && wb->state == AFS_WBACK_PENDING) in afs_write_begin()
179 list_for_each_entry(wb, &vnode->writebacks, link) { in afs_write_begin()
180 if (wb->last == index - 1 && wb->key == key && in afs_write_begin()
181 wb->state == AFS_WBACK_PENDING) in afs_write_begin()
196 ASSERTRANGE(wb->first, <=, index, <=, wb->last); in afs_write_begin()
197 if (index == wb->first && from < wb->offset_first) in afs_write_begin()
198 wb->offset_first = from; in afs_write_begin()
199 if (index == wb->last && to > wb->to_last) in afs_write_begin()
200 wb->to_last = to; in afs_write_begin()
207 _debug("append into %lx-%lx", wb->first, wb->last); in afs_write_begin()
208 wb->usage++; in afs_write_begin()
209 wb->last++; in afs_write_begin()
210 wb->to_last = to; in afs_write_begin()
213 set_page_private(page, (unsigned long) wb); in afs_write_begin()
222 if (wb->state == AFS_WBACK_PENDING) in afs_write_begin()
223 wb->state = AFS_WBACK_CONFLICTING; in afs_write_begin()
226 ret = afs_write_back_from_locked_page(wb, page); in afs_write_begin()
235 afs_put_writeback(wb); in afs_write_begin()
315 static int afs_write_back_from_locked_page(struct afs_writeback *wb, in afs_write_back_from_locked_page() argument
336 if (start >= wb->last) in afs_write_back_from_locked_page()
341 n = wb->last - start + 1; in afs_write_back_from_locked_page()
344 n = find_get_pages_contig(wb->vnode->vfs_inode.i_mapping, in afs_write_back_from_locked_page()
358 if (page->index > wb->last) in afs_write_back_from_locked_page()
363 page_private(page) != (unsigned long) wb) { in afs_write_back_from_locked_page()
382 } while (start <= wb->last && count < 65536); in afs_write_back_from_locked_page()
391 offset = (first == wb->first) ? wb->offset_first : 0; in afs_write_back_from_locked_page()
392 to = (last == wb->last) ? wb->to_last : PAGE_SIZE; in afs_write_back_from_locked_page()
396 ret = afs_vnode_store_data(wb, first, last, offset, to); in afs_write_back_from_locked_page()
402 &wb->vnode->vfs_inode.i_mapping->flags); in afs_write_back_from_locked_page()
411 afs_kill_pages(wb->vnode, true, first, last); in afs_write_back_from_locked_page()
412 set_bit(AS_EIO, &wb->vnode->vfs_inode.i_mapping->flags); in afs_write_back_from_locked_page()
420 afs_kill_pages(wb->vnode, false, first, last); in afs_write_back_from_locked_page()
439 struct afs_writeback *wb; in afs_writepage() local
444 wb = (struct afs_writeback *) page_private(page); in afs_writepage()
445 ASSERT(wb != NULL); in afs_writepage()
447 ret = afs_write_back_from_locked_page(wb, page); in afs_writepage()
467 struct afs_writeback *wb; in afs_writepages_region() local
509 wb = (struct afs_writeback *) page_private(page); in afs_writepages_region()
510 ASSERT(wb != NULL); in afs_writepages_region()
512 spin_lock(&wb->vnode->writeback_lock); in afs_writepages_region()
513 wb->state = AFS_WBACK_WRITING; in afs_writepages_region()
514 spin_unlock(&wb->vnode->writeback_lock); in afs_writepages_region()
516 ret = afs_write_back_from_locked_page(wb, page); in afs_writepages_region()
573 struct afs_writeback *wb = call->wb; in afs_pages_written_back() local
582 ASSERT(wb != NULL); in afs_pages_written_back()
600 if (page_private(page) == (unsigned long) wb) { in afs_pages_written_back()
603 wb->usage--; in afs_pages_written_back()
607 if (wb->usage == 0) { in afs_pages_written_back()
608 afs_unlink_writeback(wb); in afs_pages_written_back()
614 afs_free_writeback(wb); in afs_pages_written_back()
615 wb = NULL; in afs_pages_written_back()
685 struct afs_writeback *wb, *xwb; in afs_fsync() local
701 wb = kzalloc(sizeof(*wb), GFP_KERNEL); in afs_fsync()
702 if (!wb) { in afs_fsync()
706 wb->vnode = vnode; in afs_fsync()
707 wb->first = 0; in afs_fsync()
708 wb->last = -1; in afs_fsync()
709 wb->offset_first = 0; in afs_fsync()
710 wb->to_last = PAGE_SIZE; in afs_fsync()
711 wb->usage = 1; in afs_fsync()
712 wb->state = AFS_WBACK_SYNCING; in afs_fsync()
713 init_waitqueue_head(&wb->waitq); in afs_fsync()
720 list_add_tail(&wb->link, &vnode->writebacks); in afs_fsync()
726 afs_put_writeback(wb); in afs_fsync()
732 ret = wait_event_interruptible(wb->waitq, in afs_fsync()
733 wb->state == AFS_WBACK_COMPLETE || in afs_fsync()
734 vnode->writebacks.next == &wb->link); in afs_fsync()
735 afs_put_writeback(wb); in afs_fsync()