mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 13:41:51 +00:00
block: Allow empty integrity profile
Allow a block device to allocate and register an integrity profile without providing a template. This allows DM to preallocate a profile to avoid deadlocks during table reconfiguration. Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
8ae372e3bb
commit
322316385d
@ -309,24 +309,24 @@ static struct kobj_type integrity_ktype = {
|
|||||||
/**
|
/**
|
||||||
* blk_integrity_register - Register a gendisk as being integrity-capable
|
* blk_integrity_register - Register a gendisk as being integrity-capable
|
||||||
* @disk: struct gendisk pointer to make integrity-aware
|
* @disk: struct gendisk pointer to make integrity-aware
|
||||||
* @template: integrity profile
|
* @template: optional integrity profile to register
|
||||||
*
|
*
|
||||||
* Description: When a device needs to advertise itself as being able
|
* Description: When a device needs to advertise itself as being able
|
||||||
* to send/receive integrity metadata it must use this function to
|
* to send/receive integrity metadata it must use this function to
|
||||||
* register the capability with the block layer. The template is a
|
* register the capability with the block layer. The template is a
|
||||||
* blk_integrity struct with values appropriate for the underlying
|
* blk_integrity struct with values appropriate for the underlying
|
||||||
* hardware. See Documentation/block/data-integrity.txt.
|
* hardware. If template is NULL the new profile is allocated but
|
||||||
|
* not filled out. See Documentation/block/data-integrity.txt.
|
||||||
*/
|
*/
|
||||||
int blk_integrity_register(struct gendisk *disk, struct blk_integrity *template)
|
int blk_integrity_register(struct gendisk *disk, struct blk_integrity *template)
|
||||||
{
|
{
|
||||||
struct blk_integrity *bi;
|
struct blk_integrity *bi;
|
||||||
|
|
||||||
BUG_ON(disk == NULL);
|
BUG_ON(disk == NULL);
|
||||||
BUG_ON(template == NULL);
|
|
||||||
|
|
||||||
if (disk->integrity == NULL) {
|
if (disk->integrity == NULL) {
|
||||||
bi = kmem_cache_alloc(integrity_cachep,
|
bi = kmem_cache_alloc(integrity_cachep,
|
||||||
GFP_KERNEL | __GFP_ZERO);
|
GFP_KERNEL | __GFP_ZERO);
|
||||||
if (!bi)
|
if (!bi)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -346,13 +346,16 @@ int blk_integrity_register(struct gendisk *disk, struct blk_integrity *template)
|
|||||||
bi = disk->integrity;
|
bi = disk->integrity;
|
||||||
|
|
||||||
/* Use the provided profile as template */
|
/* Use the provided profile as template */
|
||||||
bi->name = template->name;
|
if (template != NULL) {
|
||||||
bi->generate_fn = template->generate_fn;
|
bi->name = template->name;
|
||||||
bi->verify_fn = template->verify_fn;
|
bi->generate_fn = template->generate_fn;
|
||||||
bi->tuple_size = template->tuple_size;
|
bi->verify_fn = template->verify_fn;
|
||||||
bi->set_tag_fn = template->set_tag_fn;
|
bi->tuple_size = template->tuple_size;
|
||||||
bi->get_tag_fn = template->get_tag_fn;
|
bi->set_tag_fn = template->set_tag_fn;
|
||||||
bi->tag_size = template->tag_size;
|
bi->get_tag_fn = template->get_tag_fn;
|
||||||
|
bi->tag_size = template->tag_size;
|
||||||
|
} else
|
||||||
|
bi->name = "unsupported";
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user