€•ˆŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/block/data-integrity”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/block/data-integrity”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/block/data-integrity”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/block/data-integrity”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/block/data-integrity”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/block/data-integrity”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒData Integrity”h]”hŒData Integrity”…””}”(hh¨hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh£hžhhŸŒB/var/lib/git/docbuild/linux/Documentation/block/data-integrity.rst”h Kubh¢)”}”(hhh]”(h§)”}”(hŒ1. Introduction”h]”hŒ1. Introduction”…””}”(hhºhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh·hžhhŸh¶h KubhŒ paragraph”“”)”}”(hX7Modern filesystems feature checksumming of data and metadata to protect against data corruption. However, the detection of the corruption is done at read time which could potentially be months after the data was written. At that point the original data that the application tried to write is most likely lost.”h]”hX7Modern filesystems feature checksumming of data and metadata to protect against data corruption. However, the detection of the corruption is done at read time which could potentially be months after the data was written. At that point the original data that the application tried to write is most likely lost.”…””}”(hhÊhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Khh·hžhubhÉ)”}”(hXrThe solution is to ensure that the disk is actually storing what the application meant it to. Recent additions to both the SCSI family protocols (SBC Data Integrity Field, SCC protection proposal) as well as SATA/T13 (External Path Protection) try to remedy this by adding support for appending integrity metadata to an I/O. The integrity metadata (or protection information in SCSI terminology) includes a checksum for each sector as well as an incrementing counter that ensures the individual sectors are written in the right order. And for some protection schemes also that the I/O is written to the right place on disk.”h]”hXrThe solution is to ensure that the disk is actually storing what the application meant it to. Recent additions to both the SCSI family protocols (SBC Data Integrity Field, SCC protection proposal) as well as SATA/T13 (External Path Protection) try to remedy this by adding support for appending integrity metadata to an I/O. The integrity metadata (or protection information in SCSI terminology) includes a checksum for each sector as well as an incrementing counter that ensures the individual sectors are written in the right order. And for some protection schemes also that the I/O is written to the right place on disk.”…””}”(hhØhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Khh·hžhubhÉ)”}”(hX"Current storage controllers and devices implement various protective measures, for instance checksumming and scrubbing. But these technologies are working in their own isolated domains or at best between adjacent nodes in the I/O path. The interesting thing about DIF and the other integrity extensions is that the protection format is well defined and every node in the I/O path can verify the integrity of the I/O and reject it if corruption is detected. This allows not only corruption prevention but also isolation of the point of failure.”h]”hX"Current storage controllers and devices implement various protective measures, for instance checksumming and scrubbing. But these technologies are working in their own isolated domains or at best between adjacent nodes in the I/O path. The interesting thing about DIF and the other integrity extensions is that the protection format is well defined and every node in the I/O path can verify the integrity of the I/O and reject it if corruption is detected. This allows not only corruption prevention but also isolation of the point of failure.”…””}”(hhæhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Khh·hžhubeh}”(h]”Œ introduction”ah ]”h"]”Œ1. introduction”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kubh¢)”}”(hhh]”(h§)”}”(hŒ 2. The Data Integrity Extensions”h]”hŒ 2. The Data Integrity Extensions”…””}”(hhÿhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hhühžhhŸh¶h K$ubhÉ)”}”(hXZAs written, the protocol extensions only protect the path between controller and storage device. However, many controllers actually allow the operating system to interact with the integrity metadata (IMD). We have been working with several FC/SAS HBA vendors to enable the protection information to be transferred to and from their controllers.”h]”hXZAs written, the protocol extensions only protect the path between controller and storage device. However, many controllers actually allow the operating system to interact with the integrity metadata (IMD). We have been working with several FC/SAS HBA vendors to enable the protection information to be transferred to and from their controllers.”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K&hhühžhubhÉ)”}”(hXThe SCSI Data Integrity Field works by appending 8 bytes of protection information to each sector. The data + integrity metadata is stored in 520 byte sectors on disk. Data + IMD are interleaved when transferred between the controller and target. The T13 proposal is similar.”h]”hXThe SCSI Data Integrity Field works by appending 8 bytes of protection information to each sector. The data + integrity metadata is stored in 520 byte sectors on disk. Data + IMD are interleaved when transferred between the controller and target. The T13 proposal is similar.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K-hhühžhubhÉ)”}”(hŒäBecause it is highly inconvenient for operating systems to deal with 520 (and 4104) byte sectors, we approached several HBA vendors and encouraged them to allow separation of the data and integrity metadata scatter-gather lists.”h]”hŒäBecause it is highly inconvenient for operating systems to deal with 520 (and 4104) byte sectors, we approached several HBA vendors and encouraged them to allow separation of the data and integrity metadata scatter-gather lists.”…””}”(hj)hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K3hhühžhubhÉ)”}”(hŒ¶The controller will interleave the buffers on write and split them on read. This means that Linux can DMA the data buffers to and from host memory without changes to the page cache.”h]”hŒ¶The controller will interleave the buffers on write and split them on read. This means that Linux can DMA the data buffers to and from host memory without changes to the page cache.”…””}”(hj7hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K8hhühžhubhÉ)”}”(hXsAlso, the 16-bit CRC checksum mandated by both the SCSI and SATA specs is somewhat heavy to compute in software. Benchmarks found that calculating this checksum had a significant impact on system performance for a number of workloads. Some controllers allow a lighter-weight checksum to be used when interfacing with the operating system. Emulex, for instance, supports the TCP/IP checksum instead. The IP checksum received from the OS is converted to the 16-bit CRC when writing and vice versa. This allows the integrity metadata to be generated by Linux or the application at very low cost (comparable to software RAID5).”h]”hXsAlso, the 16-bit CRC checksum mandated by both the SCSI and SATA specs is somewhat heavy to compute in software. Benchmarks found that calculating this checksum had a significant impact on system performance for a number of workloads. Some controllers allow a lighter-weight checksum to be used when interfacing with the operating system. Emulex, for instance, supports the TCP/IP checksum instead. The IP checksum received from the OS is converted to the 16-bit CRC when writing and vice versa. This allows the integrity metadata to be generated by Linux or the application at very low cost (comparable to software RAID5).”…””}”(hjEhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K“hjhžhubhÉ)”}”(hŒ+bio_free() will automatically free the bip.”h]”hŒ+bio_free() will automatically free the bip.”…””}”(hjLhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K–hjhžhubeh}”(h]”Œbio”ah ]”h"]”Œ4.1 bio”ah$]”h&]”uh1h¡hjhžhhŸh¶h K†ubh¢)”}”(hhh]”(h§)”}”(hŒ4.2 Block Device”h]”hŒ4.2 Block Device”…””}”(hjehžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjbhžhhŸh¶h KšubhÉ)”}”(hŒoBlock devices can set up the integrity information in the integrity sub-struture of the queue_limits structure.”h]”hŒoBlock devices can set up the integrity information in the integrity sub-struture of the queue_limits structure.”…””}”(hjshžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KœhjbhžhubhÉ)”}”(hXLayered block devices will need to pick a profile that's appropriate for all subdevices. queue_limits_stack_integrity() can help with that. DM and MD linear, RAID0 and RAID1 are currently supported. RAID4/5/6 will require extra work due to the application tag.”h]”hX Layered block devices will need to pick a profile that’s appropriate for all subdevices. queue_limits_stack_integrity() can help with that. DM and MD linear, RAID0 and RAID1 are currently supported. RAID4/5/6 will require extra work due to the application tag.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KŸhjbhžhubeh}”(h]”Œ block-device”ah ]”h"]”Œ4.2 block device”ah$]”h&]”uh1h¡hjhžhhŸh¶h Kšubeh}”(h]”Œ"block-layer-implementation-details”ah ]”h"]”Œ%4. block layer implementation details”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kƒubh¢)”}”(hhh]”(h§)”}”(hŒ5.0 Block Layer Integrity API”h]”hŒ5.0 Block Layer Integrity API”…””}”(hj¢hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjŸhžhhŸh¶h K¦ubh¢)”}”(hhh]”(h§)”}”(hŒ5.1 Normal Filesystem”h]”hŒ5.1 Normal Filesystem”…””}”(hj³hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hj°hžhhŸh¶h K©ubhŒ block_quote”“”)”}”(hXÍThe normal filesystem is unaware that the underlying block device is capable of sending/receiving integrity metadata. The IMD will be automatically generated by the block layer at submit_bio() time in case of a WRITE. A READ request will cause the I/O integrity to be verified upon completion. IMD generation and verification can be toggled using the:: /sys/block//integrity/write_generate and:: /sys/block//integrity/read_verify flags. ”h]”(hÉ)”}”(hX'The normal filesystem is unaware that the underlying block device is capable of sending/receiving integrity metadata. The IMD will be automatically generated by the block layer at submit_bio() time in case of a WRITE. A READ request will cause the I/O integrity to be verified upon completion.”h]”hX'The normal filesystem is unaware that the underlying block device is capable of sending/receiving integrity metadata. The IMD will be automatically generated by the block layer at submit_bio() time in case of a WRITE. A READ request will cause the I/O integrity to be verified upon completion.”…””}”(hjÇhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K«hjÃubhÉ)”}”(hŒ:IMD generation and verification can be toggled using the::”h]”hŒ9IMD generation and verification can be toggled using the:”…””}”(hjÕhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K±hjÃubhŒ literal_block”“”)”}”(hŒ*/sys/block//integrity/write_generate”h]”hŒ*/sys/block//integrity/write_generate”…””}”hjåsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jãhŸh¶h K³hjÃubhÉ)”}”(hŒand::”h]”hŒand:”…””}”(hjõhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KµhjÃubjä)”}”(hŒ'/sys/block//integrity/read_verify”h]”hŒ'/sys/block//integrity/read_verify”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jójôuh1jãhŸh¶h K·hjÃubhÉ)”}”(hŒflags.”h]”hŒflags.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K¹hjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÁhŸh¶h K«hj°hžhubeh}”(h]”Œnormal-filesystem”ah ]”h"]”Œ5.1 normal filesystem”ah$]”h&]”uh1h¡hjŸhžhhŸh¶h K©ubh¢)”}”(hhh]”(h§)”}”(hŒ5.2 Integrity-Aware Filesystem”h]”hŒ5.2 Integrity-Aware Filesystem”…””}”(hj0hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hj-hžhhŸh¶h K½ubjÂ)”}”(hXTA filesystem that is integrity-aware can prepare I/Os with IMD attached. It can also use the application tag space if this is supported by the block device. `bool bio_integrity_prep(bio);` To generate IMD for WRITE and to set up buffers for READ, the filesystem must call bio_integrity_prep(bio). Prior to calling this function, the bio data direction and start sector must be set, and the bio should have all data pages added. It is up to the caller to ensure that the bio does not change while I/O is in progress. Complete bio with error if prepare failed for some reason. ”h]”(hÉ)”}”(hŒA filesystem that is integrity-aware can prepare I/Os with IMD attached. It can also use the application tag space if this is supported by the block device.”h]”hŒA filesystem that is integrity-aware can prepare I/Os with IMD attached. It can also use the application tag space if this is supported by the block device.”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K¿hj>ubhÉ)”}”(hŒ`bool bio_integrity_prep(bio);`”h]”hŒtitle_reference”“”)”}”(hjRh]”hŒbool bio_integrity_prep(bio);”…””}”(hjVhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjPubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÄhj>ubjÂ)”}”(hX…To generate IMD for WRITE and to set up buffers for READ, the filesystem must call bio_integrity_prep(bio). Prior to calling this function, the bio data direction and start sector must be set, and the bio should have all data pages added. It is up to the caller to ensure that the bio does not change while I/O is in progress. Complete bio with error if prepare failed for some reason. ”h]”(hÉ)”}”(hŒkTo generate IMD for WRITE and to set up buffers for READ, the filesystem must call bio_integrity_prep(bio).”h]”hŒkTo generate IMD for WRITE and to set up buffers for READ, the filesystem must call bio_integrity_prep(bio).”…””}”(hjmhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÆhjiubhÉ)”}”(hXPrior to calling this function, the bio data direction and start sector must be set, and the bio should have all data pages added. It is up to the caller to ensure that the bio does not change while I/O is in progress. Complete bio with error if prepare failed for some reason.”h]”hXPrior to calling this function, the bio data direction and start sector must be set, and the bio should have all data pages added. It is up to the caller to ensure that the bio does not change while I/O is in progress. Complete bio with error if prepare failed for some reason.”…””}”(hj{hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÉhjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÁhŸh¶h KÆhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÁhŸh¶h K¿hj-hžhubeh}”(h]”Œintegrity-aware-filesystem”ah ]”h"]”Œ5.2 integrity-aware filesystem”ah$]”h&]”uh1h¡hjŸhžhhŸh¶h K½ubh¢)”}”(hhh]”(h§)”}”(hŒ'5.3 Passing Existing Integrity Metadata”h]”hŒ'5.3 Passing Existing Integrity Metadata”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjhžhhŸh¶h KÑubjÂ)”}”(hX}Filesystems that either generate their own integrity metadata or are capable of transferring IMD from user space can use the following calls: `struct bip * bio_integrity_alloc(bio, gfp_mask, nr_pages);` Allocates the bio integrity payload and hangs it off of the bio. nr_pages indicate how many pages of protection data need to be stored in the integrity bio_vec list (similar to bio_alloc()). The integrity payload will be freed at bio_free() time. `int bio_integrity_add_page(bio, page, len, offset);` Attaches a page containing integrity metadata to an existing bio. The bio must have an existing bip, i.e. bio_integrity_alloc() must have been called. For a WRITE, the integrity metadata in the pages must be in a format understood by the target device with the notable exception that the sector numbers will be remapped as the request traverses the I/O stack. This implies that the pages added using this call will be modified during I/O! The first reference tag in the integrity metadata must have a value of bip->bip_sector. Pages can be added using bio_integrity_add_page() as long as there is room in the bip bio_vec array (nr_pages). Upon completion of a READ operation, the attached pages will contain the integrity metadata received from the storage device. It is up to the receiver to process them and verify data integrity upon completion. ”h]”(hÉ)”}”(hŒFilesystems that either generate their own integrity metadata or are capable of transferring IMD from user space can use the following calls:”h]”hŒFilesystems that either generate their own integrity metadata or are capable of transferring IMD from user space can use the following calls:”…””}”(hj²hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÓhj®ubhÉ)”}”(hŒ<`struct bip * bio_integrity_alloc(bio, gfp_mask, nr_pages);`”h]”jU)”}”(hjÂh]”hŒ:struct bip * bio_integrity_alloc(bio, gfp_mask, nr_pages);”…””}”(hjÄhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KØhj®ubjÂ)”}”(hŒùAllocates the bio integrity payload and hangs it off of the bio. nr_pages indicate how many pages of protection data need to be stored in the integrity bio_vec list (similar to bio_alloc()). The integrity payload will be freed at bio_free() time. ”h]”(hÉ)”}”(hŒ¾Allocates the bio integrity payload and hangs it off of the bio. nr_pages indicate how many pages of protection data need to be stored in the integrity bio_vec list (similar to bio_alloc()).”h]”hŒ¾Allocates the bio integrity payload and hangs it off of the bio. nr_pages indicate how many pages of protection data need to be stored in the integrity bio_vec list (similar to bio_alloc()).”…””}”(hjÛhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÚhj×ubhÉ)”}”(hŒ7The integrity payload will be freed at bio_free() time.”h]”hŒ7The integrity payload will be freed at bio_free() time.”…””}”(hjéhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÞhj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÁhŸh¶h KÚhj®ubhÉ)”}”(hŒ5`int bio_integrity_add_page(bio, page, len, offset);`”h]”jU)”}”(hjÿh]”hŒ3int bio_integrity_add_page(bio, page, len, offset);”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Káhj®ubjÂ)”}”(hXXAttaches a page containing integrity metadata to an existing bio. The bio must have an existing bip, i.e. bio_integrity_alloc() must have been called. For a WRITE, the integrity metadata in the pages must be in a format understood by the target device with the notable exception that the sector numbers will be remapped as the request traverses the I/O stack. This implies that the pages added using this call will be modified during I/O! The first reference tag in the integrity metadata must have a value of bip->bip_sector. Pages can be added using bio_integrity_add_page() as long as there is room in the bip bio_vec array (nr_pages). Upon completion of a READ operation, the attached pages will contain the integrity metadata received from the storage device. It is up to the receiver to process them and verify data integrity upon completion. ”h]”(hÉ)”}”(hXAttaches a page containing integrity metadata to an existing bio. The bio must have an existing bip, i.e. bio_integrity_alloc() must have been called. For a WRITE, the integrity metadata in the pages must be in a format understood by the target device with the notable exception that the sector numbers will be remapped as the request traverses the I/O stack. This implies that the pages added using this call will be modified during I/O! The first reference tag in the integrity metadata must have a value of bip->bip_sector.”h]”hXAttaches a page containing integrity metadata to an existing bio. The bio must have an existing bip, i.e. bio_integrity_alloc() must have been called. For a WRITE, the integrity metadata in the pages must be in a format understood by the target device with the notable exception that the sector numbers will be remapped as the request traverses the I/O stack. This implies that the pages added using this call will be modified during I/O! The first reference tag in the integrity metadata must have a value of bip->bip_sector.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KãhjubhÉ)”}”(hŒoPages can be added using bio_integrity_add_page() as long as there is room in the bip bio_vec array (nr_pages).”h]”hŒoPages can be added using bio_integrity_add_page() as long as there is room in the bip bio_vec array (nr_pages).”…””}”(hj&hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KíhjubhÉ)”}”(hŒÑUpon completion of a READ operation, the attached pages will contain the integrity metadata received from the storage device. It is up to the receiver to process them and verify data integrity upon completion.”h]”hŒÑUpon completion of a READ operation, the attached pages will contain the integrity metadata received from the storage device. It is up to the receiver to process them and verify data integrity upon completion.”…””}”(hj4hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Kðhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÁhŸh¶h Kãhj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÁhŸh¶h KÓhjhžhubhŒ transition”“”)”}”(hŒF----------------------------------------------------------------------”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1jNhŸh¶h KöhjhžhubhÉ)”}”(hŒ:2007-12-24 Martin K. Petersen ”h]”(hŒ2007-12-24 Martin K. Petersen <”…””}”(hjZhžhhŸNh NubhŒ reference”“”)”}”(hŒmartin.petersen@oracle.com”h]”hŒmartin.petersen@oracle.com”…””}”(hjdhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œ!mailto:martin.petersen@oracle.com”uh1jbhjZubhŒ>”…””}”(hjZhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Køhjhžhubeh}”(h]”Œ#passing-existing-integrity-metadata”ah ]”h"]”Œ'5.3 passing existing integrity metadata”ah$]”h&]”uh1h¡hjŸhžhhŸh¶h KÑubeh}”(h]”Œblock-layer-integrity-api”ah ]”h"]”Œ5.0 block layer integrity api”ah$]”h&]”uh1h¡hh£hžhhŸh¶h K¦ubeh}”(h]”Œdata-integrity”ah ]”h"]”Œdata integrity”ah$]”h&]”uh1h¡hhhžhhŸh¶h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h¶uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¦NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j¹Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h¶Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j“jhùhöjtjqjýjújœj™j_j\j”j‘j‹jˆj*j'jšj—jƒj€uŒ nametypes”}”(j“‰hù‰jt‰jý‰jœ‰j_‰j”‰j‹‰j*‰jš‰jƒ‰uh}”(jh£höh·jqhüjújwj™jj\jj‘jbjˆjŸj'j°j—j-j€juŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.