sys/dev/disk/dm: Don't let targets implement deps [2/2]
This commit gets rid of target's deps handler by introducing
a new structure struct dm_mapping which embeds struct dm_pdev*
and a tailq structure for the next entry whose tailq head is
embedded within struct dm_table_entry.
=====(A) before this commit
table
| [dm core]
-------------------------------------------------------
| pdev pdev pdev [dm targets]
v ^ ^ ^
target----/---------/---------/
(void*)
=====(B) this commit
table---->mapping-->mapping-->mapping-->...
| | | |
| v v v [dm core]
-------------------------------------------------------
| pdev pdev pdev [dm targets]
v ^ ^ ^
target----/---------/---------/
(void*)
Each target's init() now calls dm_table_add_deps(table, pdev)
to add a new dm_mapping (that points to pdev) to table. This
allows dm table structure to refer to underlying devices that
the target is dependent on (by following this tailq) without
using target specific deps handler.
dmsetup(8)'s deps subcommand is now handled by a newly added
dm core function dm_table_deps() that is common among targets.
This greatly reduces complexity and size of targets plus make
code less error prone. Targets only need to call dm_table_add
_deps() as mentioned above whenever they allocate underlying
device(s) via dm_pdev_insert().