mirror of https://gitee.com/openkylin/linux.git
block: add docs for gendisk / request_queue refcount helpers
This adds documentation for the gendisk / request_queue refcount helpers. Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
ff02945149
commit
b5bd357cf8
|
@ -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))) {
|
||||
|
|
|
@ -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().
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue