Let’s take a closer look at the specific implementation of the above three objects in the code. The mapped_device structure defined in the dm.c file is used to represent the mapped device. It mainly includes the locks related to the mapped device, the registered request queue and some memory pools as well as pointers. The pointer and other fields of its corresponding mapping table. The mapping table corresponding to the Mapped device is represented by the dm_table structure defined in the dm_table.c file. This structure contains an array of dm_target structures. The dm_target structure specifically describes the mapping relationship between mapped_device and one of its target devices. In the dm_table structure, these dm_targets are organized in a B-tree manner to facilitate the search operation during IO request mapping. The Dm_target structure specifically records the start address and range of the mapped device logical area mapped by the structure corresponding to the target device, and also contains a pointer to the target_type structure of the specific target device-related operations. The Target_type structure mainly contains the name of the target driver plug-in corresponding to the target device, the defined methods of building and deleting the target device of this type, the IO request remapping and ending IO methods corresponding to the target device of this type, etc. The field representing the specific target device is the private field in dm_target, and the pointer points to the structure corresponding to the specific target device mapped by the mapped device. Indicates that the specific structure of the target device differs due to different target types. For example, the structure of the simplest linear mapping target type corresponding to the target device is the linear_c structure defined in the dm-linear.c file. Its definition is as follows:
struct linear_c { struct dm_dev *dev; sector_t start; };
The definition of the target device is quite simple. It only includes the dm_dev structure pointer representing the corresponding physical device and the offset address start in the unit of sectors in the physical device. The relationship between the above data structures is shown in Figure 3:
Figure 3 The relationship between several important data structures in the device mapper
The establishment process in the kernel
In the following we will briefly introduce the process in the kernel based on the specific code The process of creating a mapped device:
1. According to the parameters passed by the ioctl interface provided by the kernel to user space, use the dev_create function in the dm-ioctl.c file to create the corresponding mapped device structure. This process is very simple. It mainly applies to the kernel for necessary memory resources, including the mapped device and the memory pool pre-applied for IO operations. The request queue dm_request corresponding to the mapped device is registered through the blk_queue_make_request function provided by the kernel. And register the mapped device as a disk block device in the kernel.
2. Call dm_hash_insert to insert the created mapped device into a global hash table in the device mapper. This table stores all mapped devices currently created in the kernel.
The above is the content of the Device Mapper mechanism (1) (2) in the Linux system kernel. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Atom editor mac version download
The most popular open source editor

SublimeText3 Mac version
God-level code editing software (SublimeText3)

SublimeText3 Chinese version
Chinese version, very easy to use
