Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0bf68dd authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Linus Torvalds
Browse files

mm: bdi init hooks



provide BDI constructor/destructor hooks

[akpm@linux-foundation.org: compile fix]
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent dc62a30e
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -1786,6 +1786,7 @@ static void blk_release_queue(struct kobject *kobj)

	blk_trace_shutdown(q);

	bdi_destroy(&q->backing_dev_info);
	kmem_cache_free(requestq_cachep, q);
}

@@ -1839,21 +1840,27 @@ static struct kobj_type queue_ktype;
struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id)
{
	struct request_queue *q;
	int err;

	q = kmem_cache_alloc_node(requestq_cachep,
				gfp_mask | __GFP_ZERO, node_id);
	if (!q)
		return NULL;

	q->backing_dev_info.unplug_io_fn = blk_backing_dev_unplug;
	q->backing_dev_info.unplug_io_data = q;
	err = bdi_init(&q->backing_dev_info);
	if (err) {
		kmem_cache_free(requestq_cachep, q);
		return NULL;
	}

	init_timer(&q->unplug_timer);

	kobject_set_name(&q->kobj, "%s", "queue");
	q->kobj.ktype = &queue_ktype;
	kobject_init(&q->kobj);

	q->backing_dev_info.unplug_io_fn = blk_backing_dev_unplug;
	q->backing_dev_info.unplug_io_data = q;

	mutex_init(&q->sysfs_lock);

	return q;
+19 −1
Original line number Diff line number Diff line
@@ -411,6 +411,9 @@ static void __exit rd_cleanup(void)
		blk_cleanup_queue(rd_queue[i]);
	}
	unregister_blkdev(RAMDISK_MAJOR, "ramdisk");

	bdi_destroy(&rd_file_backing_dev_info);
	bdi_destroy(&rd_backing_dev_info);
}

/*
@@ -419,7 +422,19 @@ static void __exit rd_cleanup(void)
static int __init rd_init(void)
{
	int i;
	int err = -ENOMEM;
	int err;

	err = bdi_init(&rd_backing_dev_info);
	if (err)
		goto out2;

	err = bdi_init(&rd_file_backing_dev_info);
	if (err) {
		bdi_destroy(&rd_backing_dev_info);
		goto out2;
	}

	err = -ENOMEM;

	if (rd_blocksize > PAGE_SIZE || rd_blocksize < 512 ||
			(rd_blocksize & (rd_blocksize-1))) {
@@ -473,6 +488,9 @@ out:
		put_disk(rd_disks[i]);
		blk_cleanup_queue(rd_queue[i]);
	}
	bdi_destroy(&rd_backing_dev_info);
	bdi_destroy(&rd_file_backing_dev_info);
out2:
	return err;
}

+5 −0
Original line number Diff line number Diff line
@@ -893,6 +893,11 @@ static struct class *mem_class;
static int __init chr_dev_init(void)
{
	int i;
	int err;

	err = bdi_init(&zero_bdi);
	if (err)
		return err;

	if (register_chrdev(MEM_MAJOR,"mem",&memory_fops))
		printk("unable to get major %d for memory devs\n", MEM_MAJOR);
+1 −0
Original line number Diff line number Diff line
@@ -545,6 +545,7 @@ static struct kobject *base_probe(dev_t dev, int *part, void *data)
void __init chrdev_init(void)
{
	cdev_map = kobj_map_init(base_probe, &chrdevs_lock);
	bdi_init(&directly_mappable_cdev_bdi);
}


+2 −0
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@ extern int configfs_is_root(struct config_item *item);

extern struct inode * configfs_new_inode(mode_t mode, struct configfs_dirent *);
extern int configfs_create(struct dentry *, int mode, int (*init)(struct inode *));
extern int configfs_inode_init(void);
extern void configfs_inode_exit(void);

extern int configfs_create_file(struct config_item *, const struct configfs_attribute *);
extern int configfs_make_dirent(struct configfs_dirent *,
Loading