Commit b5bd357c authored by Luis Chamberlain's avatar Luis Chamberlain Committed by Jens Axboe
Browse files

block: add docs for gendisk / request_queue refcount helpers



This adds documentation for the gendisk / request_queue refcount
helpers.

Signed-off-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ff029451
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -321,6 +321,13 @@ void blk_clear_pm_only(struct request_queue *q)
}
EXPORT_SYMBOL_GPL(blk_clear_pm_only);

/**
 * blk_put_queue - decrement the request_queue refcount
 * @q: the request_queue structure to decrement the refcount for
 *
 * Decrements the refcount of the request_queue kobject. When this reaches 0
 * we'll have blk_release_queue() called.
 */
void blk_put_queue(struct request_queue *q)
{
	kobject_put(&q->kobj);
@@ -598,6 +605,12 @@ struct request_queue *blk_alloc_queue(make_request_fn make_request, int node_id)
}
EXPORT_SYMBOL(blk_alloc_queue);

/**
 * blk_get_queue - increment the request_queue refcount
 * @q: the request_queue structure to increment the refcount for
 *
 * Increment the refcount of the request_queue kobject.
 */
bool blk_get_queue(struct request_queue *q)
{
	if (likely(!blk_queue_dying(q))) {
+49 −1
Original line number Diff line number Diff line
@@ -876,6 +876,20 @@ static void invalidate_partition(struct gendisk *disk, int partno)
	bdput(bdev);
}

/**
 * del_gendisk - remove the gendisk
 * @disk: the struct gendisk to remove
 *
 * Removes the gendisk and all its associated resources. This deletes the
 * partitions associated with the gendisk, and unregisters the associated
 * request_queue.
 *
 * This is the counter to the respective __device_add_disk() call.
 *
 * The final removal of the struct gendisk happens when its refcount reaches 0
 * with put_disk(), which should be called after del_gendisk(), if
 * __device_add_disk() was used.
 */
void del_gendisk(struct gendisk *disk)
{
	struct disk_part_iter piter;
@@ -1514,6 +1528,23 @@ int disk_expand_part_tbl(struct gendisk *disk, int partno)
	return 0;
}

/**
 * disk_release - releases all allocated resources of the gendisk
 * @dev: the device representing this disk
 *
 * This function releases all allocated resources of the gendisk.
 *
 * The struct gendisk refcount is incremented with get_gendisk() or
 * get_disk_and_module(), and its refcount is decremented with
 * put_disk_and_module() or put_disk(). Once the refcount reaches 0 this
 * function is called.
 *
 * Drivers which used __device_add_disk() have a gendisk with a request_queue
 * assigned. Since the request_queue sits on top of the gendisk for these
 * drivers we also call blk_put_queue() for them, and we expect the
 * request_queue refcount to reach 0 at this point, and so the request_queue
 * will also be freed prior to the disk.
 */
static void disk_release(struct device *dev)
{
	struct gendisk *disk = dev_to_disk(dev);
@@ -1727,6 +1758,13 @@ struct gendisk *__alloc_disk_node(int minors, int node_id)
}
EXPORT_SYMBOL(__alloc_disk_node);

/**
 * get_disk_and_module - increments the gendisk and gendisk fops module refcount
 * @disk: the struct gendisk to to increment the refcount for
 *
 * This increments the refcount for the struct gendisk, and the gendisk's
 * fops module owner.
 */
struct kobject *get_disk_and_module(struct gendisk *disk)
{
	struct module *owner;
@@ -1747,6 +1785,13 @@ struct kobject *get_disk_and_module(struct gendisk *disk)
}
EXPORT_SYMBOL(get_disk_and_module);

/**
 * put_disk - decrements the gendisk refcount
 * @disk: the struct gendisk to to decrement the refcount for
 *
 * This decrements the refcount for the struct gendisk. When this reaches 0
 * we'll have disk_release() called.
 */
void put_disk(struct gendisk *disk)
{
	if (disk)
@@ -1754,7 +1799,10 @@ void put_disk(struct gendisk *disk)
}
EXPORT_SYMBOL(put_disk);

/*
/**
 * put_disk_and_module - decrements the module and gendisk refcount
 * @disk: the struct gendisk to to decrement the refcount for
 *
 * This is a counterpart of get_disk_and_module() and thus also of
 * get_gendisk().
 */