€•zÃŒ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/core-api/errseq”Œ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/core-api/errseq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/it_IT/core-api/errseq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ja_JP/core-api/errseq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ko_KR/core-api/errseq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/pt_BR/core-api/errseq”Œ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/core-api/errseq”Œ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ŒThe errseq_t datatype”h]”hŒThe errseq_t datatype”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ=/var/lib/git/docbuild/linux/Documentation/core-api/errseq.rst”h´KubhŒ paragraph”“”)�”}”(hŒ«An errseq_t is a way of recording errors in one place, and allowing any number of "subscribers" to tell whether it has changed since a previous point where it was sampled.”h]”hŒ¯An errseq_t is a way of recording errors in one place, and allowing any number of “subscribersâ€� to tell whether it has changed since a previous point where it was sampled.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ«The initial use case for this is tracking errors for file synchronization syscalls (fsync, fdatasync, msync and sync_file_range), but it may be usable in other situations.”h]”hŒ«The initial use case for this is tracking errors for file synchronization syscalls (fsync, fdatasync, msync and sync_file_range), but it may be usable in other situations.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hXIt's implemented as an unsigned 32-bit value. The low order bits are designated to hold an error code (between 1 and MAX_ERRNO). The upper bits are used as a counter. This is done with atomics instead of locking so that these functions can be called from any context.”h]”hXIt’s implemented as an unsigned 32-bit value. The low order bits are designated to hold an error code (between 1 and MAX_ERRNO). The upper bits are used as a counter. This is done with atomics instead of locking so that these functions can be called from any context.”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hŒƒNote that there is a risk of collisions if new errors are being recorded frequently, since we have so few bits to use as a counter.”h]”hŒƒNote that there is a risk of collisions if new errors are being recorded frequently, since we have so few bits to use as a counter.”…”�”}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hX To mitigate this, the bit between the error value and counter is used as a flag to tell whether the value has been sampled since a new value was recorded. That allows us to avoid bumping the counter if no one has sampled it since the last time an error was recorded.”h]”hX To mitigate this, the bit between the error value and counter is used as a flag to tell whether the value has been sampled since a new value was recorded. That allows us to avoid bumping the counter if no one has sampled it since the last time an error was recorded.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ;Thus we end up with a value that looks something like this:”h]”hŒ;Thus we end up with a value that looks something like this:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K&uh1j+hj(ubj,)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j+hj(ubj,)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j+hj(ubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÌ)�”}”(hŒ31..13”h]”hŒ31..13”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjRubjV)�”}”(hhh]”hÌ)�”}”(hŒ12”h]”hŒ12”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjRubjV)�”}”(hhh]”hÌ)�”}”(hŒ11..0”h]”hŒ11..0”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjMubjQ)�”}”(hhh]”(jV)�”}”(hhh]”hÌ)�”}”(hŒcounter”h]”hŒcounter”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj¢ubjV)�”}”(hhh]”hÌ)�”}”(hŒSF”h]”hŒSF”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj¢ubjV)�”}”(hhh]”hÌ)�”}”(hŒerrno”h]”hŒerrno”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKhj(ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j&hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!hh·h²hh³hÊh´NubhÌ)�”}”(hX¥The general idea is for "watchers" to sample an errseq_t value and keep it as a running cursor. That value can later be used to tell whether any new errors have occurred since that sampling was done, and atomically record the state at the time that it was checked. This allows us to record errors in one place, and then have a number of "watchers" that can tell whether the value has changed since they last checked it.”h]”hX­The general idea is for “watchersâ€� to sample an errseq_t value and keep it as a running cursor. That value can later be used to tell whether any new errors have occurred since that sampling was done, and atomically record the state at the time that it was checked. This allows us to record errors in one place, and then have a number of “watchersâ€� that can tell whether the value has changed since they last checked it.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K"hh·h²hubhÌ)�”}”(hXA new errseq_t should always be zeroed out. An errseq_t value of all zeroes is the special (but common) case where there has never been an error. An all zero value thus serves as the "epoch" if one wishes to know whether there has ever been an error set since it was first initialized.”h]”hX"A new errseq_t should always be zeroed out. An errseq_t value of all zeroes is the special (but common) case where there has never been an error. An all zero value thus serves as the “epochâ€� if one wishes to know whether there has ever been an error set since it was first initialized.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K)hh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ API usage”h]”hŒ API usage”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K/ubhÌ)�”}”(hXLet me tell you a story about a worker drone. Now, he's a good worker overall, but the company is a little...management heavy. He has to report to 77 supervisors today, and tomorrow the "big boss" is coming in from out of town and he's sure to test the poor fellow too.”h]”hXLet me tell you a story about a worker drone. Now, he’s a good worker overall, but the company is a little...management heavy. He has to report to 77 supervisors today, and tomorrow the “big bossâ€� is coming in from out of town and he’s sure to test the poor fellow too.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hjh²hubhÌ)�”}”(hXThey're all handing him work to do -- so much he can't keep track of who handed him what, but that's not really a big problem. The supervisors just want to know when he's finished all of the work they've handed him so far and whether he made any mistakes since they last asked.”h]”hX They’re all handing him work to do -- so much he can’t keep track of who handed him what, but that’s not really a big problem. The supervisors just want to know when he’s finished all of the work they’ve handed him so far and whether he made any mistakes since they last asked.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hjh²hubhÌ)�”}”(hŒ½He might have made the mistake on work they didn't actually hand him, but he can't keep track of things at that level of detail, all he can remember is the most recent mistake that he made.”h]”hŒÁHe might have made the mistake on work they didn’t actually hand him, but he can’t keep track of things at that level of detail, all he can remember is the most recent mistake that he made.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K;hjh²hubhÌ)�”}”(hŒ(Here's our worker_drone representation::”h]”hŒ)Here’s our worker_drone representation:”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K?hjh²hubhŒ literal_block”“”)�”}”(hŒSstruct worker_drone { errseq_t wd_err; /* for recording errors */ };”h]”hŒSstruct worker_drone { errseq_t wd_err; /* for recording errors */ };”…”�”}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jhh³hÊh´KAhjh²hubhÌ)�”}”(hŒ;Every day, the worker_drone starts out with a blank slate::”h]”hŒ:Every day, the worker_drone starts out with a blank slate:”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KEhjh²hubji)�”}”(hŒ1struct worker_drone wd; wd.wd_err = (errseq_t)0;”h]”hŒ1struct worker_drone wd; wd.wd_err = (errseq_t)0;”…”�”}”hjˆsbah}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jhh³hÊh´KGhjh²hubhÌ)�”}”(hŒ†The supervisors come in and get an initial read for the day. They don't care about anything that happened before their watch begins::”h]”hŒ‡The supervisors come in and get an initial read for the day. They don’t care about anything that happened before their watch begins:”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KKhjh²hubji)�”}”(hXstruct supervisor { errseq_t s_wd_err; /* private "cursor" for wd_err */ spinlock_t s_wd_err_lock; /* protects s_wd_err */ } struct supervisor su; su.s_wd_err = errseq_sample(&wd.wd_err); spin_lock_init(&su.s_wd_err_lock);”h]”hXstruct supervisor { errseq_t s_wd_err; /* private "cursor" for wd_err */ spinlock_t s_wd_err_lock; /* protects s_wd_err */ } struct supervisor su; su.s_wd_err = errseq_sample(&wd.wd_err); spin_lock_init(&su.s_wd_err_lock);”…”�”}”hj¤sbah}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jhh³hÊh´KNhjh²hubhÌ)�”}”(hŒ¾Now they start handing him tasks to do. Every few minutes they ask him to finish up all of the work they've handed him so far. Then they ask him whether he made any mistakes on any of it::”h]”hŒ¿Now they start handing him tasks to do. Every few minutes they ask him to finish up all of the work they’ve handed him so far. Then they ask him whether he made any mistakes on any of it:”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KXhjh²hubji)�”}”(hŒyspin_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]”hŒyspin_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);”…”�”}”hjÀsbah}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jhh³hÊh´K\hjh²hubhÌ)�”}”(hŒ.Up to this point, that just keeps returning 0.”h]”hŒ.Up to this point, that just keeps returning 0.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K`hjh²hubhÌ)�”}”(hŒÑNow, the owners of this company are quite miserly and have given him substandard equipment with which to do his job. Occasionally it glitches and he makes a mistake. He sighs a heavy sigh, and marks it down::”h]”hŒÐNow, the owners of this company are quite miserly and have given him substandard equipment with which to do his job. Occasionally it glitches and he makes a mistake. He sighs a heavy sigh, and marks it down:”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kbhjh²hubji)�”}”(hŒerrseq_set(&wd.wd_err, -EIO);”h]”hŒerrseq_set(&wd.wd_err, -EIO);”…”�”}”hjêsbah}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jhh³hÊh´Kghjh²hubhÌ)�”}”(hŒì...and then gets back to work. The supervisors eventually poll again and they each get the error when they next check. Subsequent calls will return 0, until another error is recorded, at which point it's reported to each of them once.”h]”hŒî...and then gets back to work. The supervisors eventually poll again and they each get the error when they next check. Subsequent calls will return 0, until another error is recorded, at which point it’s reported to each of them once.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kihjh²hubhÌ)�”}”(hŒ‘Note that the supervisors can't tell how many mistakes he made, only whether one was made since they last checked, and the latest value recorded.”h]”hŒ“Note that the supervisors can’t tell how many mistakes he made, only whether one was made since they last checked, and the latest value recorded.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Knhjh²hubhÌ)�”}”(hŒúOccasionally the big boss comes in for a spot check and asks the worker to do a one-off job for him. He's not really watching the worker full-time like the supervisors, but he does need to know whether a mistake occurred while his job was processing.”h]”hŒüOccasionally the big boss comes in for a spot check and asks the worker to do a one-off job for him. He’s not really watching the worker full-time like the supervisors, but he does need to know whether a mistake occurred while his job was processing.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Krhjh²hubhÌ)�”}”(hŒvHe can just sample the current errseq_t in the worker, and then use that to tell whether an error has occurred later::”h]”hŒuHe can just sample the current errseq_t in the worker, and then use that to tell whether an error has occurred later:”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kwhjh²hubji)�”}”(hŒ…errseq_t since = errseq_sample(&wd.wd_err); /* submit some work and wait for it to complete */ err = errseq_check(&wd.wd_err, since);”h]”hŒ…errseq_t since = errseq_sample(&wd.wd_err); /* submit some work and wait for it to complete */ err = errseq_check(&wd.wd_err, since);”…”�”}”hj0sbah}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jhh³hÊh´Kzhjh²hubhÌ)�”}”(hŒ¥Since he's just going to discard "since" after that point, he doesn't need to advance it here. He also doesn't need any locking since it's not usable by anyone else.”h]”hŒ±Since he’s just going to discard “sinceâ€� after that point, he doesn’t need to advance it here. He also doesn’t need any locking since it’s not usable by anyone else.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K~hjh²hubeh}”(h]”Œ api-usage”ah ]”h"]”Œ api usage”ah$]”h&]”uh1hµhh·h²hh³hÊh´K/ubh¶)�”}”(hhh]”(h»)�”}”(hŒ#Serializing errseq_t cursor updates”h]”hŒ#Serializing errseq_t cursor updates”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjTh²hh³hÊh´KƒubhÌ)�”}”(hX1Note that the errseq_t API does not protect the errseq_t cursor during a check_and_advance_operation. Only the canonical error code is handled atomically. In a situation where more than one task might be using the same errseq_t cursor at the same time, it's important to serialize updates to that cursor.”h]”hX3Note that the errseq_t API does not protect the errseq_t cursor during a check_and_advance_operation. Only the canonical error code is handled atomically. In a situation where more than one task might be using the same errseq_t cursor at the same time, it’s important to serialize updates to that cursor.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K…hjTh²hubhÌ)�”}”(hŒƒIf that's not done, then it's possible for the cursor to go backward in which case the same error could be reported more than once.”h]”hŒ‡If that’s not done, then it’s possible for the cursor to go backward in which case the same error could be reported more than once.”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‹hjTh²hubhÌ)�”}”(hŒ°Because of this, it's often advantageous to first do an errseq_check to see if anything has changed, and only later do an errseq_check_and_advance after taking the lock. e.g.::”h]”hŒ±Because of this, it’s often advantageous to first do an errseq_check to see if anything has changed, and only later do an errseq_check_and_advance after taking the lock. e.g.:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŽhjTh²hubji)�”}”(hXif (errseq_check(&wd.wd_err, READ_ONCE(su.s_wd_err))) { /* su.s_wd_err is protected by 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]”hXif (errseq_check(&wd.wd_err, READ_ONCE(su.s_wd_err))) { /* su.s_wd_err is protected by 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); }”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jhh³hÊh´K’hjTh²hubhÌ)�”}”(hŒiThat avoids the spinlock in the common case where nothing has changed since the last time it was checked.”h]”hŒiThat avoids the spinlock in the common case where nothing has changed since the last time it was checked.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K™hjTh²hubeh}”(h]”Œ#serializing-errseq-t-cursor-updates”ah ]”h"]”Œ#serializing errseq_t cursor updates”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kƒubh¶)�”}”(hhh]”(h»)�”}”(hŒ Functions”h]”hŒ Functions”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj³h²hh³hÊh´K�ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œerrseq_set (C function)”Œ c.errseq_set”hNt”auh1jÄhj³h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ-errseq_t errseq_set (errseq_t *eseq, int err)”h]”hŒdesc_signature_line”“”)�”}”(hŒ,errseq_t errseq_set(errseq_t *eseq, int err)”h]”(h)�”}”(hhh]”hŒ desc_sig_name”“”)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jéhjæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jíŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jŒ ASTIdentifier”“”)�”}”jŒ errseq_set”sbŒ c.errseq_set”†”asbuh1hhjâh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K1ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhjâh²hh³jh´K1ubhŒ desc_name”“”)�”}”(hŒ errseq_set”h]”jê)�”}”(hjh]”hŒ errseq_set”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhj*ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”jxjyuh1j(hjâh²hh³jh´K1ubhŒdesc_parameterlist”“”)�”}”(hŒ(errseq_t *eseq, int err)”h]”(hŒdesc_parameter”“”)�”}”(hŒerrseq_t *eseq”h]”(h)�”}”(hhh]”jê)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jŒ reftarget”jTŒmodname”NŒ classname”Njj )�”}”j ]”jŒ c.errseq_set”†”asbuh1hhjKubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhjKubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j~hjKubjê)�”}”(hŒeseq”h]”hŒeseq”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjxjyuh1jIhjEubjJ)�”}”(hŒint err”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j¨hj¤ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhj¤ubjê)�”}”(hŒerr”h]”hŒerr”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhj¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjxjyuh1jIhjEubeh}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jChjâh²hh³jh´K1ubeh}”(h]”h ]”h"]”h$]”h&]”jxjyŒ add_permalink”ˆuh1jàŒsphinx_line_type”Œ declarator”hjÜh²hh³jh´K1ubah}”(h]”jÓah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jÚh³jh´K1hj×h²hubhŒ desc_content”“”)�”}”(hhh]”hÌ)�”}”(hŒ"set a errseq_t for later reporting”h]”hŒ"set a errseq_t for later reporting”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K1hjøh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj×h²hh³jh´K1ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”Œdomain”jŒobjtype”jŒdesctype”jŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jÕh²hhj³h³Nh´NubhŒ container”“”)�”}”(hX**Parameters** ``errseq_t *eseq`` errseq_t field that should be set ``int err`` error to set (must be between -1 and -MAX_ERRNO) **Description** This function sets the error in **eseq**, and increments the sequence counter if the last sequence was sampled at some point in the past. Any error set will always overwrite an existing error. **Return** The previous value, primarily for debugging purposes. The return value should not be used as a previously sampled value in later calls as it will not have the SEEN flag set.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hj%h]”hŒ Parameters”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K5hjubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ5``errseq_t *eseq`` errseq_t field that should be set ”h]”(hŒterm”“”)�”}”(hŒ``errseq_t *eseq``”h]”hŒliteral”“”)�”}”(hjLh]”hŒerrseq_t *eseq”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K2hjDubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒ!errseq_t field that should be set”h]”hŒ!errseq_t field that should be set”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jch´K2hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jBh³jch´K2hj?ubjC)�”}”(hŒ=``int err`` error to set (must be between -1 and -MAX_ERRNO) ”h]”(jI)�”}”(hŒ ``int err``”h]”jO)�”}”(hj‰h]”hŒint err”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K3hjƒubje)�”}”(hhh]”hÌ)�”}”(hŒ0error to set (must be between -1 and -MAX_ERRNO)”h]”hŒ0error to set (must be between -1 and -MAX_ERRNO)”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jžh´K3hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jBh³jžh´K3hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubhÌ)�”}”(hŒ**Description**”h]”j()�”}”(hjÄh]”hŒ Description”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K5hjubhÌ)�”}”(hŒ‰This function sets the error in **eseq**, and increments the sequence counter if the last sequence was sampled at some point in the past.”h]”(hŒ This function sets the error in ”…”�”}”(hjÚh²hh³Nh´Nubj()�”}”(hŒ**eseq**”h]”hŒeseq”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjÚubhŒa, and increments the sequence counter if the last sequence was sampled at some point in the past.”…”�”}”(hjÚh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K4hjubhÌ)�”}”(hŒ6Any error set will always overwrite an existing error.”h]”hŒ6Any error set will always overwrite an existing error.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K7hjubhÌ)�”}”(hŒ **Return**”h]”j()�”}”(hj h]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K9hjubhÌ)�”}”(hŒ­The previous value, primarily for debugging purposes. The return value should not be used as a previously sampled value in later calls as it will not have the SEEN flag set.”h]”hŒ­The previous value, primarily for debugging purposes. The return value should not be used as a previously sampled value in later calls as it will not have the SEEN flag set.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K:hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj³h²hh³Nh´NubjÅ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÑŒerrseq_sample (C function)”Œc.errseq_sample”hNt”auh1jÄhj³h²hh³Nh´NubjÖ)�”}”(hhh]”(jÛ)�”}”(hŒ'errseq_t errseq_sample (errseq_t *eseq)”h]”já)�”}”(hŒ&errseq_t errseq_sample(errseq_t *eseq)”h]”(h)�”}”(hhh]”jê)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jŒ reftarget”jVŒmodname”NŒ classname”Njj )�”}”j ]”j)�”}”jŒ errseq_sample”sbŒc.errseq_sample”†”asbuh1hhjMh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kqubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhjMh²hh³juh´Kqubj))�”}”(hŒ errseq_sample”h]”jê)�”}”(hjrh]”hŒ errseq_sample”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhj„ubah}”(h]”h ]”(j>j?eh"]”h$]”h&]”jxjyuh1j(hjMh²hh³juh´KqubjD)�”}”(hŒ(errseq_t *eseq)”h]”jJ)�”}”(hŒerrseq_t *eseq”h]”(h)�”}”(hhh]”jê)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhj£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jŒ reftarget”j¨Œmodname”NŒ classname”Njj )�”}”j ]”jpŒc.errseq_sample”†”asbuh1hhjŸubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhjŸubj)�”}”(hj‚h]”hŒ*”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j‹ah"]”h$]”h&]”uh1j~hjŸubjê)�”}”(hŒeseq”h]”hŒeseq”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjxjyuh1jIhj›ubah}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jChjMh²hh³juh´Kqubeh}”(h]”h ]”h"]”h$]”h&]”jxjyjèˆuh1jàjéjêhjIh²hh³juh´Kqubah}”(h]”jDah ]”(jîjïeh"]”h$]”h&]”jóˆjô)jõhuh1jÚh³juh´KqhjFh²hubj÷)�”}”(hhh]”hÌ)�”}”(hŒGrab current errseq_t value.”h]”hŒGrab current errseq_t value.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kqhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjFh²hh³juh´Kqubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj!jj!j‰j‰j‰uh1jÕh²hhj³h³Nh´Nubj)�”}”(hX›**Parameters** ``errseq_t *eseq`` Pointer to errseq_t to be sampled. **Description** This function allows callers to initialise their errseq_t variable. If the error has been "seen", new callers will not see an old error. If there is an unseen error in **eseq**, the caller of this function will see it the next time it checks for an error. **Context** Any context. **Return** The current errseq value.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j()�”}”(hj+h]”hŒ Parameters”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kuhj%ubj>)�”}”(hhh]”jC)�”}”(hŒ6``errseq_t *eseq`` Pointer to errseq_t to be sampled. ”h]”(jI)�”}”(hŒ``errseq_t *eseq``”h]”jO)�”}”(hjJh]”hŒerrseq_t *eseq”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´KrhjDubje)�”}”(hhh]”hÌ)�”}”(hŒ"Pointer to errseq_t to be sampled.”h]”hŒ"Pointer to errseq_t to be sampled.”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j_h´Krhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jBh³j_h´KrhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj%ubhÌ)�”}”(hŒ**Description**”h]”j()�”}”(hj…h]”hŒ Description”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kthj%ubhÌ)�”}”(hŒÿThis function allows callers to initialise their errseq_t variable. If the error has been "seen", new callers will not see an old error. If there is an unseen error in **eseq**, the caller of this function will see it the next time it checks for an error.”h]”(hŒ¬This function allows callers to initialise their errseq_t variable. If the error has been “seenâ€�, new callers will not see an old error. If there is an unseen error in ”…”�”}”(hj›h²hh³Nh´Nubj()�”}”(hŒ**eseq**”h]”hŒeseq”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj›ubhŒO, the caller of this function will see it the next time it checks for an error.”…”�”}”(hj›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kshj%ubhÌ)�”}”(hŒ **Context**”h]”j()�”}”(hj¾h]”hŒContext”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kxhj%ubhÌ)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kyhj%ubhÌ)�”}”(hŒ **Return**”h]”j()�”}”(hjåh]”hŒReturn”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K{hj%ubhÌ)�”}”(hŒThe current errseq value.”h]”hŒThe current errseq value.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kzhj%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj³h²hh³Nh´NubjÅ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÑŒerrseq_check (C function)”Œc.errseq_check”hNt”auh1jÄhj³h²hh³Nh´NubjÖ)�”}”(hhh]”(jÛ)�”}”(hŒ1int errseq_check (errseq_t *eseq, errseq_t since)”h]”já)�”}”(hŒ0int errseq_check(errseq_t *eseq, errseq_t since)”h]”(j©)�”}”(hŒint”h]”hŒint”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j¨hj&h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kˆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhj&h²hh³j8h´Kˆubj))�”}”(hŒ errseq_check”h]”jê)�”}”(hŒ errseq_check”h]”hŒ errseq_check”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjGubah}”(h]”h ]”(j>j?eh"]”h$]”h&]”jxjyuh1j(hj&h²hh³j8h´KˆubjD)�”}”(hŒ (errseq_t *eseq, errseq_t since)”h]”(jJ)�”}”(hŒerrseq_t *eseq”h]”(h)�”}”(hhh]”jê)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jŒ reftarget”jlŒmodname”NŒ classname”Njj )�”}”j ]”j)�”}”jjMsbŒc.errseq_check”†”asbuh1hhjcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhjcubj)�”}”(hj‚h]”hŒ*”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j‹ah"]”h$]”h&]”uh1j~hjcubjê)�”}”(hŒeseq”h]”hŒeseq”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjxjyuh1jIhj_ubjJ)�”}”(hŒerrseq_t since”h]”(h)�”}”(hhh]”jê)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhj¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jŒ reftarget”jÃŒmodname”NŒ classname”Njj )�”}”j ]”j†Œc.errseq_check”†”asbuh1hhjºubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhjºubjê)�”}”(hŒsince”h]”hŒsince”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjxjyuh1jIhj_ubeh}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jChj&h²hh³j8h´Kˆubeh}”(h]”h ]”h"]”h$]”h&]”jxjyjèˆuh1jàjéjêhj"h²hh³j8h´Kˆubah}”(h]”jah ]”(jîjïeh"]”h$]”h&]”jóˆjô)jõhuh1jÚh³j8h´Kˆhjh²hubj÷)�”}”(hhh]”hÌ)�”}”(hŒ6Has an error occurred since a particular sample point?”h]”hŒ6Has an error occurred since a particular sample point?”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kˆhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjh²hh³j8h´Kˆubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj/ jj/ j‰j‰j‰uh1jÕh²hhj³h³Nh´Nubj)�”}”(hX¬**Parameters** ``errseq_t *eseq`` Pointer to errseq_t value to be checked. ``errseq_t since`` Previously-sampled errseq_t from which to check. **Description** Grab the value that eseq points to, and see if it has changed **since** the given value was sampled. The **since** value is not advanced, so there is no need to mark the value as seen. **Return** The latest error set in the errseq_t or 0 if it hasn't changed.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j()�”}”(hj9 h]”hŒ Parameters”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj7 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´KŒhj3 ubj>)�”}”(hhh]”(jC)�”}”(hŒ<``errseq_t *eseq`` Pointer to errseq_t value to be checked. ”h]”(jI)�”}”(hŒ``errseq_t *eseq``”h]”jO)�”}”(hjX h]”hŒerrseq_t *eseq”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K‰hjR ubje)�”}”(hhh]”hÌ)�”}”(hŒ(Pointer to errseq_t value to be checked.”h]”hŒ(Pointer to errseq_t value to be checked.”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jm h´K‰hjn ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhjR ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jBh³jm h´K‰hjO ubjC)�”}”(hŒD``errseq_t since`` Previously-sampled errseq_t from which to check. ”h]”(jI)�”}”(hŒ``errseq_t since``”h]”jO)�”}”(hj‘ h]”hŒerrseq_t since”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´KŠhj‹ ubje)�”}”(hhh]”hÌ)�”}”(hŒ0Previously-sampled errseq_t from which to check.”h]”hŒ0Previously-sampled errseq_t from which to check.”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¦ h´KŠhj§ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhj‹ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jBh³j¦ h´KŠhjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hj3 ubhÌ)�”}”(hŒ**Description**”h]”j()�”}”(hjÌ h]”hŒ Description”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´KŒhj3 ubhÌ)�”}”(hŒ¸Grab the value that eseq points to, and see if it has changed **since** the given value was sampled. The **since** value is not advanced, so there is no need to mark the value as seen.”h]”(hŒ>Grab the value that eseq points to, and see if it has changed ”…”�”}”(hjâ h²hh³Nh´Nubj()�”}”(hŒ **since**”h]”hŒsince”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjâ ubhŒ" the given value was sampled. The ”…”�”}”(hjâ h²hh³Nh´Nubj()�”}”(hŒ **since**”h]”hŒsince”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjâ ubhŒF value is not advanced, so there is no need to mark the value as seen.”…”�”}”(hjâ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K‹hj3 ubhÌ)�”}”(hŒ **Return**”h]”j()�”}”(hj h]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K�hj3 ubhÌ)�”}”(hŒ?The latest error set in the errseq_t or 0 if it hasn't changed.”h]”hŒAThe latest error set in the errseq_t or 0 if it hasn’t changed.”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K�hj3 ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj³h²hh³Nh´NubjÅ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÑŒ%errseq_check_and_advance (C function)”Œc.errseq_check_and_advance”hNt”auh1jÄhj³h²hh³Nh´NubjÖ)�”}”(hhh]”(jÛ)�”}”(hŒ>int errseq_check_and_advance (errseq_t *eseq, errseq_t *since)”h]”já)�”}”(hŒ=int errseq_check_and_advance(errseq_t *eseq, errseq_t *since)”h]”(j©)�”}”(hŒint”h]”hŒint”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j¨hjX h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhjX h²hh³jj h´K�ubj))�”}”(hŒerrseq_check_and_advance”h]”jê)�”}”(hŒerrseq_check_and_advance”h]”hŒerrseq_check_and_advance”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjy ubah}”(h]”h ]”(j>j?eh"]”h$]”h&]”jxjyuh1j(hjX h²hh³jj h´K�ubjD)�”}”(hŒ!(errseq_t *eseq, errseq_t *since)”h]”(jJ)�”}”(hŒerrseq_t *eseq”h]”(h)�”}”(hhh]”jê)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhj™ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jŒ reftarget”jž Œmodname”NŒ classname”Njj )�”}”j ]”j)�”}”jj sbŒc.errseq_check_and_advance”†”asbuh1hhj• ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhj• ubj)�”}”(hj‚h]”hŒ*”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”j‹ah"]”h$]”h&]”uh1j~hj• ubjê)�”}”(hŒeseq”h]”hŒeseq”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhj• ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjxjyuh1jIhj‘ ubjJ)�”}”(hŒerrseq_t *since”h]”(h)�”}”(hhh]”jê)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjð ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jŒ reftarget”jõ Œmodname”NŒ classname”Njj )�”}”j ]”j¸ Œc.errseq_check_and_advance”†”asbuh1hhjì ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j$ah"]”h$]”h&]”uh1jhjì ubj)�”}”(hj‚h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j‹ah"]”h$]”h&]”uh1j~hjì ubjê)�”}”(hŒsince”h]”hŒsince”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”jöah"]”h$]”h&]”uh1jéhjì ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjxjyuh1jIhj‘ ubeh}”(h]”h ]”h"]”h$]”h&]”jxjyuh1jChjX h²hh³jj h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”jxjyjèˆuh1jàjéjêhjT h²hh³jj h´K�ubah}”(h]”jO ah ]”(jîjïeh"]”h$]”h&]”jóˆjô)jõhuh1jÚh³jj h´K�hjQ h²hubj÷)�”}”(hhh]”hÌ)�”}”(hŒ/Check an errseq_t and advance to current value.”h]”hŒ/Check an errseq_t and advance to current value.”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K�hjS h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjQ h²hh³jj h´K�ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjn jjn j‰j‰j‰uh1jÕh²hhj³h³Nh´Nubj)�”}”(hXH**Parameters** ``errseq_t *eseq`` Pointer to value being checked and reported. ``errseq_t *since`` Pointer to previously-sampled errseq_t to check against and advance. **Description** Grab the eseq value, and see whether it matches the value that **since** points to. If it does, then just return 0. If it doesn't, then the value has changed. Set the "seen" flag, and try to swap it into place as the new eseq value. Then, set that value as the new "since" value, and return whatever the error portion is set to. Note that no locking is provided here for concurrent updates to the "since" value. The caller must provide that if necessary. Because of this, callers may want to do a lockless errseq_check before taking the lock and calling this. **Return** Negative errno if one has been stored, or 0 if no new error has occurred.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j()�”}”(hjx h]”hŒ Parameters”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K¡hjr ubj>)�”}”(hhh]”(jC)�”}”(hŒ@``errseq_t *eseq`` Pointer to value being checked and reported. ”h]”(jI)�”}”(hŒ``errseq_t *eseq``”h]”jO)�”}”(hj— h]”hŒerrseq_t *eseq”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´Kžhj‘ ubje)�”}”(hhh]”hÌ)�”}”(hŒ,Pointer to value being checked and reported.”h]”hŒ,Pointer to value being checked and reported.”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¬ h´Kžhj­ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhj‘ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jBh³j¬ h´KžhjŽ ubjC)�”}”(hŒY``errseq_t *since`` Pointer to previously-sampled errseq_t to check against and advance. ”h]”(jI)�”}”(hŒ``errseq_t *since``”h]”jO)�”}”(hjÐ h]”hŒerrseq_t *since”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´KŸhjÊ ubje)�”}”(hhh]”hÌ)�”}”(hŒDPointer to previously-sampled errseq_t to check against and advance.”h]”hŒDPointer to previously-sampled errseq_t to check against and advance.”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jå h´KŸhjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhjÊ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jBh³jå h´KŸhjŽ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hjr ubhÌ)�”}”(hŒ**Description**”h]”j()�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K¡hjr ubhÌ)�”}”(hŒsGrab the eseq value, and see whether it matches the value that **since** points to. If it does, then just return 0.”h]”(hŒ?Grab the eseq value, and see whether it matches the value that ”…”�”}”(hj! h²hh³Nh´Nubj()�”}”(hŒ **since**”h]”hŒsince”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj! ubhŒ+ points to. If it does, then just return 0.”…”�”}”(hj! h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K hjr ubhÌ)�”}”(hŒÔIf it doesn't, then the value has changed. Set the "seen" flag, and try to swap it into place as the new eseq value. Then, set that value as the new "since" value, and return whatever the error portion is set to.”h]”hŒÞIf it doesn’t, then the value has changed. Set the “seenâ€� flag, and try to swap it into place as the new eseq value. Then, set that value as the new “sinceâ€� value, and return whatever the error portion is set to.”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K£hjr ubhÌ)�”}”(hŒæNote that no locking is provided here for concurrent updates to the "since" value. The caller must provide that if necessary. Because of this, callers may want to do a lockless errseq_check before taking the lock and calling this.”h]”hŒêNote that no locking is provided here for concurrent updates to the “sinceâ€� value. The caller must provide that if necessary. Because of this, callers may want to do a lockless errseq_check before taking the lock and calling this.”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K§hjr ubhÌ)�”}”(hŒ **Return**”h]”j()�”}”(hjb h]”hŒReturn”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj` ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K¬hjr ubhÌ)�”}”(hŒINegative errno if one has been stored, or 0 if no new error has occurred.”h]”hŒINegative errno if one has been stored, or 0 if no new error has occurred.”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/errseq:159: ./lib/errseq.c”h´K­hjr ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj³h²hh³Nh´Nubeh}”(h]”Œ functions”ah ]”h"]”Œ functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´K�ubeh}”(h]”Œthe-errseq-t-datatype”ah ]”h"]”Œthe errseq_t datatype”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”jUŒ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› j˜ jQjNj°j­j“ j� uŒ nametypes”}”(j› ‰jQ‰j°‰j“ ‰uh}”(j˜ h·jNjj­jTj� j³jÓjÜjDjIjj"jO jT uŒ 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.