コード例 #1
0
ファイル: sheep.c プロジェクト: cephpp/sheepdog
static int create_work_queues(void)
{
	if (init_work_queue(get_nr_nodes))
		return -1;

	sys->net_wqueue = create_work_queue("net", WQ_UNLIMITED);
	sys->gateway_wqueue = create_work_queue("gway", WQ_UNLIMITED);
	sys->io_wqueue = create_work_queue("io", WQ_UNLIMITED);
	sys->recovery_wqueue = create_ordered_work_queue("rw");
	sys->deletion_wqueue = create_ordered_work_queue("deletion");
	sys->block_wqueue = create_ordered_work_queue("block");
	sys->md_wqueue = create_ordered_work_queue("md");
	sys->areq_wqueue = create_work_queue("async_req", WQ_UNLIMITED);
	if (sys->enable_object_cache) {
		sys->oc_reclaim_wqueue =
			create_ordered_work_queue("oc_reclaim");
		sys->oc_push_wqueue = create_work_queue("oc_push", WQ_DYNAMIC);
		if (!sys->oc_reclaim_wqueue || !sys->oc_push_wqueue)
			return -1;
	}
	if (!sys->gateway_wqueue || !sys->io_wqueue || !sys->recovery_wqueue ||
	    !sys->deletion_wqueue || !sys->block_wqueue || !sys->md_wqueue ||
	    !sys->areq_wqueue)
			return -1;

	return 0;
}
コード例 #2
0
ファイル: sheep.c プロジェクト: sheepdog/sheepdog
static int create_work_queues(void)
{
    struct work_queue *util_wq;

    if (init_work_queue(get_nr_nodes))
        return -1;

    if (wq_net_threads) {
        sd_info("# of threads in net workqueue: %d", wq_net_threads);
        sys->net_wqueue = create_fixed_work_queue("net", wq_net_threads);
    } else {
        sd_info("net workqueue is created as unlimited, it is not recommended!");
        sys->net_wqueue = create_work_queue("net", WQ_UNLIMITED);
    }
    if (wq_gway_threads) {
        sd_info("# of threads in gway workqueue: %d", wq_gway_threads);
        sys->gateway_wqueue = create_fixed_work_queue("gway", wq_gway_threads);
    } else {
        sd_info("gway workqueue is created as unlimited, it is not recommended!");
        sys->gateway_wqueue = create_work_queue("gway", WQ_UNLIMITED);
    }
    if (wq_io_threads) {
        sd_info("# of threads in io workqueue: %d", wq_io_threads);
        sys->io_wqueue = create_fixed_work_queue("io", wq_io_threads);
    } else {
        sd_info("io workqueue is created as unlimited, it is not recommended!");
        sys->io_wqueue = create_work_queue("io", WQ_UNLIMITED);
    }
    if (wq_recovery_threads) {
        sd_info("# of threads in rw workqueue: %d", wq_recovery_threads);
        sys->recovery_wqueue = create_fixed_work_queue("rw", wq_recovery_threads);
    } else {
        sd_info("recovery workqueue is created as unlimited, it is not recommended!");
        sys->recovery_wqueue = create_work_queue("rw", WQ_UNLIMITED);
    }
    sys->deletion_wqueue = create_ordered_work_queue("deletion");
    sys->block_wqueue = create_ordered_work_queue("block");
    sys->md_wqueue = create_ordered_work_queue("md");
    if (wq_async_threads) {
        sd_info("# of threads in async_req workqueue: %d", wq_async_threads);
        sys->areq_wqueue = create_fixed_work_queue("async_req", wq_async_threads);
    } else {
        sd_info("async_req workqueue is created as unlimited, it is not recommended!");
        sys->areq_wqueue = create_work_queue("async_req", WQ_UNLIMITED);
    }
    if (!sys->gateway_wqueue || !sys->io_wqueue || !sys->recovery_wqueue ||
            !sys->deletion_wqueue || !sys->block_wqueue || !sys->md_wqueue ||
            !sys->areq_wqueue)
        return -1;

    util_wq = create_ordered_work_queue("util");
    if (!util_wq)
        return -1;
    register_util_wq(util_wq);

    return 0;
}
コード例 #3
0
ファイル: tamagotchi.c プロジェクト: LeetRocket/tamagotchi.ko
int init_module(void){
	Major = register_chrdev(0, DEVICE_NAME, &fops);

	Proc_File = create_proc_entry(PROCFS_NAME, 0644, NULL);
	if( NULL == Proc_File ){
		remove_proc_entry(PROCFS_NAME, NULL);
		printk(KERN_ALERT "Error: couldn't init /proc/%s\n", PROCFS_NAME);
		return -ENOMEM;
	}

	Proc_File->read_proc	= procfile_read;
	Proc_File->write_proc	= procfile_write;
	Proc_File->mode		= S_IFREG | S_IRUGO;
	Proc_File->uid		= 0;
	Proc_File->gid		= 0;
	Proc_File->size		= 37;

	workqueue = create_work_queue(WQ_NAME);
	queue_delayed_work(workqueue, &Task, INTERVAL);

	printk("<1>Tamagotchi loaded\n");
	printk("<1>To read Tamagotchi status create a dev file with\n");
	printk("<1>'mknod /dev/%s c %d 0'.\n", DEVICE_NAME, Major);
	printk("<1>Remove the device file and unload module to finish\n");
	return 0;
}
コード例 #4
0
int init_workqueue(void)
{
	//printk(KERN_INFO "workqueue init called\n");
	initialize_timer();//Initializing timer
	create_work_queue(); //calling workqueue
	//printk(KERN_INFO "workqueue init done\n");
	//queue_work( my_wq, &wk1->work );
	return 0;
}
コード例 #5
0
ファイル: phase3.c プロジェクト: djwong/xfsprogs
void
phase3(
	struct xfs_mount *mp,
	int		scan_threads)
{
	int			i, j;
	int			*counts;
	work_queue_t		wq;

	do_log(_("Phase 3 - for each AG...\n"));
	if (!no_modify)
		do_log(_("        - scan and clear agi unlinked lists...\n"));
	else
		do_log(_("        - scan (but don't clear) agi unlinked lists...\n"));

	set_progress_msg(PROG_FMT_AGI_UNLINKED, (__uint64_t) glob_agcount);

	/* first clear the agi unlinked AGI list */
	if (!no_modify) {
		for (i = 0; i < mp->m_sb.sb_agcount; i++)
			process_agi_unlinked(mp, i);
	}

	/* now look at possibly bogus inodes */
	for (i = 0; i < mp->m_sb.sb_agcount; i++)  {
		check_uncertain_aginodes(mp, i);
		PROG_RPT_INC(prog_rpt_done[i], 1);
	}
	print_final_rpt();

	/* ok, now that the tree's ok, let's take a good look */

	do_log(_(
	    "        - process known inodes and perform inode discovery...\n"));

	set_progress_msg(PROG_FMT_PROCESS_INO, (__uint64_t) mp->m_sb.sb_icount);

	process_ags(mp);

	print_final_rpt();

	/*
	 * process newly discovered inode chunks
	 */
	do_log(_("        - process newly discovered inodes...\n"));
	set_progress_msg(PROG_FMT_NEW_INODES, (__uint64_t) glob_agcount);

	counts = calloc(sizeof(*counts), mp->m_sb.sb_agcount);
	if (!counts) {
		do_abort(_("no memory for uncertain inode counts\n"));
		return;
	}

	do  {
		/*
		 * have to loop until no ag has any uncertain
		 * inodes
		 */
		j = 0;
		memset(counts, 0, mp->m_sb.sb_agcount * sizeof(*counts));

		create_work_queue(&wq, mp, scan_threads);

		for (i = 0; i < mp->m_sb.sb_agcount; i++)
			queue_work(&wq, do_uncertain_aginodes, i, &counts[i]);

		destroy_work_queue(&wq);

		/* tally up the counts */
		for (i = 0; i < mp->m_sb.sb_agcount; i++)
			j += counts[i];

	} while (j != 0);

	free(counts);

	print_final_rpt();
}