@csphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/core-api/errseqmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/core-api/errseqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/core-api/errseqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/core-api/errseqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/core-api/errseqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/sp_SP/core-api/errseqmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhP/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/core-api/errseq.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h"Documentation/core-api/errseq.rst h]h)}(h!Documentation/core-api/errseq.rsth]h!Documentation/core-api/errseq.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h/周彬彬 Binbin Zhou h]h)}(h.周彬彬 Binbin Zhou h](h周彬彬 Binbin Zhou <}(hj hhhNhNubh reference)}(hzhoubinbin@loongson.cnh]hzhoubinbin@loongson.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:zhoubinbin@loongson.cnuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhKubh)}(h*吴想成 Wu Xiangcheng h]h)}(h)吴想成 Wu Xiangcheng h](h吴想成 Wu Xiangcheng <}(hjehhhNhNubj))}(hbobwxc@email.cnh]hbobwxc@email.cn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bobwxc@email.cnuh1j(hjeubh>}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjaubah}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(herrseq_t数据类型h]herrseq_t数据类型}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h``errseq_t`` 是一种在一个地方记录错误的方法,并允许任意数量的 ``订阅者`` 判断自上 次采样点以来是否发生了变化。h](hliteral)}(h ``errseq_t``h]herrseq_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhJ 是一种在一个地方记录错误的方法,并允许任意数量的 }(hjhhhNhNubj)}(h ``订阅者``h]h 订阅者}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh8 判断自上 次采样点以来是否发生了变化。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h最初的用例是跟踪文件同步系统调用( ``fsync``, ``fdatasync``, ``msync`` 和 ``sync_file_range`` )的错误,但它也可以用于其他情况。h](h4最初的用例是跟踪文件同步系统调用( }(hjhhhNhNubj)}(h ``fsync``h]hfsync}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h ``fdatasync``h]h fdatasync}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h ``msync``h]hmsync}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 和 }(hjhhhNhNubj)}(h``sync_file_range``h]hsync_file_range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh4 )的错误,但它也可以用于其他情况。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h它被实现为一个无符号的32位值。低位被指定保存错误代码(在1和MAX_ERRNO之间)。高位 用作计数器。这里是用原子操作而不是锁来完成的,因此可以从任何上下文中调用这些函数。h]h它被实现为一个无符号的32位值。低位被指定保存错误代码(在1和MAX_ERRNO之间)。高位 用作计数器。这里是用原子操作而不是锁来完成的,因此可以从任何上下文中调用这些函数。}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hl请注意,如果频繁记录新错误,则存在冲突风险,因为我们用作计数器的位很少。h]hl请注意,如果频繁记录新错误,则存在冲突风险,因为我们用作计数器的位很少。}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h为了缓解这种情况,错误值和计数器之间的位被用作一个标志,以判断自记录新值以来是否 对该值进行了采样。这使我们能够避免在上次记录错误后没有人取样的情况下碰撞计数器。h]h为了缓解这种情况,错误值和计数器之间的位被用作一个标志,以判断自记录新值以来是否 对该值进行了采样。这使我们能够避免在上次记录错误后没有人取样的情况下碰撞计数器。}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h3因此,我们得到了一个类似这样的值:h]h3因此,我们得到了一个类似这样的值:}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK&uh1jvhjsubjw)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jvhjsubjw)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jvhjsubhtbody)}(hhh](hrow)}(hhh](hentry)}(hhh]h)}(h31..13h]h31..13}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h12h]h12}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h11..0h]h11..0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(h 计数器h]h 计数器}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h标志h]h标志}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h 错误值h]h 错误值}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]colsKuh1jqhjnubah}(h]h ]h"]h$]h&]uh1jlhjhhhhhNubh)}(hXc总体思路是让 ``观察者`` 对errseq_t值进行采样,并将其保留为运行游标。该值稍后可用 于判断自采样完成后是否发生了任何新错误,并原子地记录检查时的状态。这使得我们能在 一个地方记录错误,然后有许多 ``观察者`` 可以判断自上次检查以来该值是否发生了变化。h](h总体思路是让 }(hjNhhhNhNubj)}(h ``观察者``h]h 观察者}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh 对errseq_t值进行采样,并将其保留为运行游标。该值稍后可用 于判断自采样完成后是否发生了任何新错误,并原子地记录检查时的状态。这使得我们能在 一个地方记录错误,然后有许多 }(hjNhhhNhNubj)}(h ``观察者``h]h 观察者}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh@ 可以判断自上次检查以来该值是否发生了变化。}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK)hjhhubh)}(h新的errseq_t应始终清零。全零的errseq_t值是从未出现错误的特殊(但常见)情况。因此, 如果您希望知道自首次初始化以来是否曾经有过错误集,则全零值被用作 ``纪元`` 。h](h新的errseq_t应始终清零。全零的errseq_t值是从未出现错误的特殊(但常见)情况。因此, 如果您希望知道自首次初始化以来是否曾经有过错误集,则全零值被用作 }(hjhhhNhNubj)}(h ``纪元``h]h纪元}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK-hjhhubj)}(hhh](j)}(hAPI的使用方法h]hAPI的使用方法}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK1ubh)}(h让我给你们讲一个关于员工drone的故事。现在,他总体上是个好员工,但公司有点...管理 繁重。他今天必须向77名主管汇报,明天 ``大老板`` 要从外地赶来,他肯定也会考验这个 可怜的家伙。h](h让我给你们讲一个关于员工drone的故事。现在,他总体上是个好员工,但公司有点...管理 繁重。他今天必须向77名主管汇报,明天 }(hjhhhNhNubj)}(h ``大老板``h]h 大老板}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhD 要从外地赶来,他肯定也会考验这个 可怜的家伙。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubh)}(hX 他们都把工作交给他去做---多到他都记不住谁交给他什么了,但这并不是什么大问题。主管 们只想知道他什么时候完成他们迄今为止交给他的所有工作,以及自从他们上次询问以来他 是否犯了任何错误。h]hX 他们都把工作交给他去做---多到他都记不住谁交给他什么了,但这并不是什么大问题。主管 们只想知道他什么时候完成他们迄今为止交给他的所有工作,以及自从他们上次询问以来他 是否犯了任何错误。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubh)}(h他可能在他们实际上并没有交给他的工作上犯了错误,但他无法在那么详细的层面上记录事 情,他所能记得的只是他最近犯的错误。h]h他可能在他们实际上并没有交给他的工作上犯了错误,但他无法在那么详细的层面上记录事 情,他所能记得的只是他最近犯的错误。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjhhubh)}(h/下面是我们 ``worker_drone`` 的表达式::h](h下面是我们 }(hjhhhNhNubj)}(h``worker_drone``h]h worker_drone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 的表达式:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK>hjhhubh literal_block)}(hQstruct worker_drone { errseq_t wd_err; /* 用来记录错误 */ };h]hQstruct worker_drone { errseq_t wd_err; /* 用来记录错误 */ };}hjsbah}(h]h ]h"]h$]h&]hhuh1j hhhK@hjhhubh)}(h;每天, ``worker_drone`` 都是以一张白纸开始的::h](h 每天, }(hjhhhNhNubj)}(h``worker_drone``h]h worker_drone}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 都是以一张白纸开始的:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKDhjhhubj)}(h1struct worker_drone wd; wd.wd_err = (errseq_t)0;h]h1struct worker_drone wd; wd.wd_err = (errseq_t)0;}hj=sbah}(h]h ]h"]h$]h&]hhuh1j hhhKFhjhhubh)}(h~主管们进来后对当天的工作进行初步了解。他们并不关心在他们观察开始之前发生的任何事 情::h]h}主管们进来后对当天的工作进行初步了解。他们并不关心在他们观察开始之前发生的任何事 情:}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjhhubj)}(hstruct supervisor { errseq_t s_wd_err; /* wd_err的私有“游标” */ spinlock_t s_wd_err_lock; /* 保护s_wd_err */ } struct supervisor su; su.s_wd_err = errseq_sample(&wd.wd_err); spin_lock_init(&su.s_wd_err_lock);h]hstruct supervisor { errseq_t s_wd_err; /* wd_err的私有“游标” */ spinlock_t s_wd_err_lock; /* 保护s_wd_err */ } struct supervisor su; su.s_wd_err = errseq_sample(&wd.wd_err); spin_lock_init(&su.s_wd_err_lock);}hjYsbah}(h]h ]h"]h$]h&]hhuh1j hhhKMhjhhubh)}(h现在他们开始给他布置任务。每隔几分钟,他们就要求他完成迄今为止交给他的所有工作。 然后问他是否有犯任何错误::h]h现在他们开始给他布置任务。每隔几分钟,他们就要求他完成迄今为止交给他的所有工作。 然后问他是否有犯任何错误:}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjhhubj)}(hyspin_lock(&su.su_wd_err_lock); err = errseq_check_and_advance(&wd.wd_err, &su.s_wd_err); spin_unlock(&su.su_wd_err_lock);h]hyspin_lock(&su.su_wd_err_lock); err = errseq_check_and_advance(&wd.wd_err, &su.s_wd_err); spin_unlock(&su.su_wd_err_lock);}hjusbah}(h]h ]h"]h$]h&]hhuh1j hhhKZhjhhubh)}(h+到目前为止,它只是不断返回0。h]h+到目前为止,它只是不断返回0。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjhhubh)}(h现在,这家公司的老板非常吝啬,给了他不合格的设备来完成他的工作。偶尔设备会出现故 障,导致他犯错。他重重地叹了一口气,并把它记录下来::h]h现在,这家公司的老板非常吝啬,给了他不合格的设备来完成他的工作。偶尔设备会出现故 障,导致他犯错。他重重地叹了一口气,并把它记录下来:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjhhubj)}(herrseq_set(&wd.wd_err, -EIO);h]herrseq_set(&wd.wd_err, -EIO);}hjsbah}(h]h ]h"]h$]h&]hhuh1j hhhKchjhhubh)}(h...然后继续工作。主管们最终会再次检查,他们在下次检查时都会发现这个错误。后续的调 用将返回0,直到记录下另一个错误,此时将向每个调用报告一次。h]h...然后继续工作。主管们最终会再次检查,他们在下次检查时都会发现这个错误。后续的调 用将返回0,直到记录下另一个错误,此时将向每个调用报告一次。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjhhubh)}(h请注意,主管们无法知道他们犯了多少错误,只能知道自上次检查以来是否犯了一个错误, 以及记录的最新值。h]h请注意,主管们无法知道他们犯了多少错误,只能知道自上次检查以来是否犯了一个错误, 以及记录的最新值。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjhhubh)}(h偶尔,大老板会来抽查,要求员工为他做一次性的工作。他并不像主管们那样全职观察员工, 但他确实需要知道在他的工作处理过程中是否发生了错误。h]h偶尔,大老板会来抽查,要求员工为他做一次性的工作。他并不像主管们那样全职观察员工, 但他确实需要知道在他的工作处理过程中是否发生了错误。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjhhubh)}(hd他只需对员工当前的errseq_t进行采样,然后用它来判断后来是否发生了错误::h]hc他只需对员工当前的errseq_t进行采样,然后用它来判断后来是否发生了错误:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjhhubj)}(hzerrseq_t since = errseq_sample(&wd.wd_err); /* 提交一些工作,等待完成 */ err = errseq_check(&wd.wd_err, since);h]hzerrseq_t since = errseq_sample(&wd.wd_err); /* 提交一些工作,等待完成 */ err = errseq_check(&wd.wd_err, since);}hjsbah}(h]h ]h"]h$]h&]hhuh1j hhhKphjhhubh)}(h由于他只是要在那个点之后丢弃 ``since`` ,所以他不需要在这里推进它。同时他也不需要 任何锁,因为它不能被其他人使用。h](h+由于他只是要在那个点之后丢弃 }(hjhhhNhNubj)}(h ``since``h]hsince}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhq ,所以他不需要在这里推进它。同时他也不需要 任何锁,因为它不能被其他人使用。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKthjhhubeh}(h]apiah ]h"]api的使用方法ah$]h&]uh1jhjhhhhhK1ubj)}(hhh](j)}(h序列化更新errseq_t游标h]h序列化更新errseq_t游标}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKxubh)}(hX请注意,errseq_t API在check_and_advance_operation期间不保护errseq_t游标。只有典型 的错误代码是被原子化处理的。在多任务同时使用同一个errseq_t游标的情况下,对该游标 的更新进行序列化是很重要的。h]hX请注意,errseq_t API在check_and_advance_operation期间不保护errseq_t游标。只有典型 的错误代码是被原子化处理的。在多任务同时使用同一个errseq_t游标的情况下,对该游标 的更新进行序列化是很重要的。}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhjhhubh)}(hx如果不这样做,那么游标就有可能向后移动。在这种情况下,同一个错误可能被报告多次。h]hx如果不这样做,那么游标就有可能向后移动。在这种情况下,同一个错误可能被报告多次。}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjhhubh)}(h因此,通常先执行errseq_check检查是否有任何变化,然后在获取锁后才执行 errseq_check_and_advance。例如::h]h因此,通常先执行errseq_check检查是否有任何变化,然后在获取锁后才执行 errseq_check_and_advance。例如:}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hif (errseq_check(&wd.wd_err, READ_ONCE(su.s_wd_err)) { /* su.s_wd_err被s_wd_err_lock保护 */ spin_lock(&su.s_wd_err_lock); err = errseq_check_and_advance(&wd.wd_err, &su.s_wd_err); spin_unlock(&su.s_wd_err_lock); }h]hif (errseq_check(&wd.wd_err, READ_ONCE(su.s_wd_err)) { /* su.s_wd_err被s_wd_err_lock保护 */ spin_lock(&su.s_wd_err_lock); err = errseq_check_and_advance(&wd.wd_err, &su.s_wd_err); spin_unlock(&su.s_wd_err_lock); }}hjVsbah}(h]h ]h"]h$]h&]hhuh1j hhhKhjhhubh)}(hW这就避免了自上次检查以来没有任何变化的常见情况下的自旋锁。h]hW这就避免了自上次检查以来没有任何变化的常见情况下的自旋锁。}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id1ah ]h"]序列化更新errseq_t游标ah$]h&]uh1jhjhhhhhKxubj)}(hhh](j)}(h函数h]h函数}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzhhhhhKubh)}(h该API在以下内核代码中:h]h该API在以下内核代码中:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjzhhubh)}(h lib/errseq.ch]h lib/errseq.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjzhhubeh}(h]id2ah ]h"]函数ah$]h&]uh1jhjhhhhhKubeh}(h]errseq-tah ]h"]errseq_t数据类型ah$]h&]uh1jhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjjjwjtjju nametypes}(jjjwjuh}(jjjjjtjjjzu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages] transformerN include_log]4Documentation/translations/zh_CN/core-api/errseq.rst(NNNNta decorationNhhub.