Example #1
0
void fs_inode_init_kdev(struct inode *node)
{
	if(node->phys_dev && !node->kdev) {
		node->kdev = dm_device_get(MAJOR(node->phys_dev));
		if(node->kdev && node->kdev->create)
			node->kdev->create(node);
	}
}
Example #2
0
void blockdev_register_partition(struct inode *master, struct inode *part, uint64_t partbegin, uint64_t partlen)
{
	struct blockdev *mbd = master->devdata;
	struct blockdev *pbd = kmalloc(sizeof(struct blockdev));
	pbd->ctl = mbd->ctl;
	pbd->partbegin = partbegin;
	pbd->partlen = partlen;
	part->devdata = pbd;
	part->phys_dev = master->phys_dev;
	part->kdev = dm_device_get(block_major);
}
Example #3
0
int blockdev_register(struct inode *node, struct blockctl *ctl)
{
	struct blockdev *bd = kmalloc(sizeof(struct blockdev));
	mutex_create(&ctl->cachelock, 0);
	hash_create(&ctl->cache, 0, 0x4000);
	mpscq_create(&ctl->queue, 1000);
	bd->ctl = ctl;

	int num = atomic_fetch_add(&next_minor, 1);
	node->devdata = bd;
	node->phys_dev = GETDEV(block_major, num);
	node->kdev = dm_device_get(block_major);
	
	kthread_create(&ctl->elevator, "[kelevator]", 0, block_elevator_main, node);
	char name[64];
	snprintf(name, 64, "/dev/bcache-%d", num);
	kerfs_register_parameter(name, ctl, 0, 0, kerfs_block_cache_report);
	return num;
}