Beispiel #1
0
/**
 * scan_mgr - commit atoms which are to be committed
 * @super: super block to commit atoms of
 *
 * Commits old atoms.
 */
static int scan_mgr(struct super_block *super)
{
	int ret;
	reiser4_context ctx;

	init_stack_context(&ctx, super);

	ret = commit_some_atoms(&get_super_private(super)->tmgr);

	reiser4_exit_context(&ctx);
	return ret;
}
Beispiel #2
0
static void entd_flush(struct super_block *super, struct wbq *rq)
{
	reiser4_context ctx;

	init_stack_context(&ctx, super);
	ctx.entd = 1;
	ctx.gfp_mask = GFP_NOFS;

	rq->wbc->range_start = page_offset(rq->page);
	rq->wbc->range_end = rq->wbc->range_start +
		(ENTD_CAPTURE_APAGE_BURST << PAGE_CACHE_SHIFT);


	rq->mapping->a_ops->writepages(rq->mapping, rq->wbc);

	if (rq->wbc->nr_to_write > 0) {
		long result;
		struct bdi_writeback *wb;
		struct wb_writeback_work work = {
			.sb		= super,
			.sync_mode	= WB_SYNC_NONE,
			.nr_pages	= LONG_MAX,
			.range_cyclic	= 0,
			.reason		= WB_REASON_TRY_TO_FREE_PAGES,
		};
		rq->wbc->sync_mode = work.sync_mode,
		rq->wbc->range_cyclic = work.range_cyclic,
		rq->wbc->range_start = 0;
		rq->wbc->range_end = LLONG_MAX;
		/*
		 * we don't need to pin superblock for writeback:
		 * this is implicitly pinned by write_page_by_ent
		 * (via igrab), so that shutdown_super() will wait
		 * (on reiser4_put_super) for entd completion.
		 */
		wb = &rq->mapping->backing_dev_info->wb;

		spin_lock(&wb->list_lock);
		result = generic_writeback_sb_inodes(super,
				             wb,
					     rq->wbc,
					     &work,
					     true);
		spin_unlock(&wb->list_lock);
	}
	rq->wbc->nr_to_write = ENTD_CAPTURE_APAGE_BURST;

	reiser4_writeout(super, rq->wbc);
	context_set_commit_async(&ctx);
	reiser4_exit_context(&ctx);
}