title Loop device kernel module participantgroup #lightyellow Kernel participant Kernel participantgroup #lightblue Loop device kernel module participant Module participant Loop control participant Loop device end participant MISC participant Blkdev participant Blk-mq participant Blk-settings participant Blk-core participant Genhd end group Kernel module init activate Kernel Kernel->Module:module_init activate Module deactivate Kernel Module->Loop control:loop_init deactivate Module activate Loop control Loop control->MISC:misc_register deactivate Loop control activate MISC note right of MISC:create "loop-control"\nmisc device Loop control<--MISC: deactivate MISC activate Loop control Loop control->Blkdev:register_blkdev deactivate Loop control activate Blkdev note right of Blkdev:create "loop"\nblock device Loop control<--Blkdev: activate Loop control deactivate Blkdev Loop control->Genhd:blk_register_region deactivate Loop control activate Genhd note right of Genhd:register device\nnumbers Loop control<--Genhd: deactivate Genhd activate Loop control loop pre-create loop devices Loop control->Loop device:loop_add deactivate Loop control activate Loop device Loop device->Blk-mq:blk_mq_alloc_tag_set activate Blk-mq deactivate Loop device Loop device<--Blk-mq: deactivate Blk-mq activate Loop device Loop device->Blk-mq:blk_mq_init_queue activate Blk-mq deactivate Loop device Loop device<--Blk-mq: deactivate Blk-mq activate Loop device Loop device->Blk-settings:blk_queue_max_hw_sectors activate Blk-settings deactivate Loop device Loop device<--Blk-settings: deactivate Blk-settings activate Loop device Loop device->Blk-core:blk_queue_flag_set activate Blk-core deactivate Loop device Loop device<--Blk-core: deactivate Blk-core activate Loop device Loop device->Genhd:alloc_disk activate Genhd deactivate Loop device Loop device<--Genhd: deactivate Genhd activate Loop device Loop device->Genhd:add_disk activate Genhd deactivate Loop device Loop device<--Genhd: deactivate Genhd activate Loop device Loop control<--Loop device: deactivate Loop device activate Loop control end Module<--Loop control: deactivate Loop control activate Module Kernel<--Module: deactivate Module activate Kernel space deactivate Kernel end group Kernel module exit activate Kernel Kernel->Module:module_exit deactivate Kernel activate Module Module->Loop control:loop_exit deactivate Module activate Loop control loop delete loop devices Loop control->Loop device:loop_remove deactivate Loop control activate Loop device Loop device->Genhd:del_gendisk activate Genhd deactivate Loop device Loop device<--Genhd: deactivate Genhd activate Loop device Loop device->Blk-core:blk_cleanup_queue activate Blk-core deactivate Loop device Loop device<--Blk-core: deactivate Blk-core activate Loop device Loop device->Blk-mq:blk_mq_free_tag_set activate Blk-mq deactivate Loop device Loop device<--Blk-mq: deactivate Blk-mq activate Loop device Loop device->Genhd:put_disk activate Genhd deactivate Loop device Loop device<--Genhd: deactivate Genhd activate Loop device Loop control<--Loop device: deactivate Loop device activate Loop control end Loop control->Genhd:blk_unregister_region deactivate Loop control activate Genhd note right of Genhd:delete device\nnumbers Loop control<--Genhd: deactivate Genhd activate Loop control Loop control->Blkdev:unregister_blkdev deactivate Loop control activate Blkdev note right of Blkdev:delete "loop"\nblock device Loop control<--Blkdev: deactivate Blkdev activate Loop control Loop control->MISC:misc_deregister deactivate Loop control activate MISC note right of MISC:delete "loop-control"\nmisc device Loop control<--MISC: deactivate MISC activate Loop control Module<--Loop control: deactivate Loop control activate Module Kernel<--Module: deactivate Module activate Kernel end