€•Œ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/filesystems/buffer”Œ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/filesystems/buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/it_IT/filesystems/buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ja_JP/filesystems/buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ko_KR/filesystems/buffer”Œ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/filesystems/buffer”Œ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/filesystems/buffer”Œ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Œ Buffer Heads”h]”hŒ Buffer Heads”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ@/var/lib/git/docbuild/linux/Documentation/filesystems/buffer.rst”h´KubhŒ paragraph”“”)�”}”(hŒ—Linux uses buffer heads to maintain state about individual filesystem blocks. Buffer heads are deprecated and new filesystems should use iomap instead.”h]”hŒ—Linux uses buffer heads to maintain state about individual filesystem blocks. Buffer heads are deprecated and new filesystems should use iomap instead.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Functions”h]”hŒ Functions”…”�”}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhÛh²hh³hÊh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œbrelse (C function)”Œc.brelse”hNt”auh1hìhhÛh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ$void brelse (struct buffer_head *bh)”h]”hŒdesc_signature_line”“”)�”}”(hŒ#void brelse(struct buffer_head *bh)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jhj h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M0ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j hj h²hh³jh´M0ubhŒ desc_name”“”)�”}”(hŒbrelse”h]”hŒ desc_sig_name”“”)�”}”(hŒbrelse”h]”hŒbrelse”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j7hj3ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j1hj h²hh³jh´M0ubhŒdesc_parameterlist”“”)�”}”(hŒ(struct buffer_head *bh)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct buffer_head *bh”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j^hjZubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjZubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj}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—j;sbŒc.brelse”†”asbuh1hhjZubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjZubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j·hjZubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjTubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj h²hh³jh´M0ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQŒ add_permalink”ˆuh1jŒsphinx_line_type”Œ declarator”hjh²hh³jh´M0ubah}”(h]”hûah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jh³jh´M0hhÿh²hubhŒ desc_content”“”)�”}”(hhh]”hÌ)�”}”(hŒRelease a buffer.”h]”hŒRelease a buffer.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M0hjùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hhÿh²hh³jh´M0ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”Œdomain”j•Œobjtype”jŒdesctype”jŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1hýh²hhhÛh³Nh´NubhŒ container”“”)�”}”(hX%**Parameters** ``struct buffer_head *bh`` The buffer to release. **Description** Decrement a buffer_head's reference count. If **bh** is NULL, this function is a no-op. If all buffers on a folio have zero reference count, are clean and unlocked, and if the folio is unlocked and not under writeback then try_to_free_buffers() may strip the buffers from the folio in preparation for freeing it (sometimes, rarely, buffers are removed from a folio but it ends up not being freed, and buffers may later be reattached). **Context** Any context.”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³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M4hj ubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ2``struct buffer_head *bh`` The buffer to release. ”h]”(hŒterm”“”)�”}”(hŒ``struct buffer_head *bh``”h]”hŒliteral”“”)�”}”(hjMh]”hŒstruct buffer_head *bh”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M1hjEubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒThe buffer to release.”h]”hŒThe buffer to release.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jdh´M1hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jdh´M1hj@ubah}”(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³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M3hj ubhÌ)�”}”(hŒXDecrement a buffer_head's reference count. If **bh** is NULL, this function is a no-op.”h]”(hŒ1Decrement a buffer_head’s reference count. If ”…”�”}”(hj¢h²hh³Nh´Nubj))�”}”(hŒ**bh**”h]”hŒbh”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj¢ubhŒ# is NULL, this function is a no-op.”…”�”}”(hj¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M2hj ubhÌ)�”}”(hXZIf all buffers on a folio have zero reference count, are clean and unlocked, and if the folio is unlocked and not under writeback then try_to_free_buffers() may strip the buffers from the folio in preparation for freeing it (sometimes, rarely, buffers are removed from a folio but it ends up not being freed, and buffers may later be reattached).”h]”hXZIf all buffers on a folio have zero reference count, are clean and unlocked, and if the folio is unlocked and not under writeback then try_to_free_buffers() may strip the buffers from the folio in preparation for freeing it (sometimes, rarely, buffers are removed from a folio but it ends up not being freed, and buffers may later be reattached).”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M5hj 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³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M<hj ubhÌ)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M=hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒbforget (C function)”Œ c.bforget”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ%void bforget (struct buffer_head *bh)”h]”j )�”}”(hŒ$void bforget(struct buffer_head *bh)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MFubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjh²hh³j'h´MFubj2)�”}”(hŒbforget”h]”j8)�”}”(hŒbforget”h]”hŒbforget”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj6ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjh²hh³j'h´MFubjS)�”}”(hŒ(struct buffer_head *bh)”h]”jY)�”}”(hŒstruct buffer_head *bh”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hjRubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjRubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jvŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j<sbŒ c.bforget”†”asbuh1hhjRubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjRubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjRubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjNubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjh²hh³j'h´MFubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjh²hh³j'h´MFubah}”(h]”j ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j'h´MFhjh²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ#Discard any dirty data in a buffer.”h]”hŒ#Discard any dirty data in a buffer.”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MFhjÖh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjh²hh³j'h´MFubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjñjjñj‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hX.**Parameters** ``struct buffer_head *bh`` The buffer to forget. **Description** Call this function instead of brelse() if the data written to a buffer no longer needs to be written back. It will clear the buffer's dirty flag so writeback of this buffer will be skipped. **Context** Any context.”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³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MJhjõubj?)�”}”(hhh]”jD)�”}”(hŒ1``struct buffer_head *bh`` The buffer to forget. ”h]”(jJ)�”}”(hŒ``struct buffer_head *bh``”h]”jP)�”}”(hjh]”hŒstruct buffer_head *bh”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MGhjubjf)�”}”(hhh]”hÌ)�”}”(hŒThe buffer to forget.”h]”hŒThe buffer to forget.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j/h´MGhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j/h´MGhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjõubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hjUh]”hŒ Description”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MIhjõubhÌ)�”}”(hŒ¾Call this function instead of brelse() if the data written to a buffer no longer needs to be written back. It will clear the buffer's dirty flag so writeback of this buffer will be skipped.”h]”hŒÀCall this function instead of brelse() if the data written to a buffer no longer needs to be written back. It will clear the buffer’s dirty flag so writeback of this buffer will be skipped.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MHhjõubhÌ)�”}”(hŒ **Context**”h]”j))�”}”(hj|h]”hŒContext”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MLhjõubhÌ)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MMhjõubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ__bread (C function)”Œ c.__bread”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒWstruct buffer_head * __bread (struct block_device *bdev, sector_t block, unsigned size)”h]”j )�”}”(hŒUstruct buffer_head *__bread(struct block_device *bdev, sector_t block, unsigned size)”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj½h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MÕubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj½h²hh³jÎh´MÕubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jâŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—Œ__bread”sbŒ c.__bread”†”asbuh1hhj½h²hh³jÎh´MÕubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj½h²hh³jÎh´MÕubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj½h²hh³jÎh´MÕubj2)�”}”(hŒ__bread”h]”j8)�”}”(hjþh]”hŒ__bread”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hj½h²hh³jÎh´MÕubjS)�”}”(hŒ:(struct block_device *bdev, sector_t block, unsigned size)”h]”(jY)�”}”(hŒstruct block_device *bdev”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj7ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj7ubh)�”}”(hhh]”j8)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j[Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jüŒ c.__bread”†”asbuh1hhj7ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj7ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj7ubj8)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj3ubjY)�”}”(hŒsector_t block”h]”(h)�”}”(hhh]”j8)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j°Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jüŒ c.__bread”†”asbuh1hhj§ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj§ubj8)�”}”(hŒblock”h]”hŒblock”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj3ubjY)�”}”(hŒ unsigned size”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjïubj8)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj3ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj½h²hh³jÎh´MÕubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj¹h²hh³jÎh´MÕubah}”(h]”j´ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³jÎh´MÕhj¶h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ Read a block.”h]”hŒ Read a block.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MÕhj6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj¶h²hh³jÎh´MÕubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjQjjQj‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hX=**Parameters** ``struct block_device *bdev`` The block device to read from. ``sector_t block`` Block number in units of block size. ``unsigned size`` The block size of this device in bytes. **Description** Read a specified block, and return the buffer head that refers to it. The memory is allocated from the movable area so that it can be migrated. The returned buffer head has its refcount increased. The caller should call brelse() when it has finished with the buffer. **Context** May sleep waiting for I/O. **Return** NULL if the block was unreadable.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j))�”}”(hj[h]”hŒ Parameters”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MÙhjUubj?)�”}”(hhh]”(jD)�”}”(hŒ=``struct block_device *bdev`` The block device to read from. ”h]”(jJ)�”}”(hŒ``struct block_device *bdev``”h]”jP)�”}”(hjzh]”hŒstruct block_device *bdev”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MÖhjtubjf)�”}”(hhh]”hÌ)�”}”(hŒThe block device to read from.”h]”hŒThe block device to read from.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�h´MÖhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j�h´MÖhjqubjD)�”}”(hŒ8``sector_t block`` Block number in units of block size. ”h]”(jJ)�”}”(hŒ``sector_t block``”h]”jP)�”}”(hj³h]”hŒsector_t block”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´M×hj­ubjf)�”}”(hhh]”hÌ)�”}”(hŒ$Block number in units of block size.”h]”hŒ$Block number in units of block size.”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÈh´M×hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jÈh´M×hjqubjD)�”}”(hŒ:``unsigned size`` The block size of this device in bytes. ”h]”(jJ)�”}”(hŒ``unsigned size``”h]”jP)�”}”(hjìh]”hŒ unsigned size”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MØhjæubjf)�”}”(hhh]”hÌ)�”}”(hŒ'The block size of this device in bytes.”h]”hŒ'The block size of this device in bytes.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´MØhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jh´MØhjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j>hjUubhÌ)�”}”(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³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MÚhjUubhÌ)�”}”(hX Read a specified block, and return the buffer head that refers to it. The memory is allocated from the movable area so that it can be migrated. The returned buffer head has its refcount increased. The caller should call brelse() when it has finished with the buffer.”h]”hX Read a specified block, and return the buffer head that refers to it. The memory is allocated from the movable area so that it can be migrated. The returned buffer head has its refcount increased. The caller should call brelse() when it has finished with the buffer.”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MÙhjUubhÌ)�”}”(hŒ **Context**”h]”j))�”}”(hjNh]”hŒContext”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MÞhjUubhÌ)�”}”(hŒMay sleep waiting for I/O.”h]”hŒMay sleep waiting for I/O.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MßhjUubhÌ)�”}”(hŒ **Return**”h]”j))�”}”(hjuh]”hŒReturn”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MáhjUubhÌ)�”}”(hŒ!NULL if the block was unreadable.”h]”hŒ!NULL if the block was unreadable.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MàhjUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒget_nth_bh (C function)”Œ c.get_nth_bh”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒLstruct buffer_head * get_nth_bh (struct buffer_head *bh, unsigned int count)”h]”j )�”}”(hŒJstruct buffer_head *get_nth_bh(struct buffer_head *bh, unsigned int count)”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj¶h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´Méubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¶h²hh³jÇh´Méubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jÛŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—Œ get_nth_bh”sbŒ c.get_nth_bh”†”asbuh1hhj¶h²hh³jÇh´Méubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¶h²hh³jÇh´Méubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¶h²hh³jÇh´Méubj2)�”}”(hŒ get_nth_bh”h]”j8)�”}”(hj÷h]”hŒ get_nth_bh”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hj¶h²hh³jÇh´MéubjS)�”}”(hŒ,(struct buffer_head *bh, unsigned int count)”h]”(jY)�”}”(hŒstruct buffer_head *bh”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj0ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj0ubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jTŒmodname”NŒ classname”Nj›jž)�”}”j¡]”jõŒ c.get_nth_bh”†”asbuh1hhj0ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj0ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj0ubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj,ubjY)�”}”(hŒunsigned int count”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj ubj)�”}”(hŒint”h]”hŒint”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj ubj8)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj,ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj¶h²hh³jÇh´Méubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj²h²hh³jÇh´Méubah}”(h]”j­ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³jÇh´Méhj¯h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ2Get a reference on the n'th buffer after this one.”h]”hŒ4Get a reference on the n’th buffer after this one.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´Méhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj¯h²hh³jÇh´Méubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jj jj j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hX**Parameters** ``struct buffer_head *bh`` The buffer to start counting from. ``unsigned int count`` How many buffers to skip. **Description** This is primarily useful for finding the nth buffer in a folio; in that case you pass the head buffer and the byte offset in the folio divided by the block size. It can be used for other purposes, but it will wrap at the end of the folio rather than returning NULL or proceeding to the next folio for you. **Return** The requested buffer with an elevated refcount.”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³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´Míhj" ubj?)�”}”(hhh]”(jD)�”}”(hŒ>``struct buffer_head *bh`` The buffer to start counting from. ”h]”(jJ)�”}”(hŒ``struct buffer_head *bh``”h]”jP)�”}”(hjG h]”hŒstruct buffer_head *bh”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjE ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´MêhjA ubjf)�”}”(hhh]”hÌ)�”}”(hŒ"The buffer to start counting from.”h]”hŒ"The buffer to start counting from.”…”�”}”(hj` h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j\ h´Mêhj] ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjA ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j\ h´Mêhj> ubjD)�”}”(hŒ1``unsigned int count`` How many buffers to skip. ”h]”(jJ)�”}”(hŒ``unsigned int count``”h]”jP)�”}”(hj€ h]”hŒunsigned int count”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj~ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´Mëhjz ubjf)�”}”(hhh]”hÌ)�”}”(hŒHow many buffers to skip.”h]”hŒHow many buffers to skip.”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j• h´Mëhj– ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjz ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j• h´Mëhj> ubeh}”(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³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´Míhj" ubhÌ)�”}”(hX2This is primarily useful for finding the nth buffer in a folio; in that case you pass the head buffer and the byte offset in the folio divided by the block size. It can be used for other purposes, but it will wrap at the end of the folio rather than returning NULL or proceeding to the next folio for you.”h]”hX2This is primarily useful for finding the nth buffer in a folio; in that case you pass the head buffer and the byte offset in the folio divided by the block size. It can be used for other purposes, but it will wrap at the end of the folio rather than returning NULL or proceeding to the next folio for you.”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´Mìhj" 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³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´Mòhj" ubhÌ)�”}”(hŒ/The requested buffer with an elevated refcount.”h]”hŒ/The requested buffer with an elevated refcount.”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:10: ./include/linux/buffer_head.h”h´Móhj" ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒbio_endio_bh (C function)”Œc.bio_endio_bh”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ=bool bio_endio_bh (struct bio *bio, struct buffer_head **bhp)”h]”j )�”}”(hŒ``struct buffer_head **bhp`` Where to return the buffer_head. ”h]”(jJ)�”}”(hŒ``struct buffer_head **bhp``”h]”jP)�”}”(hjÞ h]”hŒstruct buffer_head **bhp”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjÜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K…hjØ ubjf)�”}”(hhh]”hÌ)�”}”(hŒ Where to return the buffer_head.”h]”hŒ Where to return the buffer_head.”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jó h´K…hjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjØ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jó h´K…hjœ ubeh}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K‡hj€ ubhÌ)�”}”(hŒ¯Call this in your bio_end_io handler to retrieve the buffer_head submitted in bh_submit(). If you did not call bh_submit(), do not call this function; it will return garbage.”h]”hŒ¯Call this in your bio_end_io handler to retrieve the buffer_head submitted in bh_submit(). If you did not call bh_submit(), do not call this function; it will return garbage.”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K†hj€ ubhÌ)�”}”(hŒIThis function consumes the bio refcount which will probably free the bio.”h]”hŒIThis function consumes the bio refcount which will probably free the bio.”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KŠhj€ ubhÌ)�”}”(hŒ **Return**”h]”j))�”}”(hjO h]”hŒReturn”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K�hj€ ubhÌ)�”}”(hŒTrue if the I/O succeeded.”h]”hŒTrue if the I/O succeeded.”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KŽhj€ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ!end_buffer_read_sync (C function)”Œc.end_buffer_read_sync”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ@void end_buffer_read_sync (struct buffer_head *bh, int uptodate)”h]”j )�”}”(hŒ?void end_buffer_read_sync(struct buffer_head *bh, int uptodate)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj� h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KŸubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj� h²hh³j¢ h´KŸubj2)�”}”(hŒend_buffer_read_sync”h]”j8)�”}”(hŒend_buffer_read_sync”h]”hŒend_buffer_read_sync”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj± ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hj� h²hh³j¢ h´KŸubjS)�”}”(hŒ&(struct buffer_head *bh, int uptodate)”h]”(jY)�”}”(hŒstruct buffer_head *bh”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hjÍ ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjÍ ubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjì ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jñ Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j· sbŒc.end_buffer_read_sync”†”asbuh1hhjÍ ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjÍ ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÍ ubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÍ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjÉ ubjY)�”}”(hŒ int uptodate”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj? ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj? ubj8)�”}”(hŒuptodate”h]”hŒuptodate”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj? ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjÉ ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj� h²hh³j¢ h´KŸubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjŒ h²hh³j¢ h´KŸubah}”(h]”j‡ ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j¢ h´KŸhj‰ h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒHandle buffer reads finishing”h]”hŒHandle buffer reads finishing”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KŸhj† h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj‰ h²hh³j¢ h´KŸubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jj¡ jj¡ j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hŒî**Parameters** ``struct buffer_head *bh`` The buffer. ``int uptodate`` True if the read was successful. **Description** If a buffer is read through a mechanism that isn't bh_submit(), you can call this function to finish the read.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K£hj¥ ubj?)�”}”(hhh]”(jD)�”}”(hŒ'``struct buffer_head *bh`` The buffer. ”h]”(jJ)�”}”(hŒ``struct buffer_head *bh``”h]”jP)�”}”(hjÊ h]”hŒstruct buffer_head *bh”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K hjÄ ubjf)�”}”(hhh]”hÌ)�”}”(hŒ The buffer.”h]”hŒ The buffer.”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jß h´K hjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÄ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jß h´K hjÁ ubjD)�”}”(hŒ2``int uptodate`` True if the read was successful. ”h]”(jJ)�”}”(hŒ``int uptodate``”h]”jP)�”}”(hjh]”hŒ int uptodate”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K¡hjý ubjf)�”}”(hhh]”hÌ)�”}”(hŒ True if the read was successful.”h]”hŒ True if the read was successful.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´K¡hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjý ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jh´K¡hjÁ ubeh}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K£hj¥ ubhÌ)�”}”(hŒnIf a buffer is read through a mechanism that isn't bh_submit(), you can call this function to finish the read.”h]”hŒpIf a buffer is read through a mechanism that isn’t bh_submit(), you can call this function to finish the read.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K¢hj¥ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒbh_end_read (C function)”Œ c.bh_end_read”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ"void bh_end_read (struct bio *bio)”h]”j )�”}”(hŒ!void bh_end_read(struct bio *bio)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K³ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjh²hh³j‘h´K³ubj2)�”}”(hŒ bh_end_read”h]”j8)�”}”(hŒ bh_end_read”h]”hŒ bh_end_read”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjh²hh³j‘h´K³ubjS)�”}”(hŒ(struct bio *bio)”h]”jY)�”}”(hŒstruct bio *bio”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj¼ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¼ubh)�”}”(hhh]”j8)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jàŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j¦sbŒ c.bh_end_read”†”asbuh1hhj¼ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¼ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¼ubj8)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj¸ubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjh²hh³j‘h´K³ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj{h²hh³j‘h´K³ubah}”(h]”jvah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j‘h´K³hjxh²hubjø)�”}”(hhh]”hÌ)�”}”(hŒI/O end handler for reads”h]”hŒI/O end handler for reads”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K³hj@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjxh²hh³j‘h´K³ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jj[jj[j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hŒÇ**Parameters** ``struct bio *bio`` The bio being completed. **Description** Pass this function to bh_submit() if you're reading into the buffer, unless you need your own special I/O end handler.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j))�”}”(hjeh]”hŒ Parameters”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K·hj_ubj?)�”}”(hhh]”jD)�”}”(hŒ-``struct bio *bio`` The bio being completed. ”h]”(jJ)�”}”(hŒ``struct bio *bio``”h]”jP)�”}”(hj„h]”hŒstruct bio *bio”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K´hj~ubjf)�”}”(hhh]”hÌ)�”}”(hŒThe bio being completed.”h]”hŒThe bio being completed.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j™h´K´hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j™h´K´hj{ubah}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´K¶hj_ubhÌ)�”}”(hŒvPass this function to bh_submit() if you're reading into the buffer, unless you need your own special I/O end handler.”h]”hŒxPass this function to bh_submit() if you’re reading into the buffer, unless you need your own special I/O end handler.”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Kµhj_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒbh_end_write (C function)”Œc.bh_end_write”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ#void bh_end_write (struct bio *bio)”h]”j )�”}”(hŒ"void bh_end_write(struct bio *bio)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KÂubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjh²hh³jh´KÂubj2)�”}”(hŒ bh_end_write”h]”j8)�”}”(hŒ bh_end_write”h]”hŒ bh_end_write”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj!ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjh²hh³jh´KÂubjS)�”}”(hŒ(struct bio *bio)”h]”jY)�”}”(hŒstruct bio *bio”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj=ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj=ubh)�”}”(hhh]”j8)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jaŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j'sbŒc.bh_end_write”†”asbuh1hhj=ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj=ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj=ubj8)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj9ubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjh²hh³jh´KÂubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjüh²hh³jh´KÂubah}”(h]”j÷ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³jh´KÂhjùh²hubjø)�”}”(hhh]”hÌ)�”}”(hŒI/O end handler for writes”h]”hŒI/O end handler for writes”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KÂhjÁh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjùh²hh³jh´KÂubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjÜjjÜj‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hŒÇ**Parameters** ``struct bio *bio`` The bio being completed. **Description** Pass this function to bh_submit() if you're writing from the buffer, unless you need your own special I/O end handler.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KÆhjàubj?)�”}”(hhh]”jD)�”}”(hŒ-``struct bio *bio`` The bio being completed. ”h]”(jJ)�”}”(hŒ``struct bio *bio``”h]”jP)�”}”(hjh]”hŒstruct bio *bio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KÃhjÿubjf)�”}”(hhh]”hÌ)�”}”(hŒThe bio being completed.”h]”hŒThe bio being completed.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´KÃhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jh´KÃhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjàubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hj@h]”hŒ Description”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KÅhjàubhÌ)�”}”(hŒvPass this function to bh_submit() if you're writing from the buffer, unless you need your own special I/O end handler.”h]”hŒxPass this function to bh_submit() if you’re writing from the buffer, unless you need your own special I/O end handler.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´KÄhjàubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒbh_end_async_write (C function)”Œc.bh_end_async_write”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ)void bh_end_async_write (struct bio *bio)”h]”j )�”}”(hŒ(void bh_end_async_write(struct bio *bio)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M†ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj�h²hh³j“h´M†ubj2)�”}”(hŒbh_end_async_write”h]”j8)�”}”(hŒbh_end_async_write”h]”hŒbh_end_async_write”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj¢ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hj�h²hh³j“h´M†ubjS)�”}”(hŒ(struct bio *bio)”h]”jY)�”}”(hŒstruct bio *bio”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj¾ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¾ubh)�”}”(hhh]”j8)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jâŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j¨sbŒc.bh_end_async_write”†”asbuh1hhj¾ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¾ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¾ubj8)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjºubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj�h²hh³j“h´M†ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj}h²hh³j“h´M†ubah}”(h]”jxah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j“h´M†hjzh²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ&I/O end handler for async folio writes”h]”hŒ&I/O end handler for async folio writes”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M†hjBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjzh²hh³j“h´M†ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jj]jj]j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hX%**Parameters** ``struct bio *bio`` The bio being completed. **Description** Pass this function to bh_submit() if you're doing the equivalent of block_write_full_folio(). That is, the folio is unlocked, and will have its writeback flag cleared once all async write buffers have completed.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j))�”}”(hjgh]”hŒ Parameters”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŠhjaubj?)�”}”(hhh]”jD)�”}”(hŒ-``struct bio *bio`` The bio being completed. ”h]”(jJ)�”}”(hŒ``struct bio *bio``”h]”jP)�”}”(hj†h]”hŒstruct bio *bio”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M‡hj€ubjf)�”}”(hhh]”hÌ)�”}”(hŒThe bio being completed.”h]”hŒThe bio being completed.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j›h´M‡hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j›h´M‡hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjaubhÌ)�”}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M‰hjaubhÌ)�”}”(hŒÔPass this function to bh_submit() if you're doing the equivalent of block_write_full_folio(). That is, the folio is unlocked, and will have its writeback flag cleared once all async write buffers have completed.”h]”hŒÖPass this function to bh_submit() if you’re doing the equivalent of block_write_full_folio(). That is, the folio is unlocked, and will have its writeback flag cleared once all async write buffers have completed.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mˆhjaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒmmb_sync (C function)”Œ c.mmb_sync”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ/int mmb_sync (struct mapping_metadata_bhs *mmb)”h]”j )�”}”(hŒ.int mmb_sync(struct mapping_metadata_bhs *mmb)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Müubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjh²hh³jh´Müubj2)�”}”(hŒmmb_sync”h]”j8)�”}”(hŒmmb_sync”h]”hŒmmb_sync”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj#ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjh²hh³jh´MüubjS)�”}”(hŒ"(struct mapping_metadata_bhs *mmb)”h]”jY)�”}”(hŒ struct mapping_metadata_bhs *mmb”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj?ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj?ubh)�”}”(hhh]”j8)�”}”(hŒmapping_metadata_bhs”h]”hŒmapping_metadata_bhs”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jcŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j)sbŒ c.mmb_sync”†”asbuh1hhj?ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj?ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj?ubj8)�”}”(hŒmmb”h]”hŒmmb”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj;ubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjh²hh³jh´Müubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjþh²hh³jh´Müubah}”(h]”jùah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³jh´Mühjûh²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ+write out & wait upon all buffers in a list”h]”hŒ+write out & wait upon all buffers in a list”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MühjÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjûh²hh³jh´Müubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjÞjjÞj‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hX�**Parameters** ``struct mapping_metadata_bhs *mmb`` the list of buffers to write **Description** Starts I/O against the buffers in the given list and waits upon that I/O. Basically, this is a convenience function for fsync(). **mmb** is for a file or directory which needs those buffers to be written for a successful fsync(). We have conflicting pressures: we want to make sure that all initially dirty buffers get waited on, but that any subsequently dirtied buffers don't. After all, we don't want fsync to last forever if somebody is actively writing to the file. Do this in two main stages: first we copy dirty buffers to a temporary inode list, queueing the writes as we go. Then we clean up, waiting for those writes to complete. mark_buffer_dirty_inode() doesn't touch b_assoc_buffers list if b_mmb is not NULL so we are sure the buffer stays on our list until IO completes (at which point it can be reaped).”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mhjâubj?)�”}”(hhh]”jD)�”}”(hŒB``struct mapping_metadata_bhs *mmb`` the list of buffers to write ”h]”(jJ)�”}”(hŒ$``struct mapping_metadata_bhs *mmb``”h]”jP)�”}”(hjh]”hŒ struct mapping_metadata_bhs *mmb”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mýhjubjf)�”}”(hhh]”hÌ)�”}”(hŒthe list of buffers to write”h]”hŒthe list of buffers to write”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Mýhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jh´Mýhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjâubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hjBh]”hŒ Description”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÿhjâubhÌ)�”}”(hŒæStarts I/O against the buffers in the given list and waits upon that I/O. Basically, this is a convenience function for fsync(). **mmb** is for a file or directory which needs those buffers to be written for a successful fsync().”h]”(hŒ‚Starts I/O against the buffers in the given list and waits upon that I/O. Basically, this is a convenience function for fsync(). ”…”�”}”(hjXh²hh³Nh´Nubj))�”}”(hŒ**mmb**”h]”hŒmmb”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjXubhŒ] is for a file or directory which needs those buffers to be written for a successful fsync().”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MþhjâubhÌ)�”}”(hŒñWe have conflicting pressures: we want to make sure that all initially dirty buffers get waited on, but that any subsequently dirtied buffers don't. After all, we don't want fsync to last forever if somebody is actively writing to the file.”h]”hŒõWe have conflicting pressures: we want to make sure that all initially dirty buffers get waited on, but that any subsequently dirtied buffers don’t. After all, we don’t want fsync to last forever if somebody is actively writing to the file.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MhjâubhÌ)�”}”(hX\Do this in two main stages: first we copy dirty buffers to a temporary inode list, queueing the writes as we go. Then we clean up, waiting for those writes to complete. mark_buffer_dirty_inode() doesn't touch b_assoc_buffers list if b_mmb is not NULL so we are sure the buffer stays on our list until IO completes (at which point it can be reaped).”h]”hX^Do this in two main stages: first we copy dirty buffers to a temporary inode list, queueing the writes as we go. Then we clean up, waiting for those writes to complete. mark_buffer_dirty_inode() doesn’t touch b_assoc_buffers list if b_mmb is not NULL so we are sure the buffer stays on our list until IO completes (at which point it can be reaped).”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mhjâubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒblock_dirty_folio (C function)”Œc.block_dirty_folio”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒKbool block_dirty_folio (struct address_space *mapping, struct folio *folio)”h]”j )�”}”(hŒJbool block_dirty_folio(struct address_space *mapping, struct folio *folio)”h]”(j)�”}”(hj) h]”hŒbool”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M‚ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj³h²hh³jÄh´M‚ubj2)�”}”(hŒblock_dirty_folio”h]”j8)�”}”(hŒblock_dirty_folio”h]”hŒblock_dirty_folio”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÓubah}”(h]”h ]”(jKjLe• h"]”h$]”h&]”jPjQuh1j1hj³h²hh³jÄh´M‚ubjS)�”}”(hŒ4(struct address_space *mapping, struct folio *folio)”h]”(jY)�”}”(hŒstruct address_space *mapping”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hjïubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjïubh)�”}”(hhh]”j8)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—jÙsbŒc.block_dirty_folio”†”asbuh1hhjïubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjïubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjïubj8)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjëubjY)�”}”(hŒstruct folio *folio”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hjaubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjaubh)�”}”(hhh]”j8)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j…Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j-Œc.block_dirty_folio”†”asbuh1hhjaubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjaubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjaubj8)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjëubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj³h²hh³jÄh´M‚ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj¯h²hh³jÄh´M‚ubah}”(h]”jªah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³jÄh´M‚hj¬h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒMark a folio as dirty.”h]”hŒMark a folio as dirty.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M‚hjãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj¬h²hh³jÄh´M‚ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjþjjþj‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hXÐ**Parameters** ``struct address_space *mapping`` The address space containing this folio. ``struct folio *folio`` The folio to mark dirty. **Description** Filesystems which use buffer_heads can use this function as their ->dirty_folio implementation. Some filesystems need to do a little work before calling this function. Filesystems which do not use buffer_heads should call filemap_dirty_folio() instead. If the folio has buffers, the uptodate buffers are set dirty, to preserve dirty-state coherency between the folio and the buffers. Buffers added to a dirty folio are created dirty. The buffers are dirtied before the folio is dirtied. There's a small race window in which writeback may see the folio cleanness but not the buffer dirtiness. That's fine. If this code were to set the folio dirty before the buffers, writeback could clear the folio dirty flag, see a bunch of clean buffers and we'd end up with dirty buffers/clean folio on the dirty folio list. We use i_private_lock to lock against try_to_free_buffers() while using the folio's buffer list. This also prevents clean buffers being added to the folio after it was set dirty. **Context** May only be called from process context. Does not sleep. Caller must ensure that **folio** cannot be truncated during this call, typically by holding the folio lock or having a page in the folio mapped and holding the page table lock. **Return** True if the folio was dirtied; false if it was already dirtied.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j))�”}”(hjh]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M†hjubj?)�”}”(hhh]”(jD)�”}”(hŒK``struct address_space *mapping`` The address space containing this folio. ”h]”(jJ)�”}”(hŒ!``struct address_space *mapping``”h]”jP)�”}”(hj'h]”hŒstruct address_space *mapping”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mƒhj!ubjf)�”}”(hhh]”hÌ)�”}”(hŒ(The address space containing this folio.”h]”hŒ(The address space containing this folio.”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j<h´Mƒhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j<h´MƒhjubjD)�”}”(hŒ1``struct folio *folio`` The folio to mark dirty. ”h]”(jJ)�”}”(hŒ``struct folio *folio``”h]”jP)�”}”(hj`h]”hŒstruct folio *folio”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M„hjZubjf)�”}”(hhh]”hÌ)�”}”(hŒThe folio to mark dirty.”h]”hŒThe folio to mark dirty.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³juh´M„hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³juh´M„hjubeh}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M†hjubhÌ)�”}”(hŒþFilesystems which use buffer_heads can use this function as their ->dirty_folio implementation. Some filesystems need to do a little work before calling this function. Filesystems which do not use buffer_heads should call filemap_dirty_folio() instead.”h]”hŒþFilesystems which use buffer_heads can use this function as their ->dirty_folio implementation. Some filesystems need to do a little work before calling this function. Filesystems which do not use buffer_heads should call filemap_dirty_folio() instead.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M…hjubhÌ)�”}”(hŒ´If the folio has buffers, the uptodate buffers are set dirty, to preserve dirty-state coherency between the folio and the buffers. Buffers added to a dirty folio are created dirty.”h]”hŒ´If the folio has buffers, the uptodate buffers are set dirty, to preserve dirty-state coherency between the folio and the buffers. Buffers added to a dirty folio are created dirty.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŠhjubhÌ)�”}”(hX{The buffers are dirtied before the folio is dirtied. There's a small race window in which writeback may see the folio cleanness but not the buffer dirtiness. That's fine. If this code were to set the folio dirty before the buffers, writeback could clear the folio dirty flag, see a bunch of clean buffers and we'd end up with dirty buffers/clean folio on the dirty folio list.”h]”hX�The buffers are dirtied before the folio is dirtied. There’s a small race window in which writeback may see the folio cleanness but not the buffer dirtiness. That’s fine. If this code were to set the folio dirty before the buffers, writeback could clear the folio dirty flag, see a bunch of clean buffers and we’d end up with dirty buffers/clean folio on the dirty folio list.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŽhjubhÌ)�”}”(hŒ³We use i_private_lock to lock against try_to_free_buffers() while using the folio's buffer list. This also prevents clean buffers being added to the folio after it was set dirty.”h]”hŒµWe use i_private_lock to lock against try_to_free_buffers() while using the folio’s buffer list. This also prevents clean buffers being added to the folio after it was set dirty.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M•hjubhÌ)�”}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M™hjubhÌ)�”}”(hŒëMay only be called from process context. Does not sleep. Caller must ensure that **folio** cannot be truncated during this call, typically by holding the folio lock or having a page in the folio mapped and holding the page table lock.”h]”(hŒRMay only be called from process context. Does not sleep. Caller must ensure that ”…”�”}”(hjh²hh³Nh´Nubj))�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjubhŒ� cannot be truncated during this call, typically by holding the folio lock or having a page in the folio mapped and holding the page table lock.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MšhjubhÌ)�”}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŸhjubhÌ)�”}”(hŒ?True if the folio was dirtied; false if it was already dirtied.”h]”hŒ?True if the folio was dirtied; false if it was already dirtied.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŸhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒmark_buffer_dirty (C function)”Œc.mark_buffer_dirty”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ/void mark_buffer_dirty (struct buffer_head *bh)”h]”j )�”}”(hŒ.void mark_buffer_dirty(struct buffer_head *bh)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjih²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÒubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjih²hh³j{h´MÒubj2)�”}”(hŒmark_buffer_dirty”h]”j8)�”}”(hŒmark_buffer_dirty”h]”hŒmark_buffer_dirty”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjŠubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjih²hh³j{h´MÒubjS)�”}”(hŒ(struct buffer_head *bh)”h]”jY)�”}”(hŒstruct buffer_head *bh”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj¦ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¦ubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jÊŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j�sbŒc.mark_buffer_dirty”†”asbuh1hhj¦ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¦ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¦ubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj¢ubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjih²hh³j{h´MÒubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjeh²hh³j{h´MÒubah}”(h]”j`ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j{h´MÒhjbh²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ&mark a buffer_head as needing writeout”h]”hŒ&mark a buffer_head as needing writeout”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÒhj*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjbh²hh³j{h´MÒubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjEjjEj‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hX±**Parameters** ``struct buffer_head *bh`` the buffer_head to mark dirty **Description** mark_buffer_dirty() will set the dirty bit against the buffer, then set its backing page dirty, then tag the page as dirty in the page cache and then attach the address_space's inode to its superblock's dirty inode list. mark_buffer_dirty() is atomic. It takes bh->b_folio->mapping->i_private_lock, i_pages lock and mapping->host->i_lock.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j))�”}”(hjOh]”hŒ Parameters”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÖhjIubj?)�”}”(hhh]”jD)�”}”(hŒ9``struct buffer_head *bh`` the buffer_head to mark dirty ”h]”(jJ)�”}”(hŒ``struct buffer_head *bh``”h]”jP)�”}”(hjnh]”hŒstruct buffer_head *bh”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÓhjhubjf)�”}”(hhh]”hÌ)�”}”(hŒthe buffer_head to mark dirty”h]”hŒthe buffer_head to mark dirty”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jƒh´MÓhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jƒh´MÓhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjIubhÌ)�”}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÕhjIubhÌ)�”}”(hŒÜmark_buffer_dirty() will set the dirty bit against the buffer, then set its backing page dirty, then tag the page as dirty in the page cache and then attach the address_space's inode to its superblock's dirty inode list.”h]”hŒàmark_buffer_dirty() will set the dirty bit against the buffer, then set its backing page dirty, then tag the page as dirty in the page cache and then attach the address_space’s inode to its superblock’s dirty inode list.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÔhjIubhÌ)�”}”(hŒvmark_buffer_dirty() is atomic. It takes bh->b_folio->mapping->i_private_lock, i_pages lock and mapping->host->i_lock.”h]”hŒvmark_buffer_dirty() is atomic. It takes bh->b_folio->mapping->i_private_lock, i_pages lock and mapping->host->i_lock.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÙhjIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ__brelse (C function)”Œ c.__brelse”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ&void __brelse (struct buffer_head *bh)”h]”j )�”}”(hŒ%void __brelse(struct buffer_head *bh)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjùh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjùh²hh³j h´Mubj2)�”}”(hŒ__brelse”h]”j8)�”}”(hŒ__brelse”h]”hŒ__brelse”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjùh²hh³j h´MubjS)�”}”(hŒ(struct buffer_head *bh)”h]”jY)�”}”(hŒstruct buffer_head *bh”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj6ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj6ubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jZŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j sbŒ c.__brelse”†”asbuh1hhj6ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj6ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj6ubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj2ubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjùh²hh³j h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjõh²hh³j h´Mubah}”(h]”jðah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j h´Mhjòh²hubjø)�”}”(hhh]”hÌ)�”}”(hŒRelease a buffer.”h]”hŒRelease a buffer.”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mhjºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjòh²hh³j h´Mubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjÕjjÕj‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hŒ¤**Parameters** ``struct buffer_head *bh`` The buffer to release. **Description** This variant of brelse() can be called if **bh** is guaranteed to not be NULL.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MhjÙubj?)�”}”(hhh]”jD)�”}”(hŒ2``struct buffer_head *bh`` The buffer to release. ”h]”(jJ)�”}”(hŒ``struct buffer_head *bh``”h]”jP)�”}”(hjþh]”hŒstruct buffer_head *bh”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mhjøubjf)�”}”(hhh]”hÌ)�”}”(hŒThe buffer to release.”h]”hŒThe buffer to release.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jh´Mhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÙubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hj9h]”hŒ Description”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MhjÙubhÌ)�”}”(hŒNThis variant of brelse() can be called if **bh** is guaranteed to not be NULL.”h]”(hŒ*This variant of brelse() can be called if ”…”�”}”(hjOh²hh³Nh´Nubj))�”}”(hŒ**bh**”h]”hŒbh”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjOubhŒ is guaranteed to not be NULL.”…”�”}”(hjOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MhjÙubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ__bforget (C function)”Œ c.__bforget”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ'void __bforget (struct buffer_head *bh)”h]”j )�”}”(hŒ&void __bforget(struct buffer_head *bh)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjŒh²hh³jžh´M ubj2)�”}”(hŒ __bforget”h]”j8)�”}”(hŒ __bforget”h]”hŒ __bforget”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj­ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjŒh²hh³jžh´M ubjS)�”}”(hŒ(struct buffer_head *bh)”h]”jY)�”}”(hŒstruct buffer_head *bh”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hjÉubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjÉubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjèubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jíŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j³sbŒ c.__bforget”†”asbuh1hhjÉubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjÉubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÉubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÉubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjÅubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjŒh²hh³jžh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjˆh²hh³jžh´M ubah}”(h]”jƒah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³jžh´M hj…h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ#Discard any dirty data in a buffer.”h]”hŒ#Discard any dirty data in a buffer.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M hjMh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj…h²hh³jžh´M ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjhjjhj‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hŒ¤**Parameters** ``struct buffer_head *bh`` The buffer to forget. **Description** This variant of bforget() can be called if **bh** is guaranteed to not be NULL.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j))�”}”(hjrh]”hŒ Parameters”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M$hjlubj?)�”}”(hhh]”jD)�”}”(hŒ1``struct buffer_head *bh`` The buffer to forget. ”h]”(jJ)�”}”(hŒ``struct buffer_head *bh``”h]”jP)�”}”(hj‘h]”hŒstruct buffer_head *bh”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M!hj‹ubjf)�”}”(hhh]”hÌ)�”}”(hŒThe buffer to forget.”h]”hŒThe buffer to forget.”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¦h´M!hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j¦h´M!hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjlubhÌ)�”}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M#hjlubhÌ)�”}”(hŒOThis variant of bforget() can be called if **bh** is guaranteed to not be NULL.”h]”(hŒ+This variant of bforget() can be called if ”…”�”}”(hjâh²hh³Nh´Nubj))�”}”(hŒ**bh**”h]”hŒbh”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjâubhŒ is guaranteed to not be NULL.”…”�”}”(hjâh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M"hjlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒbh_submit (C function)”Œ c.bh_submit”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒKvoid bh_submit (struct buffer_head *bh, blk_opf_t opf, bio_end_io_t end_io)”h]”j )�”}”(hŒJvoid bh_submit(struct buffer_head *bh, blk_opf_t opf, bio_end_io_t end_io)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mpubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjh²hh³j1h´Mpubj2)�”}”(hŒ bh_submit”h]”j8)�”}”(hŒ bh_submit”h]”hŒ bh_submit”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj@ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjh²hh³j1h´MpubjS)�”}”(hŒ<(struct buffer_head *bh, blk_opf_t opf, bio_end_io_t end_io)”h]”(jY)�”}”(hŒstruct buffer_head *bh”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj\ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj\ubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j€Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—jFsbŒ c.bh_submit”†”asbuh1hhj\ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj\ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj\ubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjXubjY)�”}”(hŒ blk_opf_t opf”h]”(h)�”}”(hhh]”j8)�”}”(hŒ blk_opf_t”h]”hŒ blk_opf_t”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j׌modname”NŒ classname”Nj›jž)�”}”j¡]”jšŒ c.bh_submit”†”asbuh1hhjÎubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjÎubj8)�”}”(hŒopf”h]”hŒopf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÎubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjXubjY)�”}”(hŒbio_end_io_t end_io”h]”(h)�”}”(hhh]”j8)�”}”(hŒ bio_end_io_t”h]”hŒ bio_end_io_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jŒmodname”NŒ classname”Nj›jž)�”}”j¡]”jšŒ c.bh_submit”†”asbuh1hhjubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjubj8)�”}”(hŒend_io”h]”hŒend_io”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjXubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjh²hh³j1h´Mpubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjh²hh³j1h´Mpubah}”(h]”jah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j1h´Mphjh²hubjø)�”}”(hhh]”hÌ)�”}”(hŒStart I/O against a buffer head”h]”hŒStart I/O against a buffer head”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mphjph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjh²hh³j1h´Mpubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jj‹jj‹j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hXc**Parameters** ``struct buffer_head *bh`` The buffer head to perform I/O on. ``blk_opf_t opf`` Operation and flags for bio. ``bio_end_io_t end_io`` The routine to call when I/O has completed. **Description** If you need to do I/O on an individual bh (instead of allowing the page cache to do I/O on the folio that it is in), call this function.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mthj�ubj?)�”}”(hhh]”(jD)�”}”(hŒ>``struct buffer_head *bh`` The buffer head to perform I/O on. ”h]”(jJ)�”}”(hŒ``struct buffer_head *bh``”h]”jP)�”}”(hj´h]”hŒstruct buffer_head *bh”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mqhj®ubjf)�”}”(hhh]”hÌ)�”}”(hŒ"The buffer head to perform I/O on.”h]”hŒ"The buffer head to perform I/O on.”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÉh´MqhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jÉh´Mqhj«ubjD)�”}”(hŒ/``blk_opf_t opf`` Operation and flags for bio. ”h]”(jJ)�”}”(hŒ``blk_opf_t opf``”h]”jP)�”}”(hjíh]”hŒ blk_opf_t opf”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mrhjçubjf)�”}”(hhh]”hÌ)�”}”(hŒOperation and flags for bio.”h]”hŒOperation and flags for bio.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Mrhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jh´Mrhj«ubjD)�”}”(hŒD``bio_end_io_t end_io`` The routine to call when I/O has completed. ”h]”(jJ)�”}”(hŒ``bio_end_io_t end_io``”h]”jP)�”}”(hj&h]”hŒbio_end_io_t end_io”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mshj ubjf)�”}”(hhh]”hÌ)�”}”(hŒ+The routine to call when I/O has completed.”h]”hŒ+The routine to call when I/O has completed.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j;h´Mshj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j;h´Mshj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�ubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hjah]”hŒ Description”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Muhj�ubhÌ)�”}”(hŒˆIf you need to do I/O on an individual bh (instead of allowing the page cache to do I/O on the folio that it is in), call this function.”h]”hŒˆIf you need to do I/O on an individual bh (instead of allowing the page cache to do I/O on the folio that it is in), call this function.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mthj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒbdev_getblk (C function)”Œ c.bdev_getblk”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒfstruct buffer_head * bdev_getblk (struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp)”h]”j )�”}”(hŒdstruct buffer_head *bdev_getblk(struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp)”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj¢h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M'ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¢h²hh³j³h´M'ubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÂubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jÇŒmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—Œ bdev_getblk”sbŒ c.bdev_getblk”†”asbuh1hhj¢h²hh³j³h´M'ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¢h²hh³j³h´M'ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¢h²hh³j³h´M'ubj2)�”}”(hŒ bdev_getblk”h]”j8)�”}”(hjãh]”hŒ bdev_getblk”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hj¢h²hh³j³h´M'ubjS)�”}”(hŒE(struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp)”h]”(jY)�”}”(hŒstruct block_device *bdev”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hjubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjubh)�”}”(hhh]”j8)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j@Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jጠc.bdev_getblk”†”asbuh1hhjubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjubj8)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjubjY)�”}”(hŒsector_t block”h]”(h)�”}”(hhh]”j8)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j•Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jጠc.bdev_getblk”†”asbuh1hhjŒubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjŒubj8)�”}”(hŒblock”h]”hŒblock”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjubjY)�”}”(hŒ unsigned size”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjÔubj8)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjubjY)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j8)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jጠc.bdev_getblk”†”asbuh1hhj ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj ubj8)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj¢h²hh³j³h´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjžh²hh³j³h´M'ubah}”(h]”j™ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j³h´M'hj›h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ3Get a buffer_head in a block device's buffer cache.”h]”hŒ5Get a buffer_head in a block device’s buffer cache.”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M'hjc h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj›h²hh³j³h´M'ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jj~ jj~ j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hXG**Parameters** ``struct block_device *bdev`` The block device. ``sector_t block`` The block number. ``unsigned size`` The size of buffer_heads for this **bdev**. ``gfp_t gfp`` The memory allocation flags to use. **Description** The returned buffer head has its reference count incremented, but is not locked. The caller should call brelse() when it has finished with the buffer. The buffer may not be uptodate. If needed, the caller can bring it uptodate either by reading it or overwriting it. **Return** The buffer head, or NULL if memory could not be allocated.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M+hj‚ ubj?)�”}”(hhh]”(jD)�”}”(hŒ0``struct block_device *bdev`` The block device. ”h]”(jJ)�”}”(hŒ``struct block_device *bdev``”h]”jP)�”}”(hj§ h]”hŒstruct block_device *bdev”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj¥ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M(hj¡ ubjf)�”}”(hhh]”hÌ)�”}”(hŒThe block device.”h]”hŒThe block device.”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¼ h´M(hj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj¡ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j¼ h´M(hjž ubjD)�”}”(hŒ%``sector_t block`` The block number. ”h]”(jJ)�”}”(hŒ``sector_t block``”h]”jP)�”}”(hjà h]”hŒsector_t block”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjÞ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M)hjÚ ubjf)�”}”(hhh]”hÌ)�”}”(hŒThe block number.”h]”hŒThe block number.”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jõ h´M)hjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÚ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jõ h´M)hjž ubjD)�”}”(hŒ>``unsigned size`` The size of buffer_heads for this **bdev**. ”h]”(jJ)�”}”(hŒ``unsigned size``”h]”jP)�”}”(hj!h]”hŒ unsigned size”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M*hj!ubjf)�”}”(hhh]”hÌ)�”}”(hŒ+The size of buffer_heads for this **bdev**.”h]”(hŒ"The size of buffer_heads for this ”…”�”}”(hj2!h²hh³Nh´Nubj))�”}”(hŒ**bdev**”h]”hŒbdev”…”�”}”(hj:!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj2!ubhŒ.”…”�”}”(hj2!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j.!h´M*hj/!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j.!h´M*hjž ubjD)�”}”(hŒ2``gfp_t gfp`` The memory allocation flags to use. ”h]”(jJ)�”}”(hŒ ``gfp_t gfp``”h]”jP)�”}”(hjd!h]”hŒ gfp_t gfp”…”�”}”(hjf!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjb!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M+hj^!ubjf)�”}”(hhh]”hÌ)�”}”(hŒ#The memory allocation flags to use.”h]”hŒ#The memory allocation flags to use.”…”�”}”(hj}!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jy!h´M+hjz!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj^!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jy!h´M+hjž ubeh}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M-hj‚ ubhÌ)�”}”(hX The returned buffer head has its reference count incremented, but is not locked. The caller should call brelse() when it has finished with the buffer. The buffer may not be uptodate. If needed, the caller can bring it uptodate either by reading it or overwriting it.”h]”hX The returned buffer head has its reference count incremented, but is not locked. The caller should call brelse() when it has finished with the buffer. The buffer may not be uptodate. If needed, the caller can bring it uptodate either by reading it or overwriting it.”…”�”}”(hjµ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M,hj‚ 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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M1hj‚ ubhÌ)�”}”(hŒ:The buffer head, or NULL if memory could not be allocated.”h]”hŒ:The buffer head, or NULL if memory could not be allocated.”…”�”}”(hjÜ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M2hj‚ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ__bread_gfp (C function)”Œ c.__bread_gfp”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒfstruct buffer_head * __bread_gfp (struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp)”h]”j )�”}”(hŒdstruct buffer_head *__bread_gfp(struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp)”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj"h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MVubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj"h²hh³j"h´MVubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hj*"h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj'"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j,"Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—Œ __bread_gfp”sbŒ c.__bread_gfp”†”asbuh1hhj"h²hh³j"h´MVubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK"h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj"h²hh³j"h´MVubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjY"h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj"h²hh³j"h´MVubj2)�”}”(hŒ __bread_gfp”h]”j8)�”}”(hjH"h]”hŒ __bread_gfp”…”�”}”(hjj"h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjf"ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hj"h²hh³j"h´MVubjS)�”}”(hŒE(struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp)”h]”(jY)�”}”(hŒstruct block_device *bdev”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj…"h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj�"ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’"h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj�"ubh)�”}”(hhh]”j8)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj£"h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj "ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j¥"Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jF"Œ c.__bread_gfp”†”asbuh1hhj�"ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ"h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj�"ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjÏ"h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�"ubj8)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjÜ"h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj�"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj}"ubjY)�”}”(hŒsector_t block”h]”(h)�”}”(hhh]”j8)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hjø"h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjõ"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jú"Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jF"Œ c.__bread_gfp”†”asbuh1hhjñ"ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjñ"ubj8)�”}”(hŒblock”h]”hŒblock”…”�”}”(hj$#h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjñ"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj}"ubjY)�”}”(hŒ unsigned size”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj=#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9#ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK#h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj9#ubj8)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjY#h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj9#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj}"ubjY)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j8)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hju#h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjr#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jw#Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jF"Œ c.__bread_gfp”†”asbuh1hhjn#ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“#h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjn#ubj8)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj¡#h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjn#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj}"ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj"h²hh³j"h´MVubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj"h²hh³j"h´MVubah}”(h]”jþ!ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j"h´MVhj"h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ Read a block.”h]”hŒ Read a block.”…”�”}”(hjË#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MVhjÈ#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj"h²hh³j"h´MVubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjã#jjã#j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hXs**Parameters** ``struct block_device *bdev`` The block device to read from. ``sector_t block`` Block number in units of block size. ``unsigned size`` The block size of this device in bytes. ``gfp_t gfp`` Not page allocation flags; see below. **Description** You are not expected to call this function. You should use one of sb_bread(), sb_bread_unmovable() or __bread(). Read a specified block, and return the buffer head that refers to it. If **gfp** is 0, the memory will be allocated using the block device's default GFP flags. If **gfp** is __GFP_MOVABLE, the memory may be allocated from a movable area. Do not pass in a complete set of GFP flags. The returned buffer head has its refcount increased. The caller should call brelse() when it has finished with the buffer. **Context** May sleep waiting for I/O. **Return** NULL if the block was unreadable.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MZhjç#ubj?)�”}”(hhh]”(jD)�”}”(hŒ=``struct block_device *bdev`` The block device to read from. ”h]”(jJ)�”}”(hŒ``struct block_device *bdev``”h]”jP)�”}”(hj $h]”hŒstruct block_device *bdev”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj $ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MWhj$ubjf)�”}”(hhh]”hÌ)�”}”(hŒThe block device to read from.”h]”hŒThe block device to read from.”…”�”}”(hj%$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j!$h´MWhj"$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j!$h´MWhj$ubjD)�”}”(hŒ8``sector_t block`` Block number in units of block size. ”h]”(jJ)�”}”(hŒ``sector_t block``”h]”jP)�”}”(hjE$h]”hŒsector_t block”…”�”}”(hjG$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjC$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MXhj?$ubjf)�”}”(hhh]”hÌ)�”}”(hŒ$Block number in units of block size.”h]”hŒ$Block number in units of block size.”…”�”}”(hj^$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jZ$h´MXhj[$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj?$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jZ$h´MXhj$ubjD)�”}”(hŒ:``unsigned size`` The block size of this device in bytes. ”h]”(jJ)�”}”(hŒ``unsigned size``”h]”jP)�”}”(hj~$h]”hŒ unsigned size”…”�”}”(hj€$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj|$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MYhjx$ubjf)�”}”(hhh]”hÌ)�”}”(hŒ'The block size of this device in bytes.”h]”hŒ'The block size of this device in bytes.”…”�”}”(hj—$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j“$h´MYhj”$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjx$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j“$h´MYhj$ubjD)�”}”(hŒ4``gfp_t gfp`` Not page allocation flags; see below. ”h]”(jJ)�”}”(hŒ ``gfp_t gfp``”h]”jP)�”}”(hj·$h]”hŒ gfp_t gfp”…”�”}”(hj¹$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjµ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MZhj±$ubjf)�”}”(hhh]”hÌ)�”}”(hŒ%Not page allocation flags; see below.”h]”hŒ%Not page allocation flags; see below.”…”�”}”(hjÐ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÌ$h´MZhjÍ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj±$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jÌ$h´MZhj$ubeh}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M\hjç#ubhÌ)�”}”(hŒqYou are not expected to call this function. You should use one of sb_bread(), sb_bread_unmovable() or __bread().”h]”hŒqYou are not expected to call this function. You should use one of sb_bread(), sb_bread_unmovable() or __bread().”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M[hjç#ubhÌ)�”}”(hXRead a specified block, and return the buffer head that refers to it. If **gfp** is 0, the memory will be allocated using the block device's default GFP flags. If **gfp** is __GFP_MOVABLE, the memory may be allocated from a movable area. Do not pass in a complete set of GFP flags.”h]”(hŒIRead a specified block, and return the buffer head that refers to it. If ”…”�”}”(hj%h²hh³Nh´Nubj))�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%ubhŒV is 0, the memory will be allocated using the block device’s default GFP flags. If ”…”�”}”(hj%h²hh³Nh´Nubj))�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hj1%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%ubhŒp is __GFP_MOVABLE, the memory may be allocated from a movable area. Do not pass in a complete set of GFP flags.”…”�”}”(hj%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M^hjç#ubhÌ)�”}”(hŒ{The returned buffer head has its refcount increased. The caller should call brelse() when it has finished with the buffer.”h]”hŒ{The returned buffer head has its refcount increased. The caller should call brelse() when it has finished with the buffer.”…”�”}”(hjJ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mdhjç#ubhÌ)�”}”(hŒ **Context**”h]”j))�”}”(hj[%h]”hŒContext”…”�”}”(hj]%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjY%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mghjç#ubhÌ)�”}”(hŒMay sleep waiting for I/O.”h]”hŒMay sleep waiting for I/O.”…”�”}”(hjq%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mhhjç#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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mjhjç#ubhÌ)�”}”(hŒ!NULL if the block was unreadable.”h]”hŒ!NULL if the block was unreadable.”…”�”}”(hj˜%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mihjç#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ#block_invalidate_folio (C function)”Œc.block_invalidate_folio”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒOvoid block_invalidate_folio (struct folio *folio, size_t offset, size_t length)”h]”j )�”}”(hŒNvoid block_invalidate_folio(struct folio *folio, size_t offset, size_t length)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÇ%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃ%h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÞubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ%h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjÃ%h²hh³jÕ%h´MÞubj2)�”}”(hŒblock_invalidate_folio”h]”j8)�”}”(hŒblock_invalidate_folio”h]”hŒblock_invalidate_folio”…”�”}”(hjè%h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjä%ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjÃ%h²hh³jÕ%h´MÞubjS)�”}”(hŒ3(struct folio *folio, size_t offset, size_t length)”h]”(jY)�”}”(hŒstruct folio *folio”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj&ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj&ubh)�”}”(hhh]”j8)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj"&h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j$&Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—jê%sbŒc.block_invalidate_folio”†”asbuh1hhj&ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB&h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj&ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjP&h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj&ubj8)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj]&h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjü%ubjY)�”}”(hŒ size_t offset”h]”(h)�”}”(hhh]”j8)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjy&h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjv&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j{&Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j>&Œc.block_invalidate_folio”†”asbuh1hhjr&ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—&h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjr&ubj8)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj¥&h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjr&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjü%ubjY)�”}”(hŒ size_t length”h]”(h)�”}”(hhh]”j8)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÁ&h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj¾&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jÃ&Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j>&Œc.block_invalidate_folio”†”asbuh1hhjº&ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß&h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjº&ubj8)�”}”(hŒlength”h]”hŒlength”…”�”}”(hjí&h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjº&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjü%ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjÃ%h²hh³jÕ%h´MÞubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj¿%h²hh³jÕ%h´MÞubah}”(h]”jº%ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³jÕ%h´MÞhj¼%h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ0Invalidate part or all of a buffer-backed folio.”h]”hŒ0Invalidate part or all of a buffer-backed folio.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÞhj'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj¼%h²hh³jÕ%h´MÞubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jj/'jj/'j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hXe**Parameters** ``struct folio *folio`` The folio which is affected. ``size_t offset`` start of the range to invalidate ``size_t length`` length of the range to invalidate **Description** block_invalidate_folio() is called when all or part of the folio has been invalidated by a truncate operation. block_invalidate_folio() does not have to release all buffers, but it must ensure that no dirty buffer is left outside **offset** and that no I/O is underway against any of the blocks which are outside the truncation point. Because the caller is about to free (and possibly reuse) those blocks on-disk.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mâhj3'ubj?)�”}”(hhh]”(jD)�”}”(hŒ5``struct folio *folio`` The folio which is affected. ”h]”(jJ)�”}”(hŒ``struct folio *folio``”h]”jP)�”}”(hjX'h]”hŒstruct folio *folio”…”�”}”(hjZ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjV'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MßhjR'ubjf)�”}”(hhh]”hÌ)�”}”(hŒThe folio which is affected.”h]”hŒThe folio which is affected.”…”�”}”(hjq'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jm'h´Mßhjn'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjR'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jm'h´MßhjO'ubjD)�”}”(hŒ3``size_t offset`` start of the range to invalidate ”h]”(jJ)�”}”(hŒ``size_t offset``”h]”jP)�”}”(hj‘'h]”hŒ size_t offset”…”�”}”(hj“'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj�'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Màhj‹'ubjf)�”}”(hhh]”hÌ)�”}”(hŒ start of the range to invalidate”h]”hŒ start of the range to invalidate”…”�”}”(hjª'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¦'h´Màhj§'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj‹'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j¦'h´MàhjO'ubjD)�”}”(hŒ4``size_t length`` length of the range to invalidate ”h]”(jJ)�”}”(hŒ``size_t length``”h]”jP)�”}”(hjÊ'h]”hŒ size_t length”…”�”}”(hjÌ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjÈ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MáhjÄ'ubjf)�”}”(hhh]”hÌ)�”}”(hŒ!length of the range to invalidate”h]”hŒ!length of the range to invalidate”…”�”}”(hjã'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jß'h´Máhjà'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÄ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jß'h´Má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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mãhj3'ubhÌ)�”}”(hŒnblock_invalidate_folio() is called when all or part of the folio has been invalidated by a truncate operation.”h]”hŒnblock_invalidate_folio() is called when all or part of the folio has been invalidated by a truncate operation.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mâhj3'ubhÌ)�”}”(hX/block_invalidate_folio() does not have to release all buffers, but it must ensure that no dirty buffer is left outside **offset** and that no I/O is underway against any of the blocks which are outside the truncation point. Because the caller is about to free (and possibly reuse) those blocks on-disk.”h]”(hŒwblock_invalidate_folio() does not have to release all buffers, but it must ensure that no dirty buffer is left outside ”…”�”}”(hj*(h²hh³Nh´Nubj))�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj2(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj*(ubhŒ® and that no I/O is underway against any of the blocks which are outside the truncation point. Because the caller is about to free (and possibly reuse) those blocks on-disk.”…”�”}”(hj*(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Måhj3'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒclean_bdev_aliases (C function)”Œc.clean_bdev_aliases”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒQvoid clean_bdev_aliases (struct block_device *bdev, sector_t block, sector_t len)”h]”j )�”}”(hŒPvoid clean_bdev_aliases(struct block_device *bdev, sector_t block, sector_t len)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjk(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg(h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MDubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz(h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjg(h²hh³jy(h´MDubj2)�”}”(hŒclean_bdev_aliases”h]”j8)�”}”(hŒclean_bdev_aliases”h]”hŒclean_bdev_aliases”…”�”}”(hjŒ(h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjˆ(ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjg(h²hh³jy(h´MDubjS)�”}”(hŒ9(struct block_device *bdev, sector_t block, sector_t len)”h]”(jY)�”}”(hŒstruct block_device *bdev”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj¨(h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj¤(ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ(h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¤(ubh)�”}”(hhh]”j8)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjÆ(h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjÃ(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jÈ(Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—jŽ(sbŒc.clean_bdev_aliases”†”asbuh1hhj¤(ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ(h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj¤(ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjô(h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¤(ubj8)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj¤(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj (ubjY)�”}”(hŒsector_t block”h]”(h)�”}”(hhh]”j8)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j)Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jâ(Œc.clean_bdev_aliases”†”asbuh1hhj)ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;)h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj)ubj8)�”}”(hŒblock”h]”hŒblock”…”�”}”(hjI)h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj (ubjY)�”}”(hŒ sector_t len”h]”(h)�”}”(hhh]”j8)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hje)h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjb)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jg)Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jâ(Œc.clean_bdev_aliases”†”asbuh1hhj^)ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ)h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj^)ubj8)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj‘)h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj^)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj (ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjg(h²hh³jy(h´MDubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjc(h²hh³jy(h´MDubah}”(h]”j^(ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³jy(h´MDhj`(h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ(clean a range of buffers in block device”•2Žh]”hŒ(clean a range of buffers in block device”…”�”}”(hj»)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MDhj¸)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj`(h²hh³jy(h´MDubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjÓ)jjÓ)j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hX**Parameters** ``struct block_device *bdev`` Block device to clean buffers in ``sector_t block`` Start of a range of blocks to clean ``sector_t len`` Number of blocks to clean **Description** We are taking a range of blocks for data and we don't want writeback of any buffer-cache aliases starting from return from this function and until the moment when something will explicitly mark the buffer dirty (hopefully that will not happen until we will free that block ;-) We don't even need to mark it not-uptodate - nobody can expect anything from a newly allocated buffer anyway. We used to use unmap_buffer() for such invalidation, but that was wrong. We definitely don't want to mark the alias unmapped, for example - it would confuse anyone who might pick it with bread() afterwards... Also.. Note that bforget() doesn't lock the buffer. So there can be writeout I/O going on against recently-freed buffers. We don't wait on that I/O in bforget() - it's more efficient to wait on the I/O only if we really need to. That happens here.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MHhj×)ubj?)�”}”(hhh]”(jD)�”}”(hŒ?``struct block_device *bdev`` Block device to clean buffers in ”h]”(jJ)�”}”(hŒ``struct block_device *bdev``”h]”jP)�”}”(hjü)h]”hŒstruct block_device *bdev”…”�”}”(hjþ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjú)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MEhjö)ubjf)�”}”(hhh]”hÌ)�”}”(hŒ Block device to clean buffers in”h]”hŒ Block device to clean buffers in”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j*h´MEhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjö)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j*h´MEhjó)ubjD)�”}”(hŒ7``sector_t block`` Start of a range of blocks to clean ”h]”(jJ)�”}”(hŒ``sector_t block``”h]”jP)�”}”(hj5*h]”hŒsector_t block”…”�”}”(hj7*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj3*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MFhj/*ubjf)�”}”(hhh]”hÌ)�”}”(hŒ#Start of a range of blocks to clean”h]”hŒ#Start of a range of blocks to clean”…”�”}”(hjN*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jJ*h´MFhjK*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj/*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jJ*h´MFhjó)ubjD)�”}”(hŒ+``sector_t len`` Number of blocks to clean ”h]”(jJ)�”}”(hŒ``sector_t len``”h]”jP)�”}”(hjn*h]”hŒ sector_t len”…”�”}”(hjp*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjl*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MGhjh*ubjf)�”}”(hhh]”hÌ)�”}”(hŒNumber of blocks to clean”h]”hŒNumber of blocks to clean”…”�”}”(hj‡*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jƒ*h´MGhj„*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjh*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jƒ*h´MGhjó)ubeh}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MIhj×)ubhÌ)�”}”(hXSWe are taking a range of blocks for data and we don't want writeback of any buffer-cache aliases starting from return from this function and until the moment when something will explicitly mark the buffer dirty (hopefully that will not happen until we will free that block ;-) We don't even need to mark it not-uptodate - nobody can expect anything from a newly allocated buffer anyway. We used to use unmap_buffer() for such invalidation, but that was wrong. We definitely don't want to mark the alias unmapped, for example - it would confuse anyone who might pick it with bread() afterwards...”h]”hXYWe are taking a range of blocks for data and we don’t want writeback of any buffer-cache aliases starting from return from this function and until the moment when something will explicitly mark the buffer dirty (hopefully that will not happen until we will free that block ;-) We don’t even need to mark it not-uptodate - nobody can expect anything from a newly allocated buffer anyway. We used to use unmap_buffer() for such invalidation, but that was wrong. We definitely don’t want to mark the alias unmapped, for example - it would confuse anyone who might pick it with bread() afterwards...”…”�”}”(hj¿*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MHhj×)ubhÌ)�”}”(hŒûAlso.. Note that bforget() doesn't lock the buffer. So there can be writeout I/O going on against recently-freed buffers. We don't wait on that I/O in bforget() - it's more efficient to wait on the I/O only if we really need to. That happens here.”h]”hXAlso.. Note that bforget() doesn’t lock the buffer. So there can be writeout I/O going on against recently-freed buffers. We don’t wait on that I/O in bforget() - it’s more efficient to wait on the I/O only if we really need to. That happens here.”…”�”}”(hjÎ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MQhj×)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ try_to_free_buffers (C function)”Œc.try_to_free_buffers”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ.bool try_to_free_buffers (struct folio *folio)”h]”j )�”}”(hŒ-bool try_to_free_buffers(struct folio *folio)”h]”(j)�”}”(hj) h]”hŒbool”…”�”}”(hjý*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjù*h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÉ ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjù*h²hh³j +h´MÉ ubj2)�”}”(hŒtry_to_free_buffers”h]”j8)�”}”(hŒtry_to_free_buffers”h]”hŒtry_to_free_buffers”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj+ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hjù*h²hh³j +h´MÉ ubjS)�”}”(hŒ(struct folio *folio)”h]”jY)�”}”(hŒstruct folio *folio”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj9+h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj5+ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF+h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj5+ubh)�”}”(hhh]”j8)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjW+h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjT+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jY+Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j+sbŒc.try_to_free_buffers”†”asbuh1hhj5+ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw+h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj5+ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj…+h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj5+ubj8)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj’+h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj5+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhj1+ubah}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhjù*h²hh³j +h´MÉ ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhjõ*h²hh³j +h´MÉ ubah}”(h]”jð*ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j +h´MÉ hjò*h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ'Release buffers attached to this folio.”h]”hŒ'Release buffers attached to this folio.”…”�”}”(hj¼+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÉ hj¹+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjò*h²hh³j +h´MÉ ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjÔ+jjÔ+j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hXÈ**Parameters** ``struct folio *folio`` The folio. **Description** If any buffers are in use (dirty, under writeback, elevated refcount), no buffers will be freed. If the folio is dirty but all the buffers are clean then we need to be sure to mark the folio clean as well. This is because the folio may be against a block device, and a later reattachment of buffers to a dirty folio will set *all* buffers dirty. Which would corrupt filesystem data on the same device. The same applies to regular filesystem folios: if all the buffers are clean then we set the folio clean and proceed. To do that, we require total exclusion from block_dirty_folio(). That is obtained with i_private_lock. Exclusion against try_to_free_buffers may be obtained by either locking the folio or by holding its mapping's i_private_lock. **Context** Process context. **folio** must be locked. Will not sleep. **Return** true if all buffers attached to this folio were freed.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÍ hjØ+ubj?)�”}”(hhh]”jD)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(jJ)�”}”(hŒ``struct folio *folio``”h]”jP)�”}”(hjý+h]”hŒstruct folio *folio”…”�”}”(hjÿ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjû+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÊ hj÷+ubjf)�”}”(hhh]”hÌ)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j,h´MÊ hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj÷+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j,h´MÊ hjô+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjØ+ubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hj8,h]”hŒ Description”…”�”}”(hj:,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj6,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÌ hjØ+ubhÌ)�”}”(hŒ`If any buffers are in use (dirty, under writeback, elevated refcount), no buffers will be freed.”h]”hŒ`If any buffers are in use (dirty, under writeback, elevated refcount), no buffers will be freed.”…”�”}”(hjN,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MË hjØ+ubhÌ)�”}”(hX2If the folio is dirty but all the buffers are clean then we need to be sure to mark the folio clean as well. This is because the folio may be against a block device, and a later reattachment of buffers to a dirty folio will set *all* buffers dirty. Which would corrupt filesystem data on the same device.”h]”(hŒåIf the folio is dirty but all the buffers are clean then we need to be sure to mark the folio clean as well. This is because the folio may be against a block device, and a later reattachment of buffers to a dirty folio will set ”…”�”}”(hj],h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*all*”h]”hŒall”…”�”}”(hjg,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1je,hj],ubhŒH buffers dirty. Which would corrupt filesystem data on the same device.”…”�”}”(hj],h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÎ hjØ+ubhÌ)�”}”(hŒÝThe same applies to regular filesystem folios: if all the buffers are clean then we set the folio clean and proceed. To do that, we require total exclusion from block_dirty_folio(). That is obtained with i_private_lock.”h]”hŒÝThe same applies to regular filesystem folios: if all the buffers are clean then we set the folio clean and proceed. To do that, we require total exclusion from block_dirty_folio(). That is obtained with i_private_lock.”…”�”}”(hj€,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÔ hjØ+ubhÌ)�”}”(hŒ}Exclusion against try_to_free_buffers may be obtained by either locking the folio or by holding its mapping's i_private_lock.”h]”hŒExclusion against try_to_free_buffers may be obtained by either locking the folio or by holding its mapping’s i_private_lock.”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÙ hjØ+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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MÜ hjØ+ubhÌ)�”}”(hŒhjú-ubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hjZ.h]”hŒ Description”…”�”}”(hj\.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjX.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mb hjú-ubhÌ)�”}”(hŒRReturn true if the buffer is up-to-date and false, with the buffer locked, if not.”h]”hŒRReturn true if the buffer is up-to-date and false, with the buffer locked, if not.”…”�”}”(hjp.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Ma hjú-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ__bh_read (C function)”Œ c.__bh_read”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒEint __bh_read (struct buffer_head *bh, blk_opf_t op_flags, bool wait)”h]”j )�”}”(hŒDint __bh_read(struct buffer_head *bh, blk_opf_t op_flags, bool wait)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjŸ.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›.h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mr ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®.h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj›.h²hh³j­.h´Mr ubj2)�”}”(hŒ __bh_read”h]”j8)�”}”(hŒ __bh_read”h]”hŒ __bh_read”…”�”}”(hjÀ.h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj¼.ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hj›.h²hh³j­.h´Mr ubjS)�”}”(hŒ7(struct buffer_head *bh, blk_opf_t op_flags, bool wait)”h]”(jY)�”}”(hŒstruct buffer_head *bh”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hjÜ.h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hjØ.ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé.h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjØ.ubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjú.h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj÷.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jü.Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—jÂ.sbŒ c.__bh_read”†”asbuh1hhjØ.ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjØ.ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hj(/h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjØ.ubj8)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj5/h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjØ.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjÔ.ubjY)�”}”(hŒblk_opf_t op_flags”h]”(h)�”}”(hhh]”j8)�”}”(hŒ blk_opf_t”h]”hŒ blk_opf_t”…”�”}”(hjQ/h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjN/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”jS/Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j/Œ c.__bh_read”†”asbuh1hhjJ/ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo/h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjJ/ubj8)�”}”(hŒop_flags”h]”hŒop_flags”…”�”}”(hj}/h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjJ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjÔ.ubjY)�”}”(hŒ bool wait”h]”(j)�”}”(hj) h]”hŒbool”…”�”}”(hj–/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’/ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£/h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj’/ubj8)�”}”(hŒwait”h]”hŒwait”…”�”}”(hj±/h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj’/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjÔ.ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj›.h²hh³j­.h´Mr ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj—.h²hh³j­.h´Mr ubah}”(h]”j’.ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j­.h´Mr hj”.h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒSubmit read for a locked buffer”h]”hŒSubmit read for a locked buffer”…”�”}”(hjÛ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mr hjØ/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj”.h²hh³j­.h´Mr ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jjó/jjó/j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hŒý**Parameters** ``struct buffer_head *bh`` struct buffer_head ``blk_opf_t op_flags`` appending REQ_OP_* flags besides REQ_OP_READ ``bool wait`` wait until reading finish **Description** Returns zero on success or don't wait, and -EIO on error.”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³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mv hj÷/ubj?)�”}”(hhh]”(jD)�”}”(hŒ.``struct buffer_head *bh`` struct buffer_head ”h]”(jJ)�”}”(hŒ``struct buffer_head *bh``”h]”jP)�”}”(hj0h]”hŒstruct buffer_head *bh”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Ms hj0ubjf)�”}”(hhh]”hÌ)�”}”(hŒstruct buffer_head”h]”hŒstruct buffer_head”…”�”}”(hj50h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j10h´Ms hj20ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j10h´Ms hj0ubjD)�”}”(hŒD``blk_opf_t op_flags`` appending REQ_OP_* flags besides REQ_OP_READ ”h]”(jJ)�”}”(hŒ``blk_opf_t op_flags``”h]”jP)�”}”(hjU0h]”hŒblk_opf_t op_flags”…”�”}”(hjW0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjS0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mt hjO0ubjf)�”}”(hhh]”hÌ)�”}”(hŒ,appending REQ_OP_* flags besides REQ_OP_READ”h]”hŒ,appending REQ_OP_* flags besides REQ_OP_READ”…”�”}”(hjn0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jj0h´Mt hjk0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjO0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jj0h´Mt hj0ubjD)�”}”(hŒ(``bool wait`` wait until reading finish ”h]”(jJ)�”}”(hŒ ``bool wait``”h]”jP)�”}”(hjŽ0h]”hŒ bool wait”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjŒ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mu hjˆ0ubjf)�”}”(hhh]”hÌ)�”}”(hŒwait until reading finish”h]”hŒwait until reading finish”…”�”}”(hj§0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j£0h´Mu hj¤0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjˆ0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j£0h´Mu hj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j>hj÷/ubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hjÉ0h]”hŒ Description”…”�”}”(hjË0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjÇ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mw hj÷/ubhÌ)�”}”(hŒ9Returns zero on success or don't wait, and -EIO on error.”h]”hŒ;Returns zero on success or don’t wait, and -EIO on error.”…”�”}”(hjß0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´Mv hj÷/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubhí)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hùŒ__bh_read_batch (C function)”Œc.__bh_read_batch”hNt”auh1hìhhÛh²hh³Nh´Nubhþ)�”}”(hhh]”(j)�”}”(hŒ]void __bh_read_batch (int nr, struct buffer_head *bhs[], blk_opf_t op_flags, bool force_lock)”h]”j )�”}”(hŒ\void __bh_read_batch(int nr, struct buffer_head *bhs[], blk_opf_t op_flags, bool force_lock)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj 1h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŠ ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj 1h²hh³j1h´MŠ ubj2)�”}”(hŒ__bh_read_batch”h]”j8)�”}”(hŒ__bh_read_batch”h]”hŒ__bh_read_batch”…”�”}”(hj/1h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj+1ubah}”(h]”h ]”(jKjLeh"]”h$]”h&]”jPjQuh1j1hj 1h²hh³j1h´MŠ ubjS)�”}”(hŒH(int nr, struct buffer_head *bhs[], blk_opf_t op_flags, bool force_lock)”h]”(jY)�”}”(hŒint nr”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjK1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG1ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY1h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjG1ubj8)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjg1h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjG1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjC1ubjY)�”}”(hŒstruct buffer_head *bhs[]”h]”(j_)�”}”(hjbh]”hŒstruct”…”�”}”(hj€1h²hh³Nh´Nubah}”(h]”h ]”jkah"]”h$]”h&]”uh1j^hj|1ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�1h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj|1ubh)�”}”(hhh]”j8)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjž1h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj›1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j 1Œmodname”NŒ classname”Nj›jž)�”}”j¡]”j¤)�”}”j—j11sbŒc.__bh_read_batch”†”asbuh1hhj|1ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾1h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj|1ubj¸)�”}”(hj»h]”hŒ*”…”�”}”(hjÌ1h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj|1ubj8)�”}”(hŒbhs”h]”hŒbhs”…”�”}”(hjÙ1h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj|1ubj¸)�”}”(hŒ[”h]”hŒ[”…”�”}”(hjç1h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj|1ubj¸)�”}”(hŒ]”h]”hŒ]”…”�”}”(hjõ1h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj|1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjC1ubjY)�”}”(hŒblk_opf_t op_flags”h]”(h)�”}”(hhh]”j8)�”}”(hŒ blk_opf_t”h]”hŒ blk_opf_t”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j•Œreftype”j—Œ reftarget”j2Œmodname”NŒ classname”Nj›jž)�”}”j¡]”jº1Œc.__bh_read_batch”†”asbuh1hhj 2ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/2h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hj 2ubj8)�”}”(hŒop_flags”h]”hŒop_flags”…”�”}”(hj=2h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hj 2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjC1ubjY)�”}”(hŒbool force_lock”h]”(j)�”}”(hj) h]”hŒbool”…”�”}”(hjV2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjR2ubj!)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc2h²hh³Nh´Nubah}”(h]”h ]”j-ah"]”h$]”h&]”uh1j hjR2ubj8)�”}”(hŒ force_lock”h]”hŒ force_lock”…”�”}”(hjq2h²hh³Nh´Nubah}”(h]”h ]”jDah"]”h$]”h&]”uh1j7hjR2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjPjQuh1jXhjC1ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQuh1jRhj 1h²hh³j1h´MŠ ubeh}”(h]”h ]”h"]”h$]”h&]”jPjQjéˆuh1jjêjëhj1h²hh³j1h´MŠ ubah}”(h]”j1ah ]”(jïjðeh"]”h$]”h&]”jôˆjõ)jöhuh1jh³j1h´MŠ hj1h²hubjø)�”}”(hhh]”hÌ)�”}”(hŒ+Submit read for a batch of unlocked buffers”h]”hŒ+Submit read for a batch of unlocked buffers”…”�”}”(hj›2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŠ hj˜2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj1h²hh³j1h´MŠ ubeh}”(h]”h ]”(j•Œfunction”eh"]”h$]”h&]”jj•jj³2jj³2j‰j‰j‰uh1hýh²hhhÛh³Nh´Nubj)�”}”(hX**Parameters** ``int nr`` entry number of the buffer batch ``struct buffer_head *bhs[]`` a batch of struct buffer_head ``blk_opf_t op_flags`` appending REQ_OP_* flags besides REQ_OP_READ ``bool force_lock`` force to get a lock on the buffer if set, otherwise drops any buffer that cannot lock. **Description** Returns zero on success or don't wait, and -EIO on error.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j))�”}”(hj½2h]”hŒ Parameters”…”�”}”(hj¿2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj»2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŽ hj·2ubj?)�”}”(hhh]”(jD)�”}”(hŒ,``int nr`` entry number of the buffer batch ”h]”(jJ)�”}”(hŒ ``int nr``”h]”jP)�”}”(hjÜ2h]”hŒint nr”…”�”}”(hjÞ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjÚ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M‹ hjÖ2ubjf)�”}”(hhh]”hÌ)�”}”(hŒ entry number of the buffer batch”h]”hŒ entry number of the buffer batch”…”�”}”(hjõ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jñ2h´M‹ hjò2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÖ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jñ2h´M‹ hjÓ2ubjD)�”}”(hŒ<``struct buffer_head *bhs[]`` a batch of struct buffer_head ”h]”(jJ)�”}”(hŒ``struct buffer_head *bhs[]``”h]”jP)�”}”(hj3h]”hŒstruct buffer_head *bhs[]”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŒ hj3ubjf)�”}”(hhh]”hÌ)�”}”(hŒa batch of struct buffer_head”h]”hŒa batch of struct buffer_head”…”�”}”(hj.3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j*3h´MŒ hj+3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³j*3h´MŒ hjÓ2ubjD)�”}”(hŒD``blk_opf_t op_flags`` appending REQ_OP_* flags besides REQ_OP_READ ”h]”(jJ)�”}”(hŒ``blk_opf_t op_flags``”h]”jP)�”}”(hjN3h]”hŒblk_opf_t op_flags”…”�”}”(hjP3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhjL3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M� hjH3ubjf)�”}”(hhh]”hÌ)�”}”(hŒ,appending REQ_OP_* flags besides REQ_OP_READ”h]”hŒ,appending REQ_OP_* flags besides REQ_OP_READ”…”�”}”(hjg3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jc3h´M� hjd3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjH3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jc3h´M� hjÓ2ubjD)�”}”(hŒk``bool force_lock`` force to get a lock on the buffer if set, otherwise drops any buffer that cannot lock. ”h]”(jJ)�”}”(hŒ``bool force_lock``”h]”jP)�”}”(hj‡3h]”hŒbool force_lock”…”�”}”(hj‰3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jOhj…3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jIh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M� hj�3ubjf)�”}”(hhh]”hÌ)�”}”(hŒVforce to get a lock on the buffer if set, otherwise drops any buffer that cannot lock.”h]”hŒVforce to get a lock on the buffer if set, otherwise drops any buffer that cannot lock.”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´MŽ hj�3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj�3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jCh³jœ3h´M� hjÓ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j>hj·2ubhÌ)�”}”(hŒ**Description**”h]”j))�”}”(hjÃ3h]”hŒ Description”…”�”}”(hjÅ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hjÁ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M‘ hj·2ubhÌ)�”}”(hŒ9Returns zero on success or don't wait, and -EIO on error.”h]”hŒ;Returns zero on success or don’t wait, and -EIO on error.”…”�”}”(hjÙ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒN/var/lib/git/docbuild/linux/Documentation/filesystems/buffer:11: ./fs/buffer.c”h´M� hj·2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÛh²hh³Nh´Nubeh}”(h]”Œ functions”ah ]”h"]”Œ functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubeh}”(h]”Œ buffer-heads”ah ]”h"]”Œ buffer heads”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"4Œ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ü3jù3jô3jñ3uŒ nametypes”}”(jü3‰jô3‰uh}”(jù3h·jñ3hÛhûjj jj´j¹j­j²j j j‡ jŒ jvj{j÷jüjxj}jùjþjªj¯j`jejðjõjƒjˆjjj™jžjþ!j"jº%j¿%j^(jc(jð*jõ*j-j-j’.j—.j1j1uŒ 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.