sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget+/translations/zh_CN/filesystems/api-summarymodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/filesystems/api-summarymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/filesystems/api-summarymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/filesystems/api-summarymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/filesystems/api-summarymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/pt_BR/filesystems/api-summarymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/filesystems/api-summarymodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hLinux Filesystems API summaryh]hLinux Filesystems API summary}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhE/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary.rsthKubh paragraph)}(hXThis section contains API-level documentation, mostly taken from the source code itself.h]hXThis section contains API-level documentation, mostly taken from the source code itself.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h The Linux VFSh]h The Linux VFS}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hThe Filesystem typesh]hThe Filesystem types}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlepositive_aop_returns (C enum)c.positive_aop_returnshNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(hpositive_aop_returnsh]hdesc_signature_line)}(henum positive_aop_returnsh](hdesc_sig_keyword)}(henumh]henum}(hj!hhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhKubhdesc_sig_space)}(h h]h }(hj3hhhNhNubah}(h]h ]wah"]h$]h&]uh1j1hjhhhj0hKubh desc_name)}(hpositive_aop_returnsh]h desc_sig_name)}(hjh]hpositive_aop_returns}(hjJhhhNhNubah}(h]h ]nah"]h$]h&]uh1jHhjDubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jBhjhhhj0hKubeh}(h]h ]h"]h$]h&]j`ja add_permalinkuh1jsphinx_line_type declaratorhjhhhj0hKubah}(h]j ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj0hKhjhhubh desc_content)}(hhh]h)}(h(aop return codes with specific semanticsh]h(aop return codes with specific semantics}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM,hjxhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj0hKubeh}(h]h ](cenumeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhhhNhNubh container)}(hX**Constants** ``AOP_WRITEPAGE_ACTIVATE`` Informs the caller that page writeback has completed, that the page is still locked, and should be considered active. The VM uses this hint to return the page to the active list -- it won't be a candidate for writeback again in the near future. Other callers must be careful to unlock the page if they get this return. Returned by writepage(); ``AOP_TRUNCATED_PAGE`` The AOP method that was handed a locked page has unlocked it and the page might have been truncated. The caller should back up to acquiring a new page and trying again. The aop will be taking reasonable precautions not to livelock. If the caller held a page reference, it should drop it before retrying. Returned by read_folio().h](h)}(h **Constants**h]hstrong)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM0hjubhdefinition_list)}(hhh](hdefinition_list_item)}(hXv``AOP_WRITEPAGE_ACTIVATE`` Informs the caller that page writeback has completed, that the page is still locked, and should be considered active. The VM uses this hint to return the page to the active list -- it won't be a candidate for writeback again in the near future. Other callers must be careful to unlock the page if they get this return. Returned by writepage(); h](hterm)}(h``AOP_WRITEPAGE_ACTIVATE``h]hliteral)}(hjh]hAOP_WRITEPAGE_ACTIVATE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM:hjubh definition)}(hhh]h)}(hXZInforms the caller that page writeback has completed, that the page is still locked, and should be considered active. The VM uses this hint to return the page to the active list -- it won't be a candidate for writeback again in the near future. Other callers must be careful to unlock the page if they get this return. Returned by writepage();h]hX\Informs the caller that page writeback has completed, that the page is still locked, and should be considered active. The VM uses this hint to return the page to the active list -- it won’t be a candidate for writeback again in the near future. Other callers must be careful to unlock the page if they get this return. Returned by writepage();}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubj)}(hXc``AOP_TRUNCATED_PAGE`` The AOP method that was handed a locked page has unlocked it and the page might have been truncated. The caller should back up to acquiring a new page and trying again. The aop will be taking reasonable precautions not to livelock. If the caller held a page reference, it should drop it before retrying. Returned by read_folio().h](j)}(h``AOP_TRUNCATED_PAGE``h]j)}(hj h]hAOP_TRUNCATED_PAGE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMBhjubj)}(hhh]h)}(hXLThe AOP method that was handed a locked page has unlocked it and the page might have been truncated. The caller should back up to acquiring a new page and trying again. The aop will be taking reasonable precautions not to livelock. If the caller held a page reference, it should drop it before retrying. Returned by read_folio().h]hXLThe AOP method that was handed a locked page has unlocked it and the page might have been truncated. The caller should back up to acquiring a new page and trying again. The aop will be taking reasonable precautions not to livelock. If the caller held a page reference, it should drop it before retrying. Returned by read_folio().}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM=hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMBhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMEhhhhubh)}(haddress_space_operation functions return these large constants to indicate special semantics to the caller. These are much larger than the bytes in a page to allow for functions that return the number of bytes operated on in a given page.h]haddress_space_operation functions return these large constants to indicate special semantics to the caller. These are much larger than the bytes in a page to allow for functions that return the number of bytes operated on in a given page.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM>hhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j address_space (C struct)c.address_spacehNtauh1hhhhhhNhNubj)}(hhh](j)}(h address_spaceh]j)}(hstruct address_spaceh](j )}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMFubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMFubjC)}(h address_spaceh]jI)}(hjh]h address_space}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMFubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMFubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMFhjhhubjw)}(hhh]h)}(h)Contents of a cacheable, mappable object.h]h)Contents of a cacheable, mappable object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMFubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhhhNhNubj)}(hX**Definition**:: struct address_space { struct inode *host; struct xarray i_pages; struct rw_semaphore invalidate_lock; gfp_t gfp_mask; atomic_t i_mmap_writable; struct rb_root_cached i_mmap; unsigned long nrpages; pgoff_t writeback_index; const struct address_space_operations *a_ops; unsigned long flags; errseq_t wb_err; spinlock_t i_private_lock; struct rw_semaphore i_mmap_rwsem; }; **Members** ``host`` Owner, either the inode or the block_device. ``i_pages`` Cached pages. ``invalidate_lock`` Guards coherency between page cache contents and file offset->disk block mappings in the filesystem during invalidates. It is also used to block modification of page cache contents through memory mappings. ``gfp_mask`` Memory allocation flags to use for allocating pages. ``i_mmap_writable`` Number of VM_SHARED, VM_MAYWRITE mappings. ``i_mmap`` Tree of private and shared mappings. ``nrpages`` Number of page entries, protected by the i_pages lock. ``writeback_index`` Writeback starts here. ``a_ops`` Methods. ``flags`` Error bits and flags (AS_*). ``wb_err`` The most recent error which has occurred. ``i_private_lock`` For use by the owner of the address_space. ``i_mmap_rwsem`` Protects **i_mmap** and **i_mmap_writable**.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubh literal_block)}(hXstruct address_space { struct inode *host; struct xarray i_pages; struct rw_semaphore invalidate_lock; gfp_t gfp_mask; atomic_t i_mmap_writable; struct rb_root_cached i_mmap; unsigned long nrpages; pgoff_t writeback_index; const struct address_space_operations *a_ops; unsigned long flags; errseq_t wb_err; spinlock_t i_private_lock; struct rw_semaphore i_mmap_rwsem; };h]hXstruct address_space { struct inode *host; struct xarray i_pages; struct rw_semaphore invalidate_lock; gfp_t gfp_mask; atomic_t i_mmap_writable; struct rb_root_cached i_mmap; unsigned long nrpages; pgoff_t writeback_index; const struct address_space_operations *a_ops; unsigned long flags; errseq_t wb_err; spinlock_t i_private_lock; struct rw_semaphore i_mmap_rwsem; };}hjsbah}(h]h ]h"]h$]h&]j`jauh1j hZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh](j)}(h6``host`` Owner, either the inode or the block_device. h](j)}(h``host``h]j)}(hj>h]hhost}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj8ubj)}(hhh]h)}(h,Owner, either the inode or the block_device.h]h,Owner, either the inode or the block_device.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhj5ubj)}(h``i_pages`` Cached pages. h](j)}(h ``i_pages``h]j)}(hjwh]hi_pages}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjqubj)}(hhh]h)}(h Cached pages.h]h Cached pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(h``invalidate_lock`` Guards coherency between page cache contents and file offset->disk block mappings in the filesystem during invalidates. It is also used to block modification of page cache contents through memory mappings. h](j)}(h``invalidate_lock``h]j)}(hjh]hinvalidate_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hGuards coherency between page cache contents and file offset->disk block mappings in the filesystem during invalidates. It is also used to block modification of page cache contents through memory mappings.h]hGuards coherency between page cache contents and file offset->disk block mappings in the filesystem during invalidates. It is also used to block modification of page cache contents through memory mappings.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(hB``gfp_mask`` Memory allocation flags to use for allocating pages. h](j)}(h ``gfp_mask``h]j)}(hjh]hgfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h4Memory allocation flags to use for allocating pages.h]h4Memory allocation flags to use for allocating pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(h?``i_mmap_writable`` Number of VM_SHARED, VM_MAYWRITE mappings. h](j)}(h``i_mmap_writable``h]j)}(hj#h]hi_mmap_writable}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h*Number of VM_SHARED, VM_MAYWRITE mappings.h]h*Number of VM_SHARED, VM_MAYWRITE mappings.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj5ubj)}(h0``i_mmap`` Tree of private and shared mappings. h](j)}(h ``i_mmap``h]j)}(hj\h]hi_mmap}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjVubj)}(hhh]h)}(h$Tree of private and shared mappings.h]h$Tree of private and shared mappings.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhj5ubj)}(hC``nrpages`` Number of page entries, protected by the i_pages lock. h](j)}(h ``nrpages``h]j)}(hjh]hnrpages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h6Number of page entries, protected by the i_pages lock.h]h6Number of page entries, protected by the i_pages lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(h+``writeback_index`` Writeback starts here. h](j)}(h``writeback_index``h]j)}(hjh]hwriteback_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hWriteback starts here.h]hWriteback starts here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(h``a_ops`` Methods. h](j)}(h ``a_ops``h]j)}(hjh]ha_ops}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hMethods.h]hMethods.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(h'``flags`` Error bits and flags (AS_*). h](j)}(h ``flags``h]j)}(hj@h]hflags}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj:ubj)}(hhh]h)}(hError bits and flags (AS_*).h]hError bits and flags (AS_*).}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj5ubj)}(h5``wb_err`` The most recent error which has occurred. h](j)}(h ``wb_err``h]j)}(hjyh]hwb_err}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjsubj)}(hhh]h)}(h)The most recent error which has occurred.h]h)The most recent error which has occurred.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(h>``i_private_lock`` For use by the owner of the address_space. h](j)}(h``i_private_lock``h]j)}(hjh]hi_private_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h*For use by the owner of the address_space.h]h*For use by the owner of the address_space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(h=``i_mmap_rwsem`` Protects **i_mmap** and **i_mmap_writable**.h](j)}(h``i_mmap_rwsem``h]j)}(hjh]h i_mmap_rwsem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h,Protects **i_mmap** and **i_mmap_writable**.h](h Protects }(hjhhhNhNubj)}(h **i_mmap**h]hi_mmap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**i_mmap_writable**h]hi_mmap_writable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j file_ra_state (C struct)c.file_ra_statehNtauh1hhhhhhNhNubj)}(hhh](j)}(h file_ra_stateh]j)}(hstruct file_ra_stateh](j )}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjehhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjehhhjvhMubjC)}(h file_ra_stateh]jI)}(hjch]h file_ra_state}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjehhhjvhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjahhhjvhMubah}(h]j\ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjvhMhj^hhubjw)}(hhh]h)}(hTrack a file's readahead state.h]h!Track a file’s readahead state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj^hhhjvhMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhhhNhNubj)}(hX***Definition**:: struct file_ra_state { pgoff_t start; unsigned int size; unsigned int async_size; unsigned int ra_pages; unsigned short order; unsigned short mmap_miss; loff_t prev_pos; }; **Members** ``start`` Where the most recent readahead started. ``size`` Number of pages read in the most recent readahead. ``async_size`` Numer of pages that were/are not needed immediately and so were/are genuinely "ahead". Start next readahead when the first of these pages is accessed. ``ra_pages`` Maximum size of a readahead request, copied from the bdi. ``order`` Preferred folio order used for most recent readahead. ``mmap_miss`` How many mmap accesses missed in the page cache. ``prev_pos`` The last byte in the most recent read request.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj )}(hstruct file_ra_state { pgoff_t start; unsigned int size; unsigned int async_size; unsigned int ra_pages; unsigned short order; unsigned short mmap_miss; loff_t prev_pos; };h]hstruct file_ra_state { pgoff_t start; unsigned int size; unsigned int async_size; unsigned int ra_pages; unsigned short order; unsigned short mmap_miss; loff_t prev_pos; };}hjsbah}(h]h ]h"]h$]h&]j`jauh1j hZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh](j)}(h3``start`` Where the most recent readahead started. h](j)}(h ``start``h]j)}(hjh]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h(Where the most recent readahead started.h]h(Where the most recent readahead started.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubj)}(h<``size`` Number of pages read in the most recent readahead. h](j)}(h``size``h]j)}(hjQh]hsize}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjKubj)}(hhh]h)}(h2Number of pages read in the most recent readahead.h]h2Number of pages read in the most recent readahead.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubj)}(h``async_size`` Numer of pages that were/are not needed immediately and so were/are genuinely "ahead". Start next readahead when the first of these pages is accessed. h](j)}(h``async_size``h]j)}(hjh]h async_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hNumer of pages that were/are not needed immediately and so were/are genuinely "ahead". Start next readahead when the first of these pages is accessed.h]hNumer of pages that were/are not needed immediately and so were/are genuinely “ahead”. Start next readahead when the first of these pages is accessed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``ra_pages`` Maximum size of a readahead request, copied from the bdi. h](j)}(h ``ra_pages``h]j)}(hjh]hra_pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h9Maximum size of a readahead request, copied from the bdi.h]h9Maximum size of a readahead request, copied from the bdi.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``order`` Preferred folio order used for most recent readahead. h](j)}(h ``order``h]j)}(hjh]horder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h5Preferred folio order used for most recent readahead.h]h5Preferred folio order used for most recent readahead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h?``mmap_miss`` How many mmap accesses missed in the page cache. h](j)}(h ``mmap_miss``h]j)}(hj6h]h mmap_miss}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj0ubj)}(hhh]h)}(h0How many mmap accesses missed in the page cache.h]h0How many mmap accesses missed in the page cache.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjubj)}(h;``prev_pos`` The last byte in the most recent read request.h](j)}(h ``prev_pos``h]j)}(hjoh]hprev_pos}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjiubj)}(hhh]h)}(h.The last byte in the most recent read request.h]h.The last byte in the most recent read request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhhhhubh)}(hhWhen this structure is passed to ->readahead(), the "most recent" readahead means the current readahead.h]hlWhen this structure is passed to ->readahead(), the “most recent” readahead means the current readahead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j file (C struct)c.filehNtauh1hhhhhhNhNubj)}(hhh](j)}(hfileh]j)}(h struct fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hfileh]jI)}(hjh]hfile}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hRepresents a fileh]hRepresents a file}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj/ hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjJ jjJ jjjuh1jhhhhhNhNubj)}(hX**Definition**:: struct file { spinlock_t f_lock; fmode_t f_mode; const struct file_operations *f_op; struct address_space *f_mapping; void *private_data; struct inode *f_inode; unsigned int f_flags; unsigned int f_iocb_flags; const struct cred *f_cred; struct fown_struct *f_owner; union { const struct path f_path; struct path __f_path; }; union { struct mutex f_pos_lock; u64 f_pipe; }; loff_t f_pos; #ifdef CONFIG_SECURITY; void *f_security; #endif; errseq_t f_wb_err; errseq_t f_sb_err; #ifdef CONFIG_EPOLL; struct hlist_head *f_ep; #endif; union { struct callback_head f_task_work; struct llist_node f_llist; struct file_ra_state f_ra; freeptr_t f_freeptr; }; file_ref_t f_ref; }; **Members** ``f_lock`` Protects f_ep, f_flags. Must not be taken from IRQ context. ``f_mode`` FMODE_* flags often used in hotpaths ``f_op`` file operations ``f_mapping`` Contents of a cacheable, mappable object. ``private_data`` filesystem or driver specific data ``f_inode`` cached inode ``f_flags`` file flags ``f_iocb_flags`` iocb flags ``f_cred`` stashed credentials of creator/opener ``f_owner`` file owner ``{unnamed_union}`` anonymous ``f_path`` path of the file ``__f_path`` writable alias for **f_path**; *ONLY* for core VFS and only before the file gets open ``{unnamed_union}`` anonymous ``f_pos_lock`` lock protecting file position ``f_pipe`` specific to pipes ``f_pos`` file position ``f_security`` LSM security context of this file ``f_wb_err`` writeback error ``f_sb_err`` per sb writeback errors ``f_ep`` link of all epoll hooks for this file ``{unnamed_union}`` anonymous ``f_task_work`` task work entry point ``f_llist`` work queue entrypoint ``f_ra`` file's readahead state ``f_freeptr`` Pointer used by SLAB_TYPESAFE_BY_RCU file cache (don't touch.) ``f_ref`` reference counth](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubh:}(hjR hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjN ubj )}(hXstruct file { spinlock_t f_lock; fmode_t f_mode; const struct file_operations *f_op; struct address_space *f_mapping; void *private_data; struct inode *f_inode; unsigned int f_flags; unsigned int f_iocb_flags; const struct cred *f_cred; struct fown_struct *f_owner; union { const struct path f_path; struct path __f_path; }; union { struct mutex f_pos_lock; u64 f_pipe; }; loff_t f_pos; #ifdef CONFIG_SECURITY; void *f_security; #endif; errseq_t f_wb_err; errseq_t f_sb_err; #ifdef CONFIG_EPOLL; struct hlist_head *f_ep; #endif; union { struct callback_head f_task_work; struct llist_node f_llist; struct file_ra_state f_ra; freeptr_t f_freeptr; }; file_ref_t f_ref; };h]hXstruct file { spinlock_t f_lock; fmode_t f_mode; const struct file_operations *f_op; struct address_space *f_mapping; void *private_data; struct inode *f_inode; unsigned int f_flags; unsigned int f_iocb_flags; const struct cred *f_cred; struct fown_struct *f_owner; union { const struct path f_path; struct path __f_path; }; union { struct mutex f_pos_lock; u64 f_pipe; }; loff_t f_pos; #ifdef CONFIG_SECURITY; void *f_security; #endif; errseq_t f_wb_err; errseq_t f_sb_err; #ifdef CONFIG_EPOLL; struct hlist_head *f_ep; #endif; union { struct callback_head f_task_work; struct llist_node f_llist; struct file_ra_state f_ra; freeptr_t f_freeptr; }; file_ref_t f_ref; };}hjo sbah}(h]h ]h"]h$]h&]j`jauh1j hZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjN ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjN ubj)}(hhh](j)}(hG``f_lock`` Protects f_ep, f_flags. Must not be taken from IRQ context. h](j)}(h ``f_lock``h]j)}(hj h]hf_lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(h;Protects f_ep, f_flags. Must not be taken from IRQ context.h]h;Protects f_ep, f_flags. Must not be taken from IRQ context.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h0``f_mode`` FMODE_* flags often used in hotpaths h](j)}(h ``f_mode``h]j)}(hj h]hf_mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(h$FMODE_* flags often used in hotpathsh]h$FMODE_* flags often used in hotpaths}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``f_op`` file operations h](j)}(h``f_op``h]j)}(hj h]hf_op}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(hfile operationsh]hfile operations}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj& hMhj' ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj& hMhj ubj)}(h8``f_mapping`` Contents of a cacheable, mappable object. h](j)}(h ``f_mapping``h]j)}(hjJ h]h f_mapping}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjD ubj)}(hhh]h)}(h)Contents of a cacheable, mappable object.h]h)Contents of a cacheable, mappable object.}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ hMhj` ubah}(h]h ]h"]h$]h&]uh1jhjD ubeh}(h]h ]h"]h$]h&]uh1jhj_ hMhj ubj)}(h4``private_data`` filesystem or driver specific data h](j)}(h``private_data``h]j)}(hj h]h private_data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj} ubj)}(hhh]h)}(h"filesystem or driver specific datah]h"filesystem or driver specific data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj} ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``f_inode`` cached inode h](j)}(h ``f_inode``h]j)}(hj h]hf_inode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(h cached inodeh]h cached inode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``f_flags`` file flags h](j)}(h ``f_flags``h]j)}(hj h]hf_flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(h file flagsh]h file flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``f_iocb_flags`` iocb flags h](j)}(h``f_iocb_flags``h]j)}(hj. h]h f_iocb_flags}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj, ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj( ubj)}(hhh]h)}(h iocb flagsh]h iocb flags}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC hMhjD ubah}(h]h ]h"]h$]h&]uh1jhj( ubeh}(h]h ]h"]h$]h&]uh1jhjC hMhj ubj)}(h1``f_cred`` stashed credentials of creator/opener h](j)}(h ``f_cred``h]j)}(hjg h]hf_cred}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhja ubj)}(hhh]h)}(h%stashed credentials of creator/openerh]h%stashed credentials of creator/opener}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj| hMhj} ubah}(h]h ]h"]h$]h&]uh1jhja ubeh}(h]h ]h"]h$]h&]uh1jhj| hMhj ubj)}(h``f_owner`` file owner h](j)}(h ``f_owner``h]j)}(hj h]hf_owner}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(h file ownerh]h file owner}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj h]h{unnamed_union}}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhKhj ubj)}(hhh]h)}(h anonymoush]h anonymous}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h``f_path`` path of the file h](j)}(h ``f_path``h]j)}(hj h]hf_path}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(hpath of the fileh]hpath of the file}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj' hMhj( ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj' hMhj ubj)}(hc``__f_path`` writable alias for **f_path**; *ONLY* for core VFS and only before the file gets open h](j)}(h ``__f_path``h]j)}(hjK h]h__f_path}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjE ubj)}(hhh]h)}(hUwritable alias for **f_path**; *ONLY* for core VFS and only before the file gets openh](hwritable alias for }(hjd hhhNhNubj)}(h **f_path**h]hf_path}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd ubh; }(hjd hhhNhNubhemphasis)}(h*ONLY*h]hONLY}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~ hjd ubh0 for core VFS and only before the file gets open}(hjd hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhja ubah}(h]h ]h"]h$]h&]uh1jhjE ubeh}(h]h ]h"]h$]h&]uh1jhj` hMhj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj h]h{unnamed_union}}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhKhj ubj)}(hhh]h)}(h anonymoush]h anonymous}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h-``f_pos_lock`` lock protecting file position h](j)}(h``f_pos_lock``h]j)}(hj h]h f_pos_lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(hlock protecting file positionh]hlock protecting file position}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``f_pipe`` specific to pipes h](j)}(h ``f_pipe``h]j)}(hj h]hf_pipe}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(hspecific to pipesh]hspecific to pipes}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 hMhj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 hMhj ubj)}(h``f_pos`` file position h](j)}(h ``f_pos``h]j)}(hjV h]hf_pos}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjP ubj)}(hhh]h)}(h file positionh]h file position}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk hMhjl ubah}(h]h ]h"]h$]h&]uh1jhjP ubeh}(h]h ]h"]h$]h&]uh1jhjk hMhj ubj)}(h1``f_security`` LSM security context of this file h](j)}(h``f_security``h]j)}(hj h]h f_security}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(h!LSM security context of this fileh]h!LSM security context of this file}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``f_wb_err`` writeback error h](j)}(h ``f_wb_err``h]j)}(hj h]hf_wb_err}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(hwriteback errorh]hwriteback error}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h%``f_sb_err`` per sb writeback errors h](j)}(h ``f_sb_err``h]j)}(hjh]hf_sb_err}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(hper sb writeback errorsh]hper sb writeback errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h/``f_ep`` link of all epoll hooks for this file h](j)}(h``f_ep``h]j)}(hj:h]hf_ep}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj4ubj)}(hhh]h)}(h%link of all epoll hooks for this fileh]h%link of all epoll hooks for this file}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjsh]h{unnamed_union}}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhKhjmubj)}(hhh]h)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(h&``f_task_work`` task work entry point h](j)}(h``f_task_work``h]j)}(hjh]h f_task_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(htask work entry pointh]htask work entry point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h"``f_llist`` work queue entrypoint h](j)}(h ``f_llist``h]j)}(hjh]hf_llist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hwork queue entrypointh]hwork queue entrypoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h ``f_ra`` file's readahead state h](j)}(h``f_ra``h]j)}(hjh]hf_ra}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hfile's readahead stateh]hfile’s readahead state}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj ubj)}(hM``f_freeptr`` Pointer used by SLAB_TYPESAFE_BY_RCU file cache (don't touch.) h](j)}(h ``f_freeptr``h]j)}(hjWh]h f_freeptr}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjQubj)}(hhh]h)}(h>Pointer used by SLAB_TYPESAFE_BY_RCU file cache (don't touch.)h]h@Pointer used by SLAB_TYPESAFE_BY_RCU file cache (don’t touch.)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhj ubj)}(h``f_ref`` reference counth](j)}(h ``f_ref``h]j)}(hjh]hf_ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hreference counth]hreference count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjN ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j i_uid_into_vfsuid (C function)c.i_uid_into_vfsuidhNtauh1hhhhhhNhNubj)}(hhh](j)}(hOvfsuid_t i_uid_into_vfsuid (struct mnt_idmap *idmap, const struct inode *inode)h]j)}(hNvfsuid_t i_uid_into_vfsuid(struct mnt_idmap *idmap, const struct inode *inode)h](h)}(hhh]jI)}(hvfsuid_th]hvfsuid_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}ji_uid_into_vfsuidsbc.i_uid_into_vfsuidasbuh1hhjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hi_uid_into_vfsuidh]jI)}(hjh]hi_uid_into_vfsuid}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubhdesc_parameterlist)}(h4(struct mnt_idmap *idmap, const struct inode *inode)h](hdesc_parameter)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjDubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj )}j ]jc.i_uid_into_vfsuidasbuh1hhjDubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjDubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj>ubjC)}(hconst struct inode *inodeh](j )}(hconsth]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.i_uid_into_vfsuidasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj>ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h3map an inode's i_uid down according to an idmappingh]h5map an inode’s i_uid down according to an idmapping}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjVhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhhhNhNubj)}(hX **Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``const struct inode *inode`` inode to map **Return** whe inode's i_uid mapped down according to **idmap**. If the inode's i_uid has no mapping INVALID_VFSUID is returned.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjuubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``const struct inode *inode`` inode to map h](j)}(h``const struct inode *inode``h]j)}(hjh]hconst struct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h inode to maph]h inode to map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjuubh)}(huwhe inode's i_uid mapped down according to **idmap**. If the inode's i_uid has no mapping INVALID_VFSUID is returned.h](h-whe inode’s i_uid mapped down according to }(hj$hhhNhNubj)}(h **idmap**h]hidmap}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubhC. If the inode’s i_uid has no mapping INVALID_VFSUID is returned.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j i_uid_needs_update (C function)c.i_uid_needs_updatehNtauh1hhhhhhNhNubj)}(hhh](j)}(hfbool i_uid_needs_update (struct mnt_idmap *idmap, const struct iattr *attr, const struct inode *inode)h]j)}(hebool i_uid_needs_update(struct mnt_idmap *idmap, const struct iattr *attr, const struct inode *inode)h](hdesc_sig_keyword_type)}(hboolh]hbool}(hjghhhNhNubah}(h]h ]ktah"]h$]h&]uh1jehjahhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjahhhjvhMubjC)}(hi_uid_needs_updateh]jI)}(hi_uid_needs_updateh]hi_uid_needs_update}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjahhhjvhMubj=)}(hN(struct mnt_idmap *idmap, const struct iattr *attr, const struct inode *inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.i_uid_needs_updateasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hiattrh]hiattr}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj )}j ]jc.i_uid_needs_updateasbuh1hhjubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.i_uid_needs_updateasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjahhhjvhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj]hhhjvhMubah}(h]jXah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjvhMhjZhhubjw)}(hhh]h)}(h/check whether inode's i_uid needs to be updatedh]h1check whether inode’s i_uid needs to be updated}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jvhjZhhhjvhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``const struct iattr *attr`` the new attributes of **inode** ``const struct inode *inode`` the inode to update **Description** Check whether the $inode's i_uid field needs to be updated taking idmapped mounts into account if the filesystem supports it. **Return** true if **inode**'s i_uid field needs to be updated, false if not.h](h)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjZubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjyubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h=``const struct iattr *attr`` the new attributes of **inode** h](j)}(h``const struct iattr *attr``h]j)}(hjh]hconst struct iattr *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hthe new attributes of **inode**h](hthe new attributes of }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h2``const struct inode *inode`` the inode to update h](j)}(h``const struct inode *inode``h]j)}(hjh]hconst struct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hthe inode to updateh]hthe inode to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjZubh)}(h**Description**h]j)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjZubh)}(h}Check whether the $inode's i_uid field needs to be updated taking idmapped mounts into account if the filesystem supports it.h]hCheck whether the $inode’s i_uid field needs to be updated taking idmapped mounts into account if the filesystem supports it.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjZubh)}(h **Return**h]j)}(hjah]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjZubh)}(hBtrue if **inode**'s i_uid field needs to be updated, false if not.h](htrue if }(hjwhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh3’s i_uid field needs to be updated, false if not.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j i_uid_update (C function)c.i_uid_updatehNtauh1hhhhhhNhNubj)}(hhh](j)}(hZvoid i_uid_update (struct mnt_idmap *idmap, const struct iattr *attr, struct inode *inode)h]j)}(hYvoid i_uid_update(struct mnt_idmap *idmap, const struct iattr *attr, struct inode *inode)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h i_uid_updateh]jI)}(h i_uid_updateh]h i_uid_update}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hH(struct mnt_idmap *idmap, const struct iattr *attr, struct inode *inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.i_uid_updateasbuh1hhjubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hjghhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj2)}(h h]h }(hjthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcubh)}(hhh]jI)}(hiattrh]hiattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j/c.i_uid_updateasbuh1hhjcubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjI)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j/c.i_uid_updateasbuh1hhjubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hupdate **inode**'s i_uid fieldh](hupdate }(hjshhhNhNubj)}(h **inode**h]hinode}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh’s i_uid field}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjphhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhhhNhNubj)}(hXG**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``const struct iattr *attr`` the new attributes of **inode** ``struct inode *inode`` the inode to update **Description** Safely update **inode**'s i_uid field translating the vfsuid of any idmapped mount into the filesystem kuid.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``const struct iattr *attr`` the new attributes of **inode** h](j)}(h``const struct iattr *attr``h]j)}(hjh]hconst struct iattr *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hthe new attributes of **inode**h](hthe new attributes of }(hjhhhNhNubj)}(h **inode**h]hinode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``struct inode *inode`` the inode to update h](j)}(h``struct inode *inode``h]j)}(hjFh]hstruct inode *inode}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj@ubj)}(hhh]h)}(hthe inode to updateh]hthe inode to update}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubh)}(hlSafely update **inode**'s i_uid field translating the vfsuid of any idmapped mount into the filesystem kuid.h](hSafely update }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhW’s i_uid field translating the vfsuid of any idmapped mount into the filesystem kuid.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j i_gid_into_vfsgid (C function)c.i_gid_into_vfsgidhNtauh1hhhhhhNhNubj)}(hhh](j)}(hOvfsgid_t i_gid_into_vfsgid (struct mnt_idmap *idmap, const struct inode *inode)h]j)}(hNvfsgid_t i_gid_into_vfsgid(struct mnt_idmap *idmap, const struct inode *inode)h](h)}(hhh]jI)}(hvfsgid_th]hvfsgid_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}ji_gid_into_vfsgidsbc.i_gid_into_vfsgidasbuh1hhjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hi_gid_into_vfsgidh]jI)}(hjh]hi_gid_into_vfsgid}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h4(struct mnt_idmap *idmap, const struct inode *inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj )}j ]jc.i_gid_into_vfsgidasbuh1hhj&ubj2)}(h h]h }(hjfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj"ubjC)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.i_gid_into_vfsgidasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj"ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h3map an inode's i_gid down according to an idmappingh]h5map an inode’s i_gid down according to an idmapping}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1jhhhhhNhNubj)}(hX **Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``const struct inode *inode`` inode to map **Return** the inode's i_gid mapped down according to **idmap**. If the inode's i_gid has no mapping INVALID_VFSGID is returned.h](h)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjRubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjwh]hstruct mnt_idmap *idmap}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjqubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(h+``const struct inode *inode`` inode to map h](j)}(h``const struct inode *inode``h]j)}(hjh]hconst struct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(h inode to maph]h inode to map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubeh}(h]h ]h"]h$]h&]uh1jhjRubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjRubh)}(huthe inode's i_gid mapped down according to **idmap**. If the inode's i_gid has no mapping INVALID_VFSGID is returned.h](h-the inode’s i_gid mapped down according to }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC. If the inode’s i_gid has no mapping INVALID_VFSGID is returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j i_gid_needs_update (C function)c.i_gid_needs_updatehNtauh1hhhhhhNhNubj)}(hhh](j)}(hfbool i_gid_needs_update (struct mnt_idmap *idmap, const struct iattr *attr, const struct inode *inode)h]j)}(hebool i_gid_needs_update(struct mnt_idmap *idmap, const struct iattr *attr, const struct inode *inode)h](jf)}(hjih]hbool}(hjBhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj>hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>hhhjOhMubjC)}(hi_gid_needs_updateh]jI)}(hi_gid_needs_updateh]hi_gid_needs_update}(hjbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj>hhhjOhMubj=)}(hN(struct mnt_idmap *idmap, const struct iattr *attr, const struct inode *inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjdsbc.i_gid_needs_updateasbuh1hhjzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hiattrh]hiattr}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj )}j ]jc.i_gid_needs_updateasbuh1hhjubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hattrh]hattr}(hjbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hj{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.i_gid_needs_updateasbuh1hhjwubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubeh}(h]h ]h"]h$]h&]j`jauh1j<hj>hhhjOhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj:hhhjOhMubah}(h]j5ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjOhMhj7hhubjw)}(hhh]h)}(h/check whether inode's i_gid needs to be updatedh]h1check whether inode’s i_gid needs to be updated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj7hhhjOhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``const struct iattr *attr`` the new attributes of **inode** ``const struct inode *inode`` the inode to update **Description** Check whether the $inode's i_gid field needs to be updated taking idmapped mounts into account if the filesystem supports it. **Return** true if **inode**'s i_gid field needs to be updated, false if not.h](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj3ubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjXh]hstruct mnt_idmap *idmap}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjRubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubj)}(h=``const struct iattr *attr`` the new attributes of **inode** h](j)}(h``const struct iattr *attr``h]j)}(hjh]hconst struct iattr *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hthe new attributes of **inode**h](hthe new attributes of }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjOubj)}(h2``const struct inode *inode`` the inode to update h](j)}(h``const struct inode *inode``h]j)}(hjh]hconst struct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubj)}(hhh]h)}(hthe inode to updateh]hthe inode to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj3ubh)}(h}Check whether the $inode's i_gid field needs to be updated taking idmapped mounts into account if the filesystem supports it.h]hCheck whether the $inode’s i_gid field needs to be updated taking idmapped mounts into account if the filesystem supports it.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj3ubh)}(h **Return**h]j)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj3ubh)}(hBtrue if **inode**'s i_gid field needs to be updated, false if not.h](htrue if }(hjPhhhNhNubj)}(h **inode**h]hinode}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh3’s i_gid field needs to be updated, false if not.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j i_gid_update (C function)c.i_gid_updatehNtauh1hhhhhhNhNubj)}(hhh](j)}(hZvoid i_gid_update (struct mnt_idmap *idmap, const struct iattr *attr, struct inode *inode)h]j)}(hYvoid i_gid_update(struct mnt_idmap *idmap, const struct iattr *attr, struct inode *inode)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h i_gid_updateh]jI)}(h i_gid_updateh]h i_gid_update}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hH(struct mnt_idmap *idmap, const struct iattr *attr, struct inode *inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.i_gid_updateasbuh1hhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hj@hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj<ubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubj )}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj<ubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubh)}(hhh]jI)}(hiattrh]hiattr}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj )}j ]jc.i_gid_updateasbuh1hhj<ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjI)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.i_gid_updateasbuh1hhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj" hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hupdate **inode**'s i_gid fieldh](hupdate }(hjL hhhNhNubj)}(h **inode**h]hinode}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL ubh’s i_gid field}(hjL hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjI hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjv jjv jjjuh1jhhhhhNhNubj)}(hXG**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``const struct iattr *attr`` the new attributes of **inode** ``struct inode *inode`` the inode to update **Description** Safely update **inode**'s i_gid field translating the vfsgid of any idmapped mount into the filesystem kgid.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjz ubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj h]hstruct mnt_idmap *idmap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h=``const struct iattr *attr`` the new attributes of **inode** h](j)}(h``const struct iattr *attr``h]j)}(hj h]hconst struct iattr *attr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj ubj)}(hhh]h)}(hthe new attributes of **inode**h](hthe new attributes of }(hj hhhNhNubj)}(h **inode**h]hinode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h,``struct inode *inode`` the inode to update h](j)}(h``struct inode *inode``h]j)}(hj!h]hstruct inode *inode}(hj!!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj!ubj)}(hhh]h)}(hthe inode to updateh]hthe inode to update}(hj8!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4!hMhj5!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj4!hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjz ubh)}(h**Description**h]j)}(hjZ!h]h Description}(hj\!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX!ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjz ubh)}(hlSafely update **inode**'s i_gid field translating the vfsgid of any idmapped mount into the filesystem kgid.h](hSafely update }(hjp!hhhNhNubj)}(h **inode**h]hinode}(hjx!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp!ubhW’s i_gid field translating the vfsgid of any idmapped mount into the filesystem kgid.}(hjp!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjz ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_fsuid_set (C function)c.inode_fsuid_sethNtauh1hhhhhhNhNubj)}(hhh](j)}(hCvoid inode_fsuid_set (struct inode *inode, struct mnt_idmap *idmap)h]j)}(hBvoid inode_fsuid_set(struct inode *inode, struct mnt_idmap *idmap)h](jf)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj!hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!hhhj!hMubjC)}(hinode_fsuid_seth]jI)}(hinode_fsuid_seth]hinode_fsuid_set}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj!hhhj!hMubj=)}(h.(struct inode *inode, struct mnt_idmap *idmap)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!ubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubh)}(hhh]jI)}(hinodeh]hinode}(hj "hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj "ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj )}j ]j)}jj!sbc.inode_fsuid_setasbuh1hhj!ubj2)}(h h]h }(hj,"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubj)}(hjh]h*}(hj:"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjI)}(hinodeh]hinode}(hjG"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!ubjC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj`"hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\"ubj2)}(h h]h }(hjm"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\"ubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj~"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj )}j ]j("c.inode_fsuid_setasbuh1hhj\"ubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\"ubjI)}(hidmaph]hidmap}(hj"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\"ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj!hhhj!hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj!hhhj!hMubah}(h]j!ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj!hMhj!hhubjw)}(hhh]h)}(h1initialize inode's i_uid field with callers fsuidh]h3initialize inode’s i_uid field with callers fsuid}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1jvhj!hhhj!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jhhhhhNhNubj)}(hX'**Parameters** ``struct inode *inode`` inode to initialize ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from **Description** Initialize the i_uid field of **inode**. If the inode was found/created via an idmapped mount map the caller's fsuid according to **idmap**.h](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj"ubj)}(hhh](j)}(h,``struct inode *inode`` inode to initialize h](j)}(h``struct inode *inode``h]j)}(hj"#h]hstruct inode *inode}(hj$#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj #ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj#ubj)}(hhh]h)}(hinode to initializeh]hinode to initialize}(hj;#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7#hMhj8#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj7#hMhj#ubj)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj[#h]hstruct mnt_idmap *idmap}(hj]#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjU#ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjt#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp#hMhjq#ubah}(h]h ]h"]h$]h&]uh1jhjU#ubeh}(h]h ]h"]h$]h&]uh1jhjp#hMhj#ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj"ubh)}(hInitialize the i_uid field of **inode**. If the inode was found/created via an idmapped mount map the caller's fsuid according to **idmap**.h](hInitialize the i_uid field of }(hj#hhhNhNubj)}(h **inode**h]hinode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh]. If the inode was found/created via an idmapped mount map the caller’s fsuid according to }(hj#hhhNhNubj)}(h **idmap**h]hidmap}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_fsgid_set (C function)c.inode_fsgid_sethNtauh1hhhhhhNhNubj)}(hhh](j)}(hCvoid inode_fsgid_set (struct inode *inode, struct mnt_idmap *idmap)h]j)}(hBvoid inode_fsgid_set(struct inode *inode, struct mnt_idmap *idmap)h](jf)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj#hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj#hhhj $hMubjC)}(hinode_fsgid_seth]jI)}(hinode_fsgid_seth]hinode_fsgid_set}(hj $hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj#hhhj $hMubj=)}(h.(struct inode *inode, struct mnt_idmap *idmap)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj<$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj8$ubj2)}(h h]h }(hjI$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8$ubh)}(hhh]jI)}(hinodeh]hinode}(hjZ$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjW$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\$modnameN classnameNjj )}j ]j)}jj"$sbc.inode_fsgid_setasbuh1hhj8$ubj2)}(h h]h }(hjz$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8$ubjI)}(hinodeh]hinode}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8$ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4$ubjC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj$ubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj )}j ]jv$c.inode_fsgid_setasbuh1hhj$ubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjI)}(hidmaph]hidmap}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4$ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj#hhhj $hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj#hhhj $hMubah}(h]j#ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj $hMhj#hhubjw)}(hhh]h)}(h1initialize inode's i_gid field with callers fsgidh]h3initialize inode’s i_gid field with callers fsgid}(hj/%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj,%hhubah}(h]h ]h"]h$]h&]uh1jvhj#hhhj $hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjG%jjG%jjjuh1jhhhhhNhNubj)}(hX'**Parameters** ``struct inode *inode`` inode to initialize ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from **Description** Initialize the i_gid field of **inode**. If the inode was found/created via an idmapped mount map the caller's fsgid according to **idmap**.h](h)}(h**Parameters**h]j)}(hjQ%h]h Parameters}(hjS%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO%ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjK%ubj)}(hhh](j)}(h,``struct inode *inode`` inode to initialize h](j)}(h``struct inode *inode``h]j)}(hjp%h]hstruct inode *inode}(hjr%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn%ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjj%ubj)}(hhh]h)}(hinode to initializeh]hinode to initialize}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhjj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjg%ubj)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj%h]hstruct mnt_idmap *idmap}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj%ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjg%ubeh}(h]h ]h"]h$]h&]uh1jhjK%ubh)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjK%ubh)}(hInitialize the i_gid field of **inode**. If the inode was found/created via an idmapped mount map the caller's fsgid according to **idmap**.h](hInitialize the i_gid field of }(hj%hhhNhNubj)}(h **inode**h]hinode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh]. If the inode was found/created via an idmapped mount map the caller’s fsgid according to }(hj%hhhNhNubj)}(h **idmap**h]hidmap}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjK%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !fsuidgid_has_mapping (C function)c.fsuidgid_has_mappinghNtauh1hhhhhhNhNubj)}(hhh](j)}(hKbool fsuidgid_has_mapping (struct super_block *sb, struct mnt_idmap *idmap)h]j)}(hJbool fsuidgid_has_mapping(struct super_block *sb, struct mnt_idmap *idmap)h](jf)}(hjih]hbool}(hjM&hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjI&hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hj[&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjI&hhhjZ&hMubjC)}(hfsuidgid_has_mappingh]jI)}(hfsuidgid_has_mappingh]hfsuidgid_has_mapping}(hjm&hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhji&ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjI&hhhjZ&hMubj=)}(h1(struct super_block *sb, struct mnt_idmap *idmap)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubh)}(hhh]jI)}(h super_blockh]h super_block}(hj&hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj )}j ]j)}jjo&sbc.fsuidgid_has_mappingasbuh1hhj&ubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjI)}(hsbh]hsb}(hj&hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&ubjC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj )}j ]j&c.fsuidgid_has_mappingasbuh1hhj&ubj2)}(h h]h }(hj7'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubj)}(hjh]h*}(hjE'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjI)}(hidmaph]hidmap}(hjR'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjI&hhhjZ&hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjE&hhhjZ&hMubah}(h]j@&ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjZ&hMhjB&hhubjw)}(hhh]h)}(h,check whether caller's fsuid/fsgid is mappedh]h.check whether caller’s fsuid/fsgid is mapped}(hj|'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjy'hhubah}(h]h ]h"]h$]h&]uh1jvhjB&hhhjZ&hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct super_block *sb`` the superblock we want a mapping in ``struct mnt_idmap *idmap`` idmap of the relevant mount **Description** Check whether the caller's fsuid and fsgid have a valid mapping in the s_user_ns of the superblock **sb**. If the caller is on an idmapped mount map the caller's fsuid and fsgid according to the **idmap** first. **Return** true if fsuid and fsgid is mapped, false if not.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM#hj'ubj)}(hhh](j)}(h?``struct super_block *sb`` the superblock we want a mapping in h](j)}(h``struct super_block *sb``h]j)}(hj'h]hstruct super_block *sb}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj'ubj)}(hhh]h)}(h#the superblock we want a mapping inh]h#the superblock we want a mapping in}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hj'ubj)}(h8``struct mnt_idmap *idmap`` idmap of the relevant mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj'h]hstruct mnt_idmap *idmap}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM!hj'ubj)}(hhh]h)}(hidmap of the relevant mounth]hidmap of the relevant mount}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj (hM!hj (ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj (hM!hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j)}(hj1(h]h Description}(hj3(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/(ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM#hj'ubh)}(hCheck whether the caller's fsuid and fsgid have a valid mapping in the s_user_ns of the superblock **sb**. If the caller is on an idmapped mount map the caller's fsuid and fsgid according to the **idmap** first.h](heCheck whether the caller’s fsuid and fsgid have a valid mapping in the s_user_ns of the superblock }(hjG(hhhNhNubj)}(h**sb**h]hsb}(hjO(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG(ubh\. If the caller is on an idmapped mount map the caller’s fsuid and fsgid according to the }(hjG(hhhNhNubj)}(h **idmap**h]hidmap}(hja(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG(ubh first.}(hjG(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM"hj'ubh)}(h **Return**h]j)}(hj|(h]hReturn}(hj~(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz(ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM&hj'ubh)}(h0true if fsuid and fsgid is mapped, false if not.h]h0true if fsuid and fsgid is mapped, false if not.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM'hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_set_ctime (C function)c.inode_set_ctimehNtauh1hhhhhhNhNubj)}(hhh](j)}(hPstruct timespec64 inode_set_ctime (struct inode *inode, time64_t sec, long nsec)h]j)}(hOstruct timespec64 inode_set_ctime(struct inode *inode, time64_t sec, long nsec)h](j )}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(hhhj(hMubh)}(hhh]jI)}(h timespec64h]h timespec64}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj )}j ]j)}jinode_set_ctimesbc.inode_set_ctimeasbuh1hhj(hhhj(hMubj2)}(h h]h }(hj)hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(hhhj(hMubjC)}(hinode_set_ctimeh]jI)}(hj(h]hinode_set_ctime}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj(hhhj(hMubj=)}(h.(struct inode *inode, time64_t sec, long nsec)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj.)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj*)ubj2)}(h h]h }(hj;)hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*)ubh)}(hhh]jI)}(hinodeh]hinode}(hjL)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjI)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjN)modnameN classnameNjj )}j ]j(c.inode_set_ctimeasbuh1hhj*)ubj2)}(h h]h }(hjj)hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*)ubj)}(hjh]h*}(hjx)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*)ubjI)}(hinodeh]hinode}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*)ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&)ubjC)}(h time64_t sech](h)}(hhh]jI)}(htime64_th]htime64_t}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj )}j ]j(c.inode_set_ctimeasbuh1hhj)ubj2)}(h h]h }(hj)hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj)ubjI)}(hsech]hsec}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&)ubjC)}(h long nsech](jf)}(hlongh]hlong}(hj)hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj)ubj2)}(h h]h }(hj)hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj)ubjI)}(hnsech]hnsec}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&)ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj(hhhj(hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj(hhhj(hMubah}(h]j(ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj(hMhj(hhubjw)}(hhh]h)}(hset the ctime in the inodeh]hset the ctime in the inode}(hj,*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj)*hhubah}(h]h ]h"]h$]h&]uh1jvhj(hhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjD*jjD*jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct inode *inode`` inode in which to set the ctime ``time64_t sec`` tv_sec value to set ``long nsec`` tv_nsec value to set **Description** Set the ctime in **inode** to { **sec**, **nsec** }h](h)}(h**Parameters**h]j)}(hjN*h]h Parameters}(hjP*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL*ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjH*ubj)}(hhh](j)}(h8``struct inode *inode`` inode in which to set the ctime h](j)}(h``struct inode *inode``h]j)}(hjm*h]hstruct inode *inode}(hjo*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk*ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjg*ubj)}(hhh]h)}(hinode in which to set the ctimeh]hinode in which to set the ctime}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjg*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjd*ubj)}(h%``time64_t sec`` tv_sec value to set h](j)}(h``time64_t sec``h]j)}(hj*h]h time64_t sec}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj*ubj)}(hhh]h)}(htv_sec value to seth]htv_sec value to set}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjd*ubj)}(h#``long nsec`` tv_nsec value to set h](j)}(h ``long nsec``h]j)}(hj*h]h long nsec}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj*ubj)}(hhh]h)}(htv_nsec value to seth]htv_nsec value to set}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjd*ubeh}(h]h ]h"]h$]h&]uh1jhjH*ubh)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjH*ubh)}(h3Set the ctime in **inode** to { **sec**, **nsec** }h](hSet the ctime in }(hj0+hhhNhNubj)}(h **inode**h]hinode}(hj8+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0+ubh to { }(hj0+hhhNhNubj)}(h**sec**h]hsec}(hjJ+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0+ubh, }(hj0+hhhNhNubj)}(h**nsec**h]hnsec}(hj\+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0+ubh }}(hj0+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjH*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j file_write_started (C function)c.file_write_startedhNtauh1hhhhhhNhNubj)}(hhh](j)}(h1bool file_write_started (const struct file *file)h]j)}(h0bool file_write_started(const struct file *file)h](jf)}(hjih]hbool}(hj+hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj+hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+hhhj+hMubjC)}(hfile_write_startedh]jI)}(hfile_write_startedh]hfile_write_started}(hj+hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj+ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj+hhhj+hMubj=)}(h(const struct file *file)h]jC)}(hconst struct file *fileh](j )}(hjh]hconst}(hj+hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj+ubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+ubj )}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj+ubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+ubh)}(hhh]jI)}(hfileh]hfile}(hj ,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj ,modnameN classnameNjj )}j ]j)}jj+sbc.file_write_startedasbuh1hhj+ubj2)}(h h]h }(hj*,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+ubj)}(hjh]h*}(hj8,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjI)}(hfileh]hfile}(hjE,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj+ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj+ubah}(h]h ]h"]h$]h&]j`jauh1j<hj+hhhj+hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj+hhhj+hMubah}(h]j+ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj+hMhj+hhubjw)}(hhh]h)}(h check if SB_FREEZE_WRITE is heldh]h check if SB_FREEZE_WRITE is held}(hjo,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjl,hhubah}(h]h ]h"]h$]h&]uh1jvhj+hhhj+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhhhNhNubj)}(h**Parameters** ``const struct file *file`` the file we write to **Description** May be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN. May be false positive with !S_ISREG, because file_start_write() has no effect on !S_ISREG.h](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj,ubj)}(hhh]j)}(h1``const struct file *file`` the file we write to h](j)}(h``const struct file *file``h]j)}(hj,h]hconst struct file *file}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj,ubj)}(hhh]h)}(hthe file we write toh]hthe file we write to}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj,ubh)}(hMay be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN. May be false positive with !S_ISREG, because file_start_write() has no effect on !S_ISREG.h]hMay be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN. May be false positive with !S_ISREG, because file_start_write() has no effect on !S_ISREG.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #file_write_not_started (C function)c.file_write_not_startedhNtauh1hhhhhhNhNubj)}(hhh](j)}(h5bool file_write_not_started (const struct file *file)h]j)}(h4bool file_write_not_started(const struct file *file)h](jf)}(hjih]hbool}(hj0-hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj,-hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hj>-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,-hhhj=-hMubjC)}(hfile_write_not_startedh]jI)}(hfile_write_not_startedh]hfile_write_not_started}(hjP-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjL-ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj,-hhhj=-hMubj=)}(h(const struct file *file)h]jC)}(hconst struct file *fileh](j )}(hjh]hconst}(hjl-hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjh-ubj2)}(h h]h }(hjy-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjh-ubj )}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjh-ubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjh-ubh)}(hhh]jI)}(hfileh]hfile}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj )}j ]j)}jjR-sbc.file_write_not_startedasbuh1hhjh-ubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjh-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh-ubjI)}(hfileh]hfile}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjh-ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjd-ubah}(h]h ]h"]h$]h&]j`jauh1j<hj,-hhhj=-hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj(-hhhj=-hMubah}(h]j#-ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj=-hMhj%-hhubjw)}(hhh]h)}(h$check if SB_FREEZE_WRITE is not heldh]h$check if SB_FREEZE_WRITE is not held}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj.hhubah}(h]h ]h"]h$]h&]uh1jvhj%-hhhj=-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj".jj".jjjuh1jhhhhhNhNubj)}(h**Parameters** ``const struct file *file`` the file we write to **Description** May be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN. May be false positive with !S_ISREG, because file_start_write() has no effect on !S_ISREG.h](h)}(h**Parameters**h]j)}(hj,.h]h Parameters}(hj..hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*.ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj&.ubj)}(hhh]j)}(h1``const struct file *file`` the file we write to h](j)}(h``const struct file *file``h]j)}(hjK.h]hconst struct file *file}(hjM.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI.ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjE.ubj)}(hhh]h)}(hthe file we write toh]hthe file we write to}(hjd.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`.hMhja.ubah}(h]h ]h"]h$]h&]uh1jhjE.ubeh}(h]h ]h"]h$]h&]uh1jhj`.hMhjB.ubah}(h]h ]h"]h$]h&]uh1jhj&.ubh)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj&.ubh)}(hMay be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN. May be false positive with !S_ISREG, because file_start_write() has no effect on !S_ISREG.h]hMay be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN. May be false positive with !S_ISREG, because file_start_write() has no effect on !S_ISREG.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj&.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j renamedata (C struct) c.renamedatahNtauh1hhhhhhNhNubj)}(hhh](j)}(h renamedatah]j)}(hstruct renamedatah](j )}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj.hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.hhhj.hMubjC)}(h renamedatah]jI)}(hj.h]h renamedata}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj.hhhj.hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj.hhhj.hMubah}(h]j.ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj.hMhj.hhubjw)}(hhh]h)}(h.contains all information required for renamingh]h.contains all information required for renaming}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj /hhubah}(h]h ]h"]h$]h&]uh1jvhj.hhhj.hMubeh}(h]h ](jstructeh"]h$]h&]jjjj%/jj%/jjjuh1jhhhhhNhNubj)}(hXN**Definition**:: struct renamedata { struct mnt_idmap *mnt_idmap; struct dentry *old_parent; struct dentry *old_dentry; struct dentry *new_parent; struct dentry *new_dentry; struct delegated_inode *delegated_inode; unsigned int flags; }; **Members** ``mnt_idmap`` idmap of the mount in which the rename is happening. ``old_parent`` parent of source ``old_dentry`` source ``new_parent`` parent of destination ``new_dentry`` destination ``delegated_inode`` returns an inode needing a delegation break ``flags`` rename flagsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj1/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-/ubh:}(hj-/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj)/ubj )}(hstruct renamedata { struct mnt_idmap *mnt_idmap; struct dentry *old_parent; struct dentry *old_dentry; struct dentry *new_parent; struct dentry *new_dentry; struct delegated_inode *delegated_inode; unsigned int flags; };h]hstruct renamedata { struct mnt_idmap *mnt_idmap; struct dentry *old_parent; struct dentry *old_dentry; struct dentry *new_parent; struct dentry *new_dentry; struct delegated_inode *delegated_inode; unsigned int flags; };}hjJ/sbah}(h]h ]h"]h$]h&]j`jauh1j hZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj)/ubh)}(h **Members**h]j)}(hj[/h]hMembers}(hj]/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY/ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj)/ubj)}(hhh](j)}(hC``mnt_idmap`` idmap of the mount in which the rename is happening. h](j)}(h ``mnt_idmap``h]j)}(hjz/h]h mnt_idmap}(hj|/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx/ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjt/ubj)}(hhh]h)}(h4idmap of the mount in which the rename is happening.h]h4idmap of the mount in which the rename is happening.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjt/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjq/ubj)}(h ``old_parent`` parent of source h](j)}(h``old_parent``h]j)}(hj/h]h old_parent}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj/ubj)}(hhh]h)}(hparent of sourceh]hparent of source}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjq/ubj)}(h``old_dentry`` source h](j)}(h``old_dentry``h]j)}(hj/h]h old_dentry}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj/ubj)}(hhh]h)}(hsourceh]hsource}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjq/ubj)}(h%``new_parent`` parent of destination h](j)}(h``new_parent``h]j)}(hj%0h]h new_parent}(hj'0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj0ubj)}(hhh]h)}(hparent of destinationh]hparent of destination}(hj>0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:0hMhj;0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj:0hMhjq/ubj)}(h``new_dentry`` destination h](j)}(h``new_dentry``h]j)}(hj^0h]h new_dentry}(hj`0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjX0ubj)}(hhh]h)}(h destinationh]h destination}(hjw0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs0hMhjt0ubah}(h]h ]h"]h$]h&]uh1jhjX0ubeh}(h]h ]h"]h$]h&]uh1jhjs0hMhjq/ubj)}(h@``delegated_inode`` returns an inode needing a delegation break h](j)}(h``delegated_inode``h]j)}(hj0h]hdelegated_inode}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj0ubj)}(hhh]h)}(h+returns an inode needing a delegation breakh]h+returns an inode needing a delegation break}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjq/ubj)}(h``flags`` rename flagsh](j)}(h ``flags``h]j)}(hj0h]hflags}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj0ubj)}(hhh]h)}(h rename flagsh]h rename flags}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjq/ubeh}(h]h ]h"]h$]h&]uh1jhj)/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j is_mgtime (C function) c.is_mgtimehNtauh1hhhhhhNhNubj)}(hhh](j)}(h*bool is_mgtime (const struct inode *inode)h]j)}(h)bool is_mgtime(const struct inode *inode)h](jf)}(hjih]hbool}(hj*1hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj&1hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj2)}(h h]h }(hj81hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&1hhhj71hM ubjC)}(h is_mgtimeh]jI)}(h is_mgtimeh]h is_mgtime}(hjJ1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjF1ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj&1hhhj71hM ubj=)}(h(const struct inode *inode)h]jC)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjf1hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjb1ubj2)}(h h]h }(hjs1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjb1ubj )}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjb1ubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjb1ubh)}(hhh]jI)}(hinodeh]hinode}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj )}j ]j)}jjL1sb c.is_mgtimeasbuh1hhjb1ubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjb1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb1ubjI)}(hinodeh]hinode}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjb1ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj^1ubah}(h]h ]h"]h$]h&]j`jauh1j<hj&1hhhj71hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj"1hhhj71hM ubah}(h]j1ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj71hM hj1hhubjw)}(hhh]h)}(h)is this inode using multigrain timestampsh]h)is this inode using multigrain timestamps}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj2hhubah}(h]h ]h"]h$]h&]uh1jvhj1hhhj71hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jhhhhhNhNubj)}(h**Parameters** ``const struct inode *inode`` inode to test for multigrain timestamps **Description** Return true if the inode uses multigrain timestamps, false otherwise.h](h)}(h**Parameters**h]j)}(hj&2h]h Parameters}(hj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$2ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj 2ubj)}(hhh]j)}(hF``const struct inode *inode`` inode to test for multigrain timestamps h](j)}(h``const struct inode *inode``h]j)}(hjE2h]hconst struct inode *inode}(hjG2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC2ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj?2ubj)}(hhh]h)}(h'inode to test for multigrain timestampsh]h'inode to test for multigrain timestamps}(hj^2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ2hM hj[2ubah}(h]h ]h"]h$]h&]uh1jhj?2ubeh}(h]h ]h"]h$]h&]uh1jhjZ2hM hj<2ubah}(h]h ]h"]h$]h&]uh1jhj 2ubh)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~2ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj 2ubh)}(hEReturn true if the inode uses multigrain timestamps, false otherwise.h]hEReturn true if the inode uses multigrain timestamps, false otherwise.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj 2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j iput_if_not_last (C function)c.iput_if_not_lasthNtauh1hhhhhhNhNubj)}(hhh](j)}(h+bool iput_if_not_last (struct inode *inode)h]j)}(h*bool iput_if_not_last(struct inode *inode)h](jf)}(hjih]hbool}(hj2hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj2hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMw ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj2hhhj2hMw ubjC)}(hiput_if_not_lasth]jI)}(hiput_if_not_lasth]hiput_if_not_last}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj2ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj2hhhj2hMw ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj2ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj2ubh)}(hhh]jI)}(hinodeh]hinode}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!3modnameN classnameNjj )}j ]j)}jj2sbc.iput_if_not_lastasbuh1hhj2ubj2)}(h h]h }(hj?3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj2ubj)}(hjh]h*}(hjM3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjI)}(hinodeh]hinode}(hjZ3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj2ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj2ubah}(h]h ]h"]h$]h&]j`jauh1j<hj2hhhj2hMw ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj2hhhj2hMw ubah}(h]j2ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj2hMw hj2hhubjw)}(hhh]h)}(h6drop an inode reference only if it is not the last oneh]h6drop an inode reference only if it is not the last one}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMw hj3hhubah}(h]h ]h"]h$]h&]uh1jvhj2hhhj2hMw ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct inode *inode`` inode to put **Description** Returns true if the reference was dropped, false if this was the last reference and the caller must arrange for final iput() in a safe context.h](h)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM{ hj3ubj)}(hhh]j)}(h%``struct inode *inode`` inode to put h](j)}(h``struct inode *inode``h]j)}(hj3h]hstruct inode *inode}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMx hj3ubj)}(hhh]h)}(h inode to puth]h inode to put}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMx hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMx hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMz hj3ubh)}(hReturns true if the reference was dropped, false if this was the last reference and the caller must arrange for final iput() in a safe context.h]hReturns true if the reference was dropped, false if this was the last reference and the caller must arrange for final iput() in a safe context.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMy hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j is_idmapped_mnt (C function)c.is_idmapped_mnthNtauh1hhhhhhNhNubj)}(hhh](j)}(h1bool is_idmapped_mnt (const struct vfsmount *mnt)h]j)}(h0bool is_idmapped_mnt(const struct vfsmount *mnt)h](jf)}(hjih]hbool}(hjE4hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjA4hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj2)}(h h]h }(hjS4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjA4hhhjR4hM ubjC)}(his_idmapped_mnth]jI)}(his_idmapped_mnth]his_idmapped_mnt}(hje4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhja4ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjA4hhhjR4hM ubj=)}(h(const struct vfsmount *mnt)h]jC)}(hconst struct vfsmount *mnth](j )}(hjh]hconst}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}4ubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}4ubj )}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}4ubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}4ubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hj4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj )}j ]j)}jjg4sbc.is_idmapped_mntasbuh1hhj}4ubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}4ubjI)}(hmnth]hmnt}(hj4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}4ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjy4ubah}(h]h ]h"]h$]h&]j`jauh1j<hjA4hhhjR4hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj=4hhhjR4hM ubah}(h]j84ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjR4hM hj:4hhubjw)}(hhh]h)}(hcheck whether a mount is mappedh]hcheck whether a mount is mapped}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj5hhubah}(h]h ]h"]h$]h&]uh1jvhj:4hhhjR4hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj75jj75jjjuh1jhhhhhNhNubj)}(h**Parameters** ``const struct vfsmount *mnt`` the mount to check **Description** If **mnt** has an non **nop_mnt_idmap** attached to it then **mnt** is mapped. **Return** true if mount is mapped, false if not.h](h)}(h**Parameters**h]j)}(hjA5h]h Parameters}(hjC5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;5ubj)}(hhh]j)}(h2``const struct vfsmount *mnt`` the mount to check h](j)}(h``const struct vfsmount *mnt``h]j)}(hj`5h]hconst struct vfsmount *mnt}(hjb5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^5ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjZ5ubj)}(hhh]h)}(hthe mount to checkh]hthe mount to check}(hjy5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju5hM hjv5ubah}(h]h ]h"]h$]h&]uh1jhjZ5ubeh}(h]h ]h"]h$]h&]uh1jhju5hM hjW5ubah}(h]h ]h"]h$]h&]uh1jhj;5ubh)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;5ubh)}(hNIf **mnt** has an non **nop_mnt_idmap** attached to it then **mnt** is mapped.h](hIf }(hj5hhhNhNubj)}(h**mnt**h]hmnt}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh has an non }(hj5hhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh attached to it then }(hj5hhhNhNubj)}(h**mnt**h]hmnt}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh is mapped.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;5ubh)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;5ubh)}(h&true if mount is mapped, false if not.h]h&true if mount is mapped, false if not.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j file_start_write (C function)c.file_start_writehNtauh1hhhhhhNhNubj)}(hhh](j)}(h)void file_start_write (struct file *file)h]j)}(h(void file_start_write(struct file *file)h](jf)}(hvoidh]hvoid}(hj=6hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj96hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj2)}(h h]h }(hjL6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj96hhhjK6hM ubjC)}(hfile_start_writeh]jI)}(hfile_start_writeh]hfile_start_write}(hj^6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZ6ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj96hhhjK6hM ubj=)}(h(struct file *file)h]jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjz6hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjv6ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjv6ubh)}(hhh]jI)}(hfileh]hfile}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj )}j ]j)}jj`6sbc.file_start_writeasbuh1hhjv6ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjv6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv6ubjI)}(hfileh]hfile}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjv6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjr6ubah}(h]h ]h"]h$]h&]j`jauh1j<hj96hhhjK6hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj56hhhjK6hM ubah}(h]j06ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjK6hM hj26hhubjw)}(hhh]h)}(h4get write access to a superblock for regular file ioh]h4get write access to a superblock for regular file io}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj6hhubah}(h]h ]h"]h$]h&]uh1jvhj26hhhjK6hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct file *file`` the file we want to write to **Description** This is a variant of sb_start_write() which is a noop on non-regular file. Should be matched with a call to file_end_write().h](h)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj!7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj7ubj)}(hhh]j)}(h3``struct file *file`` the file we want to write to h](j)}(h``struct file *file``h]j)}(hj>7h]hstruct file *file}(hj@7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<7ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj87ubj)}(hhh]h)}(hthe file we want to write toh]hthe file we want to write to}(hjW7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS7hM hjT7ubah}(h]h ]h"]h$]h&]uh1jhj87ubeh}(h]h ]h"]h$]h&]uh1jhjS7hM hj57ubah}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hjy7h]h Description}(hj{7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj7ubh)}(h}This is a variant of sb_start_write() which is a noop on non-regular file. Should be matched with a call to file_end_write().h]h}This is a variant of sb_start_write() which is a noop on non-regular file. Should be matched with a call to file_end_write().}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j file_end_write (C function)c.file_end_writehNtauh1hhhhhhNhNubj)}(hhh](j)}(h'void file_end_write (struct file *file)h]j)}(h&void file_end_write(struct file *file)h](jf)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj7hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj7hhhj7hM ubjC)}(hfile_end_writeh]jI)}(hfile_end_writeh]hfile_end_write}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj7hhhj7hM ubj=)}(h(struct file *file)h]jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj7ubj2)}(h h]h }(hj8hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj7ubh)}(hhh]jI)}(hfileh]hfile}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj )}j ]j)}jj7sbc.file_end_writeasbuh1hhj7ubj2)}(h h]h }(hj98hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj7ubj)}(hjh]h*}(hjG8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjI)}(hfileh]hfile}(hjT8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj7ubah}(h]h ]h"]h$]h&]j`jauh1j<hj7hhhj7hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj7hhhj7hM ubah}(h]j7ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj7hM hj7hhubjw)}(hhh]h)}(h3drop write access to a superblock of a regular fileh]h3drop write access to a superblock of a regular file}(hj~8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj{8hhubah}(h]h ]h"]h$]h&]uh1jvhj7hhhj7hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8jj8jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct file *file`` the file we wrote to **Description** Should be matched with a call to file_start_write().h](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj8ubj)}(hhh]j)}(h+``struct file *file`` the file we wrote to h](j)}(h``struct file *file``h]j)}(hj8h]hstruct file *file}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj8ubj)}(hhh]h)}(hthe file we wrote toh]hthe file we wrote to}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj8ubh)}(h4Should be matched with a call to file_start_write().h]h4Should be matched with a call to file_start_write().}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j kiocb_start_write (C function)c.kiocb_start_writehNtauh1hhhhhhNhNubj)}(hhh](j)}(h+void kiocb_start_write (struct kiocb *iocb)h]j)}(h*void kiocb_start_write(struct kiocb *iocb)h](jf)}(hvoidh]hvoid}(hj?9hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj;9hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj2)}(h h]h }(hjN9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;9hhhjM9hM ubjC)}(hkiocb_start_writeh]jI)}(hkiocb_start_writeh]hkiocb_start_write}(hj`9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\9ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj;9hhhjM9hM ubj=)}(h(struct kiocb *iocb)h]jC)}(hstruct kiocb *iocbh](j )}(hjh]hstruct}(hj|9hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjx9ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjx9ubh)}(hhh]jI)}(hkiocbh]hkiocb}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj )}j ]j)}jjb9sbc.kiocb_start_writeasbuh1hhjx9ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjx9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx9ubjI)}(hiocbh]hiocb}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjx9ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjt9ubah}(h]h ]h"]h$]h&]j`jauh1j<hj;9hhhjM9hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj79hhhjM9hM ubah}(h]j29ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjM9hM hj49hhubjw)}(hhh]h)}(h2get write access to a superblock for async file ioh]h2get write access to a superblock for async file io}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj9hhubah}(h]h ]h"]h$]h&]uh1jvhj49hhhjM9hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:jj:jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct kiocb *iocb`` the io context we want to submit the write with **Description** This is a variant of sb_start_write() for async io submission. Should be matched with a call to kiocb_end_write().h](h)}(h**Parameters**h]j)}(hj!:h]h Parameters}(hj#:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj:ubj)}(hhh]j)}(hG``struct kiocb *iocb`` the io context we want to submit the write with h](j)}(h``struct kiocb *iocb``h]j)}(hj@:h]hstruct kiocb *iocb}(hjB:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>:ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj::ubj)}(hhh]h)}(h/the io context we want to submit the write withh]h/the io context we want to submit the write with}(hjY:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU:hM hjV:ubah}(h]h ]h"]h$]h&]uh1jhj::ubeh}(h]h ]h"]h$]h&]uh1jhjU:hM hj7:ubah}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hj{:h]h Description}(hj}:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy:ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj:ubh)}(hrThis is a variant of sb_start_write() for async io submission. Should be matched with a call to kiocb_end_write().h]hrThis is a variant of sb_start_write() for async io submission. Should be matched with a call to kiocb_end_write().}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j kiocb_end_write (C function)c.kiocb_end_writehNtauh1hhhhhhNhNubj)}(hhh](j)}(h)void kiocb_end_write (struct kiocb *iocb)h]j)}(h(void kiocb_end_write(struct kiocb *iocb)h](jf)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj:hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:hhhj:hM ubjC)}(hkiocb_end_writeh]jI)}(hkiocb_end_writeh]hkiocb_end_write}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj:hhhj:hM ubj=)}(h(struct kiocb *iocb)h]jC)}(hstruct kiocb *iocbh](j )}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj:ubj2)}(h h]h }(hj ;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubh)}(hhh]jI)}(hkiocbh]hkiocb}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj )}j ]j)}jj:sbc.kiocb_end_writeasbuh1hhj:ubj2)}(h h]h }(hj;;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubj)}(hjh]h*}(hjI;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjI)}(hiocbh]hiocb}(hjV;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj:ubah}(h]h ]h"]h$]h&]j`jauh1j<hj:hhhj:hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj:hhhj:hM ubah}(h]j:ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj:hM hj:hhubjw)}(hhh]h)}(h5drop write access to a superblock after async file ioh]h5drop write access to a superblock after async file io}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj};hhubah}(h]h ]h"]h$]h&]uh1jvhj:hhhj:hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct kiocb *iocb`` the io context we sumbitted the write with **Description** Should be matched with a call to kiocb_start_write().h](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;ubj)}(hhh]j)}(hB``struct kiocb *iocb`` the io context we sumbitted the write with h](j)}(h``struct kiocb *iocb``h]j)}(hj;h]hstruct kiocb *iocb}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;ubj)}(hhh]h)}(h*the io context we sumbitted the write withh]h*the io context we sumbitted the write with}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubh)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;ubh)}(h5Should be matched with a call to kiocb_start_write().h]h5Should be matched with a call to kiocb_start_write().}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j name_is_dot_dotdot (C function)c.name_is_dot_dotdothNtauh1hhhhhhNhNubj)}(hhh](j)}(h6bool name_is_dot_dotdot (const char *name, size_t len)h]j)}(h5bool name_is_dot_dotdot(const char *name, size_t len)h](jf)}(hjih]hbool}(hjA<hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj=<hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMq ubj2)}(h h]h }(hjO<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=<hhhjN<hMq ubjC)}(hname_is_dot_dotdoth]jI)}(hname_is_dot_dotdoth]hname_is_dot_dotdot}(hja<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]<ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj=<hhhjN<hMq ubj=)}(h(const char *name, size_t len)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hj}<hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjy<ubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjy<ubjf)}(hcharh]hchar}(hj<hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjy<ubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjy<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy<ubjI)}(hnameh]hname}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjy<ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhju<ubjC)}(h size_t lenh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj )}j ]j)}jjc<sbc.name_is_dot_dotdotasbuh1hhj<ubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubjI)}(hlenh]hlen}(hj =hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhju<ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj=<hhhjN<hMq ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj9<hhhjN<hMq ubah}(h]j4<ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjN<hMq hj6<hhubjw)}(hhh]h)}(h,returns true only if **name** is "." or ".."h](hreturns true only if }(hj5=hhhNhNubj)}(h**name**h]hname}(hj==hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5=ubh is “.” or “..”}(hj5=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMq hj2=hhubah}(h]h ]h"]h$]h&]uh1jvhj6<hhhjN<hMq ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_=jj_=jjjuh1jhhhhhNhNubj)}(hi**Parameters** ``const char *name`` file name to check ``size_t len`` length of file name, in bytesh](h)}(h**Parameters**h]j)}(hji=h]h Parameters}(hjk=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg=ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMu hjc=ubj)}(hhh](j)}(h(``const char *name`` file name to check h](j)}(h``const char *name``h]j)}(hj=h]hconst char *name}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMr hj=ubj)}(hhh]h)}(hfile name to checkh]hfile name to check}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMr hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMr hj=ubj)}(h,``size_t len`` length of file name, in bytesh](j)}(h``size_t len``h]j)}(hj=h]h size_t len}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMt hj=ubj)}(hhh]h)}(hlength of file name, in bytesh]hlength of file name, in bytes}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMs hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMt hj=ubeh}(h]h ]h"]h$]h&]uh1jhjc=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !name_contains_dotdot (C function)c.name_contains_dotdothNtauh1hhhhhhNhNubj)}(hhh](j)}(h,bool name_contains_dotdot (const char *name)h]j)}(h+bool name_contains_dotdot(const char *name)h](jf)}(hjih]hbool}(hj>hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj>hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM| ubj2)}(h h]h }(hj)>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>hhhj(>hM| ubjC)}(hname_contains_dotdoth]jI)}(hname_contains_dotdoth]hname_contains_dotdot}(hj;>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7>ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj>hhhj(>hM| ubj=)}(h(const char *name)h]jC)}(hconst char *nameh](j )}(hjh]hconst}(hjW>hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjS>ubj2)}(h h]h }(hjd>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjS>ubjf)}(hcharh]hchar}(hjr>hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjS>ubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjS>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS>ubjI)}(hnameh]hname}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjS>ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjO>ubah}(h]h ]h"]h$]h&]j`jauh1j<hj>hhhj(>hM| ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj>hhhj(>hM| ubah}(h]j>ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj(>hM| hj>hhubjw)}(hhh]h)}(h2check if a file name contains ".." path componentsh]h6check if a file name contains “..” path components}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM| hj>hhubah}(h]h ]h"]h$]h&]uh1jvhj>hhhj(>hM| ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhhhNhNubj)}(h**Parameters** ``const char *name`` File path string to check Search for ".." surrounded by either '/' or start/end of string.h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj>ubj)}(hhh]j)}(ho``const char *name`` File path string to check Search for ".." surrounded by either '/' or start/end of string.h](j)}(h``const char *name``h]j)}(hj?h]hconst char *name}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM} hj?ubj)}(hhh]h)}(hZFile path string to check Search for ".." surrounded by either '/' or start/end of string.h]hbFile path string to check Search for “..” surrounded by either ‘/’ or start/end of string.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hM} hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM} hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_dio_begin (C function)c.inode_dio_beginhNtauh1hhhhhhNhNubj)}(hhh](j)}(h*void inode_dio_begin (struct inode *inode)h]j)}(h)void inode_dio_begin(struct inode *inode)h](jf)}(hvoidh]hvoid}(hj_?hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj[?hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM] ubj2)}(h h]h }(hjn?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[?hhhjm?hM] ubjC)}(hinode_dio_beginh]jI)}(hinode_dio_beginh]hinode_dio_begin}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|?ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj[?hhhjm?hM] ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj?ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj?ubh)}(hhh]jI)}(hinodeh]hinode}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj )}j ]j)}jj?sbc.inode_dio_beginasbuh1hhj?ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjI)}(hinodeh]hinode}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj?ubah}(h]h ]h"]h$]h&]j`jauh1j<hj[?hhhjm?hM] ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjW?hhhjm?hM] ubah}(h]jR?ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjm?hM] hjT?hhubjw)}(hhh]h)}(h%signal start of a direct I/O requestsh]h%signal start of a direct I/O requests}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM] hj@hhubah}(h]h ]h"]h$]h&]uh1jvhjT?hhhjm?hM] ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7@jj7@jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct inode *inode`` inode the direct I/O happens on **Description** This is called once we've finished processing a direct I/O request, and is used to wake up callers waiting for direct I/O to be quiesced.h](h)}(h**Parameters**h]j)}(hjA@h]h Parameters}(hjC@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?@ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMa hj;@ubj)}(hhh]j)}(h8``struct inode *inode`` inode the direct I/O happens on h](j)}(h``struct inode *inode``h]j)}(hj`@h]hstruct inode *inode}(hjb@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM^ hjZ@ubj)}(hhh]h)}(hinode the direct I/O happens onh]hinode the direct I/O happens on}(hjy@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju@hM^ hjv@ubah}(h]h ]h"]h$]h&]uh1jhjZ@ubeh}(h]h ]h"]h$]h&]uh1jhju@hM^ hjW@ubah}(h]h ]h"]h$]h&]uh1jhj;@ubh)}(h**Description**h]j)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM` hj;@ubh)}(hThis is called once we've finished processing a direct I/O request, and is used to wake up callers waiting for direct I/O to be quiesced.h]hThis is called once we’ve finished processing a direct I/O request, and is used to wake up callers waiting for direct I/O to be quiesced.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM_ hj;@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_dio_end (C function)c.inode_dio_endhNtauh1hhhhhhNhNubj)}(hhh](j)}(h(void inode_dio_end (struct inode *inode)h]j)}(h'void inode_dio_end(struct inode *inode)h](jf)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj@hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMi ubj2)}(h h]h }(hj@hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@hhhj@hMi ubjC)}(h inode_dio_endh]jI)}(h inode_dio_endh]h inode_dio_end}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj@hhhj@hMi ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjAubj2)}(h h]h }(hj*AhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubh)}(hhh]jI)}(hinodeh]hinode}(hj;AhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8Aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=AmodnameN classnameNjj )}j ]j)}jjAsbc.inode_dio_endasbuh1hhjAubj2)}(h h]h }(hj[AhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubj)}(hjh]h*}(hjiAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjI)}(hinodeh]hinode}(hjvAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjAubah}(h]h ]h"]h$]h&]j`jauh1j<hj@hhhj@hMi ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj@hhhj@hMi ubah}(h]j@ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj@hMi hj@hhubjw)}(hhh]h)}(h&signal finish of a direct I/O requestsh]h&signal finish of a direct I/O requests}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMi hjAhhubah}(h]h ]h"]h$]h&]uh1jvhj@hhhj@hMi ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct inode *inode`` inode the direct I/O happens on **Description** This is called once we've finished processing a direct I/O request, and is used to wake up callers waiting for direct I/O to be quiesced.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMm hjAubj)}(hhh]j)}(h8``struct inode *inode`` inode the direct I/O happens on h](j)}(h``struct inode *inode``h]j)}(hjAh]hstruct inode *inode}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMj hjAubj)}(hhh]h)}(hinode the direct I/O happens onh]hinode the direct I/O happens on}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMj hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMj hjAubah}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMl hjAubh)}(hThis is called once we've finished processing a direct I/O request, and is used to wake up callers waiting for direct I/O to be quiesced.h]hThis is called once we’ve finished processing a direct I/O request, and is used to wake up callers waiting for direct I/O to be quiesced.}(hj2BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMk hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ,generic_ci_validate_strict_name (C function)!c.generic_ci_validate_strict_namehNtauh1hhhhhhNhNubj)}(hhh](j)}(hQbool generic_ci_validate_strict_name (struct inode *dir, const struct qstr *name)h]j)}(hPbool generic_ci_validate_strict_name(struct inode *dir, const struct qstr *name)h](jf)}(hjih]hbool}(hjaBhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj]BhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj2)}(h h]h }(hjoBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]BhhhjnBhM ubjC)}(hgeneric_ci_validate_strict_nameh]jI)}(hgeneric_ci_validate_strict_nameh]hgeneric_ci_validate_strict_name}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}Bubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj]BhhhjnBhM ubj=)}(h,(struct inode *dir, const struct qstr *name)h](jC)}(hstruct inode *dirh](j )}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjBubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubh)}(hhh]jI)}(hinodeh]hinode}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj )}j ]j)}jjBsb!c.generic_ci_validate_strict_nameasbuh1hhjBubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjI)}(hdirh]hdir}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hjChhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj Cubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Cubj )}(hjh]hstruct}(hj*ChhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj Cubj2)}(h h]h }(hj7ChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Cubh)}(hhh]jI)}(hqstrh]hqstr}(hjHChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjECubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJCmodnameN classnameNjj )}j ]jB!c.generic_ci_validate_strict_nameasbuh1hhj Cubj2)}(h h]h }(hjfChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Cubj)}(hjh]h*}(hjtChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj CubjI)}(hnameh]hname}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Cubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubeh}(h]h ]h"]h$]h&]j`jauh1j<hj]BhhhjnBhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjYBhhhjnBhM ubah}(h]jTBah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjnBhM hjVBhhubjw)}(hhh]h)}(h1Check if a given name is suitable for a directoryh]h1Check if a given name is suitable for a directory}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjChhubah}(h]h ]h"]h$]h&]uh1jvhjVBhhhjnBhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhhhNhNubj)}(hXx**Parameters** ``struct inode *dir`` inode of the directory where the new file will be created ``const struct qstr *name`` name of the new file **Description** This functions checks if the proposed filename is valid for the parent directory. That means that only valid UTF-8 filenames will be accepted for casefold directories from filesystems created with the strict encoding flag. That also means that any name will be accepted for directories that doesn't have casefold enabled, or aren't being strict with the encoding. **Return** * True: if the filename is suitable for this directory. It can be true if a given name is not suitable for a strict encoding directory, but the directory being used isn't strict * False if the filename isn't suitable for this directory. This only happens when a directory is casefolded and the filesystem is strict about its encoding.h](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjCubj)}(hhh](j)}(hP``struct inode *dir`` inode of the directory where the new file will be created h](j)}(h``struct inode *dir``h]j)}(hjCh]hstruct inode *dir}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM& hjCubj)}(hhh]h)}(h9inode of the directory where the new file will be createdh]h9inode of the directory where the new file will be created}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM& hjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhM& hjCubj)}(h1``const struct qstr *name`` name of the new file h](j)}(h``const struct qstr *name``h]j)}(hj%Dh]hconst struct qstr *name}(hj'DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#Dubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM' hjDubj)}(hhh]h)}(hname of the new fileh]hname of the new file}(hj>DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:DhM' hj;Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj:DhM' hjCubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j)}(hj`Dh]h Description}(hjbDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Dubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM) hjCubh)}(hXlThis functions checks if the proposed filename is valid for the parent directory. That means that only valid UTF-8 filenames will be accepted for casefold directories from filesystems created with the strict encoding flag. That also means that any name will be accepted for directories that doesn't have casefold enabled, or aren't being strict with the encoding.h]hXpThis functions checks if the proposed filename is valid for the parent directory. That means that only valid UTF-8 filenames will be accepted for casefold directories from filesystems created with the strict encoding flag. That also means that any name will be accepted for directories that doesn’t have casefold enabled, or aren’t being strict with the encoding.}(hjvDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjCubh)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM$ hjCubh bullet_list)}(hhh](h list_item)}(hTrue: if the filename is suitable for this directory. It can be true if a given name is not suitable for a strict encoding directory, but the directory being used isn't stricth]h)}(hTrue: if the filename is suitable for this directory. It can be true if a given name is not suitable for a strict encoding directory, but the directory being used isn't stricth]hTrue: if the filename is suitable for this directory. It can be true if a given name is not suitable for a strict encoding directory, but the directory being used isn’t strict}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM) hjDubah}(h]h ]h"]h$]h&]uh1jDhjDubjD)}(hFalse if the filename isn't suitable for this directory. This only happens when a directory is casefolded and the filesystem is strict about its encoding.h]h)}(hFalse if the filename isn't suitable for this directory. This only happens when a directory is casefolded and the filesystem is strict about its encoding.h]hFalse if the filename isn’t suitable for this directory. This only happens when a directory is casefolded and the filesystem is strict about its encoding.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM, hjDubah}(h]h ]h"]h$]h&]uh1jDhjDubeh}(h]h ]h"]h$]h&]bulletjuh1jDhjDhM) hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubeh}(h]the-filesystem-typesah ]h"]the filesystem typesah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hThe Directory Cacheh]hThe Directory Cache}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_drop (C function)c.d_drophNtauh1hhjDhhhNhNubj)}(hhh](j)}(h#void d_drop (struct dentry *dentry)h]j)}(h"void d_drop(struct dentry *dentry)h](jf)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjEhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMIubj2)}(h h]h }(hj%EhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEhhhj$EhMIubjC)}(hd_droph]jI)}(hd_droph]hd_drop}(hj7EhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3Eubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjEhhhj$EhMIubj=)}(h(struct dentry *dentry)h]jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjSEhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOEubj2)}(h h]h }(hj`EhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOEubh)}(hhh]jI)}(hdentryh]hdentry}(hjqEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsEmodnameN classnameNjj )}j ]j)}jj9Esbc.d_dropasbuh1hhjOEubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOEubjI)}(hdentryh]hdentry}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOEubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjKEubah}(h]h ]h"]h$]h&]j`jauh1j<hjEhhhj$EhMIubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjEhhhj$EhMIubah}(h]j Eah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj$EhMIhj Ehhubjw)}(hhh]h)}(h drop a dentryh]h drop a dentry}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMIhjEhhubah}(h]h ]h"]h$]h&]uh1jvhj Ehhhj$EhMIubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` dentry to drop **Description** d_drop() unhashes the entry from the parent dentry hashes, so that it won't be found through a VFS lookup any more. Note that this is different from deleting the dentry - d_delete will try to mark the dentry negative if possible, giving a successful _negative_ lookup, while d_drop will just make the cache lookup fail. d_drop() is used mainly for stuff that wants to invalidate a dentry for some reason (NFS timeouts or autofs deletes). __d_drop requires dentry->d_lock ___d_drop doesn't mark dentry as "unhashed" (dentry->d_hash.pprev will be LIST_POISON2, not NULL).h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMMhjEubj)}(hhh]j)}(h)``struct dentry *dentry`` dentry to drop h](j)}(h``struct dentry *dentry``h]j)}(hjFh]hstruct dentry *dentry}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMJhjFubj)}(hhh]h)}(hdentry to droph]hdentry to drop}(hj0FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,FhMJhj-Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj,FhMJhjFubah}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjRFh]h Description}(hjTFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPFubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMLhjEubh)}(hX?d_drop() unhashes the entry from the parent dentry hashes, so that it won't be found through a VFS lookup any more. Note that this is different from deleting the dentry - d_delete will try to mark the dentry negative if possible, giving a successful _negative_ lookup, while d_drop will just make the cache lookup fail.h]hXAd_drop() unhashes the entry from the parent dentry hashes, so that it won’t be found through a VFS lookup any more. Note that this is different from deleting the dentry - d_delete will try to mark the dentry negative if possible, giving a successful _negative_ lookup, while d_drop will just make the cache lookup fail.}(hjhFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMKhjEubh)}(hud_drop() is used mainly for stuff that wants to invalidate a dentry for some reason (NFS timeouts or autofs deletes).h]hud_drop() is used mainly for stuff that wants to invalidate a dentry for some reason (NFS timeouts or autofs deletes).}(hjwFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMQhjEubh)}(h __d_drop requires dentry->d_lockh]h __d_drop requires dentry->d_lock}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMThjEubh)}(hb___d_drop doesn't mark dentry as "unhashed" (dentry->d_hash.pprev will be LIST_POISON2, not NULL).h]hh___d_drop doesn’t mark dentry as “unhashed” (dentry->d_hash.pprev will be LIST_POISON2, not NULL).}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMVhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "__move_to_shrink_list (C function)c.__move_to_shrink_listhNtauh1hhjDhhhNhNubj)}(hhh](j)}(hJbool __move_to_shrink_list (struct dentry *dentry, struct list_head *list)h]j)}(hIbool __move_to_shrink_list(struct dentry *dentry, struct list_head *list)h](jf)}(hjih]hbool}(hjFhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjFhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM!ubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFhhhjFhM!ubjC)}(h__move_to_shrink_listh]jI)}(h__move_to_shrink_listh]h__move_to_shrink_list}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjFhhhjFhM!ubj=)}(h/(struct dentry *dentry, struct list_head *list)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFubj2)}(h h]h }(hj GhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubh)}(hhh]jI)}(hdentryh]hdentry}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj GmodnameN classnameNjj )}j ]j)}jjFsbc.__move_to_shrink_listasbuh1hhjFubj2)}(h h]h }(hj>GhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubj)}(hjh]h*}(hjLGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjI)}(hdentryh]hdentry}(hjYGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(hstruct list_head *listh](j )}(hjh]hstruct}(hjrGhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjnGubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnGubh)}(hhh]jI)}(h list_headh]h list_head}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj )}j ]j:Gc.__move_to_shrink_listasbuh1hhjnGubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnGubjI)}(hlisth]hlist}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnGubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubeh}(h]h ]h"]h$]h&]j`jauh1j<hjFhhhjFhM!ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjFhhhjFhM!ubah}(h]jFah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjFhM!hjFhhubjw)}(hhh]h)}(h(try to place a dentry into a shrink listh]h(try to place a dentry into a shrink list}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM!hjGhhubah}(h]h ]h"]h$]h&]uh1jvhjFhhhjFhM!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj Hjj Hjjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` dentry to try putting into shrink list ``struct list_head *list`` the list to put **dentry** into. **Return** true **dentry** had been placed into **list**, false otherwise **Description** If **dentry** is idle and not already include into a shrink list, move it into **list** and return ``true``; otherwise do nothing and return ``false``. Caller must be holding **dentry->d_lock**. There must have been no calls of dentry_free(**dentry**) prior to the beginning of the RCU read-side critical area in which __move_to_shrink_list(**dentry**, **list**) is called. **list** should be thread-private and eventually emptied by passing it to shrink_dentry_list().h](h)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM%hjHubj)}(hhh](j)}(hA``struct dentry *dentry`` dentry to try putting into shrink list h](j)}(h``struct dentry *dentry``h]j)}(hj4Hh]hstruct dentry *dentry}(hj6HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Hubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM"hj.Hubj)}(hhh]h)}(h&dentry to try putting into shrink listh]h&dentry to try putting into shrink list}(hjMHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIHhM"hjJHubah}(h]h ]h"]h$]h&]uh1jhj.Hubeh}(h]h ]h"]h$]h&]uh1jhjIHhM"hj+Hubj)}(h<``struct list_head *list`` the list to put **dentry** into. h](j)}(h``struct list_head *list``h]j)}(hjmHh]hstruct list_head *list}(hjoHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM#hjgHubj)}(hhh]h)}(h the list to put **dentry** into.h](hthe list to put }(hjHhhhNhNubj)}(h **dentry**h]hdentry}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh into.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhM#hjHubah}(h]h ]h"]h$]h&]uh1jhjgHubeh}(h]h ]h"]h$]h&]uh1jhjHhM#hj+Hubeh}(h]h ]h"]h$]h&]uh1jhjHubh)}(h **Return**h]j)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM%hjHubh)}(h>true **dentry** had been placed into **list**, false otherwiseh](htrue }(hjHhhhNhNubj)}(h **dentry**h]hdentry}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh had been placed into }(hjHhhhNhNubj)}(h**list**h]hlist}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh, false otherwise}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM$hjHubh)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM&hjHubh)}(hIf **dentry** is idle and not already include into a shrink list, move it into **list** and return ``true``; otherwise do nothing and return ``false``.h](hIf }(hjIhhhNhNubj)}(h **dentry**h]hdentry}(hj#IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubhB is idle and not already include into a shrink list, move it into }(hjIhhhNhNubj)}(h**list**h]hlist}(hj5IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh and return }(hjIhhhNhNubj)}(h``true``h]htrue}(hjGIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh"; otherwise do nothing and return }(hjIhhhNhNubj)}(h ``false``h]hfalse}(hjYIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM%hjHubh)}(hCaller must be holding **dentry->d_lock**. There must have been no calls of dentry_free(**dentry**) prior to the beginning of the RCU read-side critical area in which __move_to_shrink_list(**dentry**, **list**) is called.h](hCaller must be holding }(hjrIhhhNhNubj)}(h**dentry->d_lock**h]hdentry->d_lock}(hjzIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrIubh0. There must have been no calls of dentry_free(}(hjrIhhhNhNubj)}(h **dentry**h]hdentry}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrIubh[) prior to the beginning of the RCU read-side critical area in which __move_to_shrink_list(}(hjrIhhhNhNubj)}(h **dentry**h]hdentry}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrIubh, }(hjrIhhhNhNubj)}(h**list**h]hlist}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrIubh ) is called.}(hjrIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM(hjHubh)}(h_**list** should be thread-private and eventually emptied by passing it to shrink_dentry_list().h](j)}(h**list**h]hlist}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubhW should be thread-private and eventually emptied by passing it to shrink_dentry_list().}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM,hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_find_any_alias (C function)c.d_find_any_aliashNtauh1hhjDhhhNhNubj)}(hhh](j)}(h6struct dentry * d_find_any_alias (struct inode *inode)h]j)}(h4struct dentry *d_find_any_alias(struct inode *inode)h](j )}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJhhhjJhMubh)}(hhh]jI)}(hdentryh]hdentry}(hj%JhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"Jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'JmodnameN classnameNjj )}j ]j)}jd_find_any_aliassbc.d_find_any_aliasasbuh1hhjJhhhjJhMubj2)}(h h]h }(hjFJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJhhhjJhMubj)}(hjh]h*}(hjTJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhjJhMubjC)}(hd_find_any_aliash]jI)}(hjCJh]hd_find_any_alias}(hjeJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaJubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjJhhhjJhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|Jubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|Jubh)}(hhh]jI)}(hinodeh]hinode}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj )}j ]jAJc.d_find_any_aliasasbuh1hhj|Jubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|Jubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|JubjI)}(hinodeh]hinode}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|Jubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjxJubah}(h]h ]h"]h$]h&]j`jauh1j<hjJhhhjJhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjIhhhjJhMubah}(h]jIah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjJhMhjIhhubjw)}(hhh]h)}(h find any alias for a given inodeh]h find any alias for a given inode}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjJhhubah}(h]h ]h"]h$]h&]uh1jvhjIhhhjJhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1jhhhjDhNhNubj)}(h**Parameters** ``struct inode *inode`` inode to find an alias for **Description** If any aliases exist for the given inode, take and return a reference for one of them. If no aliases exist, return ``NULL``.h](h)}(h**Parameters**h]j)}(hj#Kh]h Parameters}(hj%KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Kubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjKubj)}(hhh]j)}(h3``struct inode *inode`` inode to find an alias for h](j)}(h``struct inode *inode``h]j)}(hjBKh]hstruct inode *inode}(hjDKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Kubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjah"]h$]h&]uh1j1hjKhhhjKhMubh)}(hhh]jI)}(hdentryh]hdentry}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj )}j ]j)}j d_find_aliassbc.d_find_aliasasbuh1hhjKhhhjKhMubj2)}(h h]h }(hjLhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjKhhhjKhMubj)}(hjh]h*}(hj"LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMubjC)}(h d_find_aliash]jI)}(hjLh]h d_find_alias}(hj3LhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/Lubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjKhhhjKhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjNLhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJLubj2)}(h h]h }(hj[LhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJLubh)}(hhh]jI)}(hinodeh]hinode}(hjlLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnLmodnameN classnameNjj )}j ]jLc.d_find_aliasasbuh1hhjJLubj2)}(h h]h }(hjLhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJLubjI)}(hinodeh]hinode}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJLubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFLubah}(h]h ]h"]h$]h&]j`jauh1j<hjKhhhjKhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjKhhhjKhMubah}(h]jKah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjKhMhjKhhubjw)}(hhh]h)}(hgrab a hashed alias of inodeh]hgrab a hashed alias of inode}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjLhhubah}(h]h ]h"]h$]h&]uh1jvhjKhhhjKhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhjDhNhNubj)}(hX0**Parameters** ``struct inode *inode`` inode in question **Description** If inode has a hashed alias, or is a directory and has any alias, acquire the reference to alias and return it. Otherwise return NULL. Notice that if inode is a directory there can be only one alias and it can be unhashed only if it has no children, or if it is the root of a filesystem, or if the directory was renamed and d_revalidate was the first vfs operation to notice. If the inode has an IS_ROOT, DCACHE_DISCONNECTED alias, then prefer any other hashed alias over that one.h](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjLubj)}(hhh]j)}(h*``struct inode *inode`` inode in question h](j)}(h``struct inode *inode``h]j)}(hjMh]hstruct inode *inode}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj Mubj)}(hhh]h)}(hinode in questionh]hinode in question}(hj)MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%MhMhj&Mubah}(h]h ]h"]h$]h&]uh1jhj Mubeh}(h]h ]h"]h$]h&]uh1jhj%MhMhjMubah}(h]h ]h"]h$]h&]uh1jhjLubh)}(h**Description**h]j)}(hjKMh]h Description}(hjMMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIMubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjLubh)}(hXwIf inode has a hashed alias, or is a directory and has any alias, acquire the reference to alias and return it. Otherwise return NULL. Notice that if inode is a directory there can be only one alias and it can be unhashed only if it has no children, or if it is the root of a filesystem, or if the directory was renamed and d_revalidate was the first vfs operation to notice.h]hXwIf inode has a hashed alias, or is a directory and has any alias, acquire the reference to alias and return it. Otherwise return NULL. Notice that if inode is a directory there can be only one alias and it can be unhashed only if it has no children, or if it is the root of a filesystem, or if the directory was renamed and d_revalidate was the first vfs operation to notice.}(hjaMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjLubh)}(hiIf the inode has an IS_ROOT, DCACHE_DISCONNECTED alias, then prefer any other hashed alias over that one.h]hiIf the inode has an IS_ROOT, DCACHE_DISCONNECTED alias, then prefer any other hashed alias over that one.}(hjpMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j shrink_dcache_sb (C function)c.shrink_dcache_sbhNtauh1hhjDhhhNhNubj)}(hhh](j)}(h.void shrink_dcache_sb (struct super_block *sb)h]j)}(h-void shrink_dcache_sb(struct super_block *sb)h](jf)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjMhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMxubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMhhhjMhMxubjC)}(hshrink_dcache_sbh]jI)}(hshrink_dcache_sbh]hshrink_dcache_sb}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjMhhhjMhMxubj=)}(h(struct super_block *sb)h]jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjMubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMubh)}(hhh]jI)}(h super_blockh]h super_block}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj )}j ]j)}jjMsbc.shrink_dcache_sbasbuh1hhjMubj2)}(h h]h }(hjNhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMubj)}(hjh]h*}(hj(NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjI)}(hsbh]hsb}(hj5NhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjMubah}(h]h ]h"]h$]h&]j`jauh1j<hjMhhhjMhMxubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjMhhhjMhMxubah}(h]jMah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjMhMxhjMhhubjw)}(hhh]h)}(hshrink dcache for a superblockh]hshrink dcache for a superblock}(hj_NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMxhj\Nhhubah}(h]h ]h"]h$]h&]uh1jvhjMhhhjMhMxubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwNjjwNjjjuh1jhhhjDhNhNubj)}(h**Parameters** ``struct super_block *sb`` superblock **Description** Shrink the dcache for the specified super block. This is used to free the dcache before unmounting a file system.h](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM|hj{Nubj)}(hhh]j)}(h&``struct super_block *sb`` superblock h](j)}(h``struct super_block *sb``h]j)}(hjNh]hstruct super_block *sb}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMyhjNubj)}(hhh]h)}(h superblockh]h superblock}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMyhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMyhjNubah}(h]h ]h"]h$]h&]uh1jhj{Nubh)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM{hj{Nubh)}(hqShrink the dcache for the specified super block. This is used to free the dcache before unmounting a file system.h]hqShrink the dcache for the specified super block. This is used to free the dcache before unmounting a file system.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMzhj{Nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j path_has_submounts (C function)c.path_has_submountshNtauh1hhjDhhhNhNubj)}(hhh](j)}(h2int path_has_submounts (const struct path *parent)h]j)}(h1int path_has_submounts(const struct path *parent)h](jf)}(hinth]hint}(hj OhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjOhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj2)}(h h]h }(hj/OhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOhhhj.OhMubjC)}(hpath_has_submountsh]jI)}(hpath_has_submountsh]hpath_has_submounts}(hjAOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=Oubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjOhhhj.OhMubj=)}(h(const struct path *parent)h]jC)}(hconst struct path *parenth](j )}(hjh]hconst}(hj]OhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjYOubj2)}(h h]h }(hjjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjYOubj )}(hjh]hstruct}(hjxOhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjYOubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjYOubh)}(hhh]jI)}(hpathh]hpath}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj )}j ]j)}jjCOsbc.path_has_submountsasbuh1hhjYOubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjYOubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYOubjI)}(hparenth]hparent}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYOubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjUOubah}(h]h ]h"]h$]h&]j`jauh1j<hjOhhhj.OhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjOhhhj.OhMubah}(h]jOah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj.OhMhjOhhubjw)}(hhh]h)}(h8check for mounts over a dentry in the current namespace.h]h8check for mounts over a dentry in the current namespace.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jvhjOhhhj.OhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1jhhhjDhNhNubj)}(h**Parameters** ``const struct path *parent`` path to check. **Description** Return true if the parent or its subdirectories contain a mount point in the current namespace.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjPubj)}(hhh]j)}(h-``const struct path *parent`` path to check. h](j)}(h``const struct path *parent``h]j)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Pubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj6Pubj)}(hhh]h)}(hpath to check.h]hpath to check.}(hjUPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQPhMhjRPubah}(h]h ]h"]h$]h&]uh1jhj6Pubeh}(h]h ]h"]h$]h&]uh1jhjQPhMhj3Pubah}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j)}(hjwPh]h Description}(hjyPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjPubh)}(h_Return true if the parent or its subdirectories contain a mount point in the current namespace.h]h_Return true if the parent or its subdirectories contain a mount point in the current namespace.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_invalidate (C function)c.d_invalidatehNtauh1hhjDhhhNhNubj)}(hhh](j)}(h)void d_invalidate (struct dentry *dentry)h]j)}(h(void d_invalidate(struct dentry *dentry)h](jf)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjPhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMAubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjPhhhjPhMAubjC)}(h d_invalidateh]jI)}(h d_invalidateh]h d_invalidate}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjPubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjPhhhjPhMAubj=)}(h(struct dentry *dentry)h]jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjPubj2)}(h h]h }(hjQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjPubh)}(hhh]jI)}(hdentryh]hdentry}(hjQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj )}j ]j)}jjPsbc.d_invalidateasbuh1hhjPubj2)}(h h]h }(hj7QhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjPubj)}(hjh]h*}(hjEQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjI)}(hdentryh]hdentry}(hjRQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjPubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjPubah}(h]h ]h"]h$]h&]j`jauh1j<hjPhhhjPhMAubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjPhhhjPhMAubah}(h]jPah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjPhMAhjPhhubjw)}(hhh]h)}(h(detach submounts, prune dcache, and droph]h(detach submounts, prune dcache, and drop}(hj|QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMAhjyQhhubah}(h]h ]h"]h$]h&]uh1jvhjPhhhjPhMAubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1jhhhjDhNhNubj)}(h]**Parameters** ``struct dentry *dentry`` dentry to invalidate (aka detach, prune and drop)h](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMEhjQubj)}(hhh]j)}(hK``struct dentry *dentry`` dentry to invalidate (aka detach, prune and drop)h](j)}(h``struct dentry *dentry``h]j)}(hjQh]hstruct dentry *dentry}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMGhjQubj)}(hhh]h)}(h1dentry to invalidate (aka detach, prune and drop)h]h1dentry to invalidate (aka detach, prune and drop)}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMBhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMGhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_alloc (C function) c.d_allochNtauh1hhjDhhhNhNubj)}(hhh](j)}(hIstruct dentry * d_alloc (struct dentry * parent, const struct qstr *name)h]j)}(hFstruct dentry *d_alloc(struct dentry *parent, const struct qstr *name)h](j )}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj2)}(h h]h }(hj%RhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRhhhj$RhMubh)}(hhh]jI)}(hdentryh]hdentry}(hj6RhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8RmodnameN classnameNjj )}j ]j)}jd_allocsb c.d_allocasbuh1hhjRhhhj$RhMubj2)}(h h]h }(hjWRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRhhhj$RhMubj)}(hjh]h*}(hjeRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhj$RhMubjC)}(hd_alloch]jI)}(hjTRh]hd_alloc}(hjvRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrRubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjRhhhj$RhMubj=)}(h0(struct dentry *parent, const struct qstr *name)h](jC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubh)}(hhh]jI)}(hdentryh]hdentry}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj )}j ]jRR c.d_allocasbuh1hhjRubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjI)}(hparenth]hparent}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubjC)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubj2)}(h h]h }(hjShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubj )}(hjh]hstruct}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubj2)}(h h]h }(hj)ShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubh)}(hhh]jI)}(hqstrh]hqstr}(hj:ShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7Subah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjah"]h$]h&]uh1j1hjRubj)}(hjh]h*}(hjfShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjI)}(hnameh]hname}(hjsShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubeh}(h]h ]h"]h$]h&]j`jauh1j<hjRhhhj$RhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjRhhhj$RhMubah}(h]j Rah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj$RhMhj Rhhubjw)}(hhh]h)}(hallocate a dcache entryh]hallocate a dcache entry}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjShhubah}(h]h ]h"]h$]h&]uh1jvhj Rhhhj$RhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jhhhjDhNhNubj)}(hXU**Parameters** ``struct dentry * parent`` parent of entry to allocate ``const struct qstr *name`` qstr of the name **Description** Allocates a dentry. It returns ``NULL`` if there is insufficient memory available. On a success the dentry is returned. The name passed in is copied and the copy passed in may be reused after this call.h](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjSubj)}(hhh](j)}(h7``struct dentry * parent`` parent of entry to allocate h](j)}(h``struct dentry * parent``h]j)}(hjSh]hstruct dentry * parent}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjSubj)}(hhh]h)}(hparent of entry to allocateh]hparent of entry to allocate}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubj)}(h-``const struct qstr *name`` qstr of the name h](j)}(h``const struct qstr *name``h]j)}(hjTh]hconst struct qstr *name}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjTubj)}(hhh]h)}(hqstr of the nameh]hqstr of the name}(hj0ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ThMhj-Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj,ThMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjRTh]h Description}(hjTThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPTubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjSubh)}(hAllocates a dentry. It returns ``NULL`` if there is insufficient memory available. On a success the dentry is returned. The name passed in is copied and the copy passed in may be reused after this call.h](hAllocates a dentry. It returns }(hjhThhhNhNubj)}(h``NULL``h]hNULL}(hjpThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhTubh if there is insufficient memory available. On a success the dentry is returned. The name passed in is copied and the copy passed in may be reused after this call.}(hjhThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_instantiate (C function)c.d_instantiatehNtauh1hhjDhhhNhNubj)}(hhh](j)}(h?void d_instantiate (struct dentry *entry, struct inode * inode)h]j)}(h=void d_instantiate(struct dentry *entry, struct inode *inode)h](jf)}(hvoidh]hvoid}(hjThhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjThhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMnubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjThhhjThMnubjC)}(h d_instantiateh]jI)}(h d_instantiateh]h d_instantiate}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjThhhjThMnubj=)}(h+(struct dentry *entry, struct inode *inode)h](jC)}(hstruct dentry *entryh](j )}(hjh]hstruct}(hjThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjTubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTubh)}(hhh]jI)}(hdentryh]hdentry}(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftarget3jUmodnameN classnameNjj )}j ]j)}jjTsbc.d_instantiateasbuh1hhjTubj2)}(h h]h }(hj$UhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTubj)}(hjh]h*}(hj2UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjI)}(hentryh]hentry}(hj?UhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjTubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjXUhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjTUubj2)}(h h]h }(hjeUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTUubh)}(hhh]jI)}(hinodeh]hinode}(hjvUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxUmodnameN classnameNjj )}j ]j Uc.d_instantiateasbuh1hhjTUubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTUubjI)}(hinodeh]hinode}(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTUubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjTubeh}(h]h ]h"]h$]h&]j`jauh1j<hjThhhjThMnubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjThhhjThMnubah}(h]jTah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjThMnhjThhubjw)}(hhh]h)}(h&fill in inode information for a dentryh]h&fill in inode information for a dentry}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMnhjUhhubah}(h]h ]h"]h$]h&]uh1jvhjThhhjThMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``struct dentry *entry`` dentry to complete ``struct inode * inode`` inode to attach to this dentry **Description** Fill in inode information in the entry. This turns negative dentries into productive full members of society. NOTE! This assumes that the inode count has been incremented (or otherwise set) by the caller to indicate that it is now in use by the dcache.h](h)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMrhjUubj)}(hhh](j)}(h,``struct dentry *entry`` dentry to complete h](j)}(h``struct dentry *entry``h]j)}(hjVh]hstruct dentry *entry}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMohjVubj)}(hhh]h)}(hdentry to completeh]hdentry to complete}(hj3VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/VhMohj0Vubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhj/VhMohjVubj)}(h8``struct inode * inode`` inode to attach to this dentry h](j)}(h``struct inode * inode``h]j)}(hjSVh]hstruct inode * inode}(hjUVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQVubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMphjMVubj)}(hhh]h)}(hinode to attach to this dentryh]hinode to attach to this dentry}(hjlVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhVhMphjiVubah}(h]h ]h"]h$]h&]uh1jhjMVubeh}(h]h ]h"]h$]h&]uh1jhjhVhMphjVubeh}(h]h ]h"]h$]h&]uh1jhjUubh)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMrhjUubh)}(h'Fill in inode information in the entry.h]h'Fill in inode information in the entry.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMqhjUubh)}(hEThis turns negative dentries into productive full members of society.h]hEThis turns negative dentries into productive full members of society.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMshjUubh)}(hNOTE! This assumes that the inode count has been incremented (or otherwise set) by the caller to indicate that it is now in use by the dcache.h]hNOTE! This assumes that the inode count has been incremented (or otherwise set) by the caller to indicate that it is now in use by the dcache.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMvhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_obtain_alias (C function)c.d_obtain_aliashNtauh1hhjDhhhNhNubj)}(hhh](j)}(h4struct dentry * d_obtain_alias (struct inode *inode)h]j)}(h2struct dentry *d_obtain_alias(struct inode *inode)h](j )}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjVhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVhhhjVhMubh)}(hhh]jI)}(hdentryh]hdentry}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj )}j ]j)}jd_obtain_aliassbc.d_obtain_aliasasbuh1hhjVhhhjVhMubj2)}(h h]h }(hj1WhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVhhhjVhMubj)}(hjh]h*}(hj?WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjVhMubjC)}(hd_obtain_aliash]jI)}(hj.Wh]hd_obtain_alias}(hjPWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLWubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjVhhhjVhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjkWhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjgWubj2)}(h h]h }(hjxWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgWubh)}(hhh]jI)}(hinodeh]hinode}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj )}j ]j,Wc.d_obtain_aliasasbuh1hhjgWubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgWubjI)}(hinodeh]hinode}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgWubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjcWubah}(h]h ]h"]h$]h&]j`jauh1j<hjVhhhjVhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjVhhhjVhMubah}(h]jVah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjVhMhjVhhubjw)}(hhh]h)}(h8find or allocate a DISCONNECTED dentry for a given inodeh]h8find or allocate a DISCONNECTED dentry for a given inode}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjWhhubah}(h]h ]h"]h$]h&]uh1jvhjVhhhjVhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1jhhhjDhNhNubj)}(hX/**Parameters** ``struct inode *inode`` inode to allocate the dentry for **Description** Obtain a dentry for an inode resulting from NFS filehandle conversion or similar open by handle operations. The returned dentry may be anonymous, or may have a full name (if the inode was already in the cache). When called on a directory inode, we must ensure that the inode only ever has one dentry. If a dentry is found, that is returned instead of allocating a new one. On successful return, the reference to the inode has been transferred to the dentry. In case of an error the reference on the inode is released. To make it easier to use in export operations a ``NULL`` or IS_ERR inode may be passed in and the error will be propagated to the return value, with a ``NULL`` **inode** replaced by ERR_PTR(-ESTALE).h](h)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Xubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjXubj)}(hhh]j)}(h9``struct inode *inode`` inode to allocate the dentry for h](j)}(h``struct inode *inode``h]j)}(hj-Xh]hstruct inode *inode}(hj/XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Xubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj'Xubj)}(hhh]h)}(h inode to allocate the dentry forh]h inode to allocate the dentry for}(hjFXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBXhMhjCXubah}(h]h ]h"]h$]h&]uh1jhj'Xubeh}(h]h ]h"]h$]h&]uh1jhjBXhMhj$Xubah}(h]h ]h"]h$]h&]uh1jhjXubh)}(h**Description**h]j)}(hjhXh]h Description}(hjjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfXubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjXubh)}(hObtain a dentry for an inode resulting from NFS filehandle conversion or similar open by handle operations. The returned dentry may be anonymous, or may have a full name (if the inode was already in the cache).h]hObtain a dentry for an inode resulting from NFS filehandle conversion or similar open by handle operations. The returned dentry may be anonymous, or may have a full name (if the inode was already in the cache).}(hj~XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjXubh)}(hWhen called on a directory inode, we must ensure that the inode only ever has one dentry. If a dentry is found, that is returned instead of allocating a new one.h]hWhen called on a directory inode, we must ensure that the inode only ever has one dentry. If a dentry is found, that is returned instead of allocating a new one.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjXubh)}(hXYOn successful return, the reference to the inode has been transferred to the dentry. In case of an error the reference on the inode is released. To make it easier to use in export operations a ``NULL`` or IS_ERR inode may be passed in and the error will be propagated to the return value, with a ``NULL`` **inode** replaced by ERR_PTR(-ESTALE).h](hOn successful return, the reference to the inode has been transferred to the dentry. In case of an error the reference on the inode is released. To make it easier to use in export operations a }(hjXhhhNhNubj)}(h``NULL``h]hNULL}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh_ or IS_ERR inode may be passed in and the error will be propagated to the return value, with a }(hjXhhhNhNubj)}(h``NULL``h]hNULL}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh }(hjXhhhNhNubj)}(h **inode**h]hinode}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh replaced by ERR_PTR(-ESTALE).}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_obtain_root (C function)c.d_obtain_roothNtauh1hhjDhhhNhNubj)}(hhh](j)}(h3struct dentry * d_obtain_root (struct inode *inode)h]j)}(h1struct dentry *d_obtain_root(struct inode *inode)h](j )}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjXhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj2)}(h h]h }(hjYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXhhhjYhM ubh)}(hhh]jI)}(hdentryh]hdentry}(hj YhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"YmodnameN classnameNjj )}j ]j)}j d_obtain_rootsbc.d_obtain_rootasbuh1hhjXhhhjYhM ubj2)}(h h]h }(hjAYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXhhhjYhM ubj)}(hjh]h*}(hjOYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjYhM ubjC)}(h d_obtain_rooth]jI)}(hj>Yh]h d_obtain_root}(hj`YhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\Yubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjXhhhjYhM ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj{YhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwYubj2)}(h h]h }(hjYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwYubh)}(hhh]jI)}(hinodeh]hinode}(hjYhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj )}j ]jah"]h$]h&]uh1j1hjwYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwYubjI)}(hinodeh]hinode}(hjYhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwYubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjsYubah}(h]h ]h"]h$]h&]j`jauh1j<hjXhhhjYhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjXhhhjYhM ubah}(h]jXah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjYhM hjXhhubjw)}(hhh]h)}(h+find or allocate a dentry for a given inodeh]h+find or allocate a dentry for a given inode}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjYhhubah}(h]h ]h"]h$]h&]uh1jvhjXhhhjYhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhjDhNhNubj)}(hXR**Parameters** ``struct inode *inode`` inode to allocate the dentry for **Description** Obtain an IS_ROOT dentry for the root of a filesystem. We must ensure that directory inodes only ever have one dentry. If a dentry is found, that is returned instead of allocating a new one. On successful return, the reference to the inode has been transferred to the dentry. In case of an error the reference on the inode is released. A ``NULL`` or IS_ERR inode may be passed in and will be the error will be propagate to the return value, with a ``NULL`` **inode** replaced by ERR_PTR(-ESTALE).h](h)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjZubj)}(hhh]j)}(h9``struct inode *inode`` inode to allocate the dentry for h](j)}(h``struct inode *inode``h]j)}(hj=Zh]hstruct inode *inode}(hj?ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Zubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj7Zubj)}(hhh]h)}(h inode to allocate the dentry forh]h inode to allocate the dentry for}(hjVZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRZhM hjSZubah}(h]h ]h"]h$]h&]uh1jhj7Zubeh}(h]h ]h"]h$]h&]uh1jhjRZhM hj4Zubah}(h]h ]h"]h$]h&]uh1jhjZubh)}(h**Description**h]j)}(hjxZh]h Description}(hjzZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvZubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjZubh)}(h6Obtain an IS_ROOT dentry for the root of a filesystem.h]h6Obtain an IS_ROOT dentry for the root of a filesystem.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjZubh)}(hWe must ensure that directory inodes only ever have one dentry. If a dentry is found, that is returned instead of allocating a new one.h]hWe must ensure that directory inodes only ever have one dentry. If a dentry is found, that is returned instead of allocating a new one.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjZubh)}(hX3On successful return, the reference to the inode has been transferred to the dentry. In case of an error the reference on the inode is released. A ``NULL`` or IS_ERR inode may be passed in and will be the error will be propagate to the return value, with a ``NULL`` **inode** replaced by ERR_PTR(-ESTALE).h](hOn successful return, the reference to the inode has been transferred to the dentry. In case of an error the reference on the inode is released. A }(hjZhhhNhNubj)}(h``NULL``h]hNULL}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubhf or IS_ERR inode may be passed in and will be the error will be propagate to the return value, with a }(hjZhhhNhNubj)}(h``NULL``h]hNULL}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh }(hjZhhhNhNubj)}(h **inode**h]hinode}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh replaced by ERR_PTR(-ESTALE).}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_add_ci (C function) c.d_add_cihNtauh1hhjDhhhNhNubj)}(hhh](j)}(hXstruct dentry * d_add_ci (struct dentry *dentry, struct inode *inode, struct qstr *name)h]j)}(hVstruct dentry *d_add_ci(struct dentry *dentry, struct inode *inode, struct qstr *name)h](j )}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj [hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj [hhhj[hM ubh)}(hhh]jI)}(hdentryh]hdentry}(hj0[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2[modnameN classnameNjj )}j ]j)}jd_add_cisb c.d_add_ciasbuh1hhj [hhhj[hM ubj2)}(h h]h }(hjQ[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj [hhhj[hM ubj)}(hjh]h*}(hj_[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj [hhhj[hM ubjC)}(hd_add_cih]jI)}(hjN[h]hd_add_ci}(hjp[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjl[ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj [hhhj[hM ubj=)}(h?(struct dentry *dentry, struct inode *inode, struct qstr *name)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj[ubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubh)}(hhh]jI)}(hdentryh]hdentry}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj )}j ]jL[ c.d_add_ciasbuh1hhj[ubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjI)}(hdentryh]hdentry}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[ubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj[ubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubh)}(hhh]jI)}(hinodeh]hinode}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj )}j ]jL[ c.d_add_ciasbuh1hhj[ubj2)}(h h]h }(hj7\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubj)}(hjh]h*}(hjE\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjI)}(hinodeh]hinode}(hjR\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[ubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjk\hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjg\ubj2)}(h h]h }(hjx\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjg\ubh)}(hhh]jI)}(hqstrh]hqstr}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj )}j ]jL[ c.d_add_ciasbuh1hhjg\ubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjg\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg\ubjI)}(hnameh]hname}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjg\ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj [hhhj[hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj [hhhj[hM ubah}(h]j[ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj[hM hj[hhubjw)}(hhh]h)}(h2lookup or allocate new dentry with case-exact nameh]h2lookup or allocate new dentry with case-exact name}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj\hhubah}(h]h ]h"]h$]h&]uh1jvhj[hhhj[hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` the negative dentry that was passed to the parent's lookup func ``struct inode *inode`` the inode case-insensitive lookup has found ``struct qstr *name`` the case-exact name to be associated with the returned dentry **Description** This is to avoid filling the dcache with case-insensitive names to the same inode, only the actual correct case is stored in the dcache for case-insensitive filesystems. For a case-insensitive lookup match and if the case-exact dentry already exists in the dcache, use it and return it. If no entry exists with the exact case name, allocate new dentry with the exact case, and return the spliced entry.h](h)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ]ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj]ubj)}(hhh](j)}(hZ``struct dentry *dentry`` the negative dentry that was passed to the parent's lookup func h](j)}(h``struct dentry *dentry``h]j)}(hj-]h]hstruct dentry *dentry}(hj/]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj']ubj)}(hhh]h)}(h?the negative dentry that was passed to the parent's lookup funch]hAthe negative dentry that was passed to the parent’s lookup func}(hjF]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB]hM hjC]ubah}(h]h ]h"]h$]h&]uh1jhj']ubeh}(h]h ]h"]h$]h&]uh1jhjB]hM hj$]ubj)}(hD``struct inode *inode`` the inode case-insensitive lookup has found h](j)}(h``struct inode *inode``h]j)}(hjf]h]hstruct inode *inode}(hjh]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj`]ubj)}(hhh]h)}(h+the inode case-insensitive lookup has foundh]h+the inode case-insensitive lookup has found}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{]hM hj|]ubah}(h]h ]h"]h$]h&]uh1jhj`]ubeh}(h]h ]h"]h$]h&]uh1jhj{]hM hj$]ubj)}(hT``struct qstr *name`` the case-exact name to be associated with the returned dentry h](j)}(h``struct qstr *name``h]j)}(hj]h]hstruct qstr *name}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj]ubj)}(hhh]h)}(h=the case-exact name to be associated with the returned dentryh]h=the case-exact name to be associated with the returned dentry}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hM hj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM hj$]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj]ubh)}(hThis is to avoid filling the dcache with case-insensitive names to the same inode, only the actual correct case is stored in the dcache for case-insensitive filesystems.h]hThis is to avoid filling the dcache with case-insensitive names to the same inode, only the actual correct case is stored in the dcache for case-insensitive filesystems.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj]ubh)}(htFor a case-insensitive lookup match and if the case-exact dentry already exists in the dcache, use it and return it.h]htFor a case-insensitive lookup match and if the case-exact dentry already exists in the dcache, use it and return it.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj]ubh)}(hsIf no entry exists with the exact case name, allocate new dentry with the exact case, and return the spliced entry.h]hsIf no entry exists with the exact case name, allocate new dentry with the exact case, and return the spliced entry.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM" hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_same_name (C function) c.d_same_namehNtauh1hhjDhhhNhNubj)}(hhh](j)}(hdbool d_same_name (const struct dentry *dentry, const struct dentry *parent, const struct qstr *name)h]j)}(hcbool d_same_name(const struct dentry *dentry, const struct dentry *parent, const struct qstr *name)h](jf)}(hjih]hbool}(hj=^hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj9^hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chML ubj2)}(h h]h }(hjK^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9^hhhjJ^hML ubjC)}(h d_same_nameh]jI)}(h d_same_nameh]h d_same_name}(hj]^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjY^ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj9^hhhjJ^hML ubj=)}(hS(const struct dentry *dentry, const struct dentry *parent, const struct qstr *name)h](jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjy^hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhju^ubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hju^ubj )}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhju^ubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hju^ubh)}(hhh]jI)}(hdentryh]hdentry}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj )}j ]j)}jj_^sb c.d_same_nameasbuh1hhju^ubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hju^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju^ubjI)}(hdentryh]hdentry}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhju^ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjq^ubjC)}(hconst struct dentry *parenth](j )}(hjh]hconst}(hj_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj_ubj2)}(h h]h }(hj_hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubj )}(hjh]hstruct}(hj!_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj_ubj2)}(h h]h }(hj._hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubh)}(hhh]jI)}(hdentryh]hdentry}(hj?_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjA_modnameN classnameNjj )}j ]j^ c.d_same_nameasbuh1hhj_ubj2)}(h h]h }(hj]_hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubj)}(hjh]h*}(hjk_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjI)}(hparenth]hparent}(hjx_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjq^ubjC)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hj_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj_ubj2)}(h h]h }(hj_hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubj )}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj_ubj2)}(h h]h }(hj_hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubh)}(hhh]jI)}(hqstrh]hqstr}(hj_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj )}j ]j^ c.d_same_nameasbuh1hhj_ubj2)}(h h]h }(hj_hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjI)}(hnameh]hname}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjq^ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj9^hhhjJ^hML ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj5^hhhjJ^hML ubah}(h]j0^ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjJ^hML hj2^hhubjw)}(hhh]h)}(h(compare dentry name with case-exact nameh]h(compare dentry name with case-exact name}(hj-`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chML hj*`hhubah}(h]h ]h"]h$]h&]uh1jvhj2^hhhjJ^hML ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjE`jjE`jjjuh1jhhhjDhNhNubj)}(hX-**Parameters** ``const struct dentry *dentry`` the negative dentry that was passed to the parent's lookup func ``const struct dentry *parent`` parent dentry ``const struct qstr *name`` the case-exact name to be associated with the returned dentry **Return** true if names are same, or falseh](h)}(h**Parameters**h]j)}(hjO`h]h Parameters}(hjQ`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM`ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMP hjI`ubj)}(hhh](j)}(h```const struct dentry *dentry`` the negative dentry that was passed to the parent's lookup func h](j)}(h``const struct dentry *dentry``h]j)}(hjn`h]hconst struct dentry *dentry}(hjp`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMM hjh`ubj)}(hhh]h)}(h?the negative dentry that was passed to the parent's lookup funch]hAthe negative dentry that was passed to the parent’s lookup func}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMM hj`ubah}(h]h ]h"]h$]h&]uh1jhjh`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMM hje`ubj)}(h.``const struct dentry *parent`` parent dentry h](j)}(h``const struct dentry *parent``h]j)}(hj`h]hconst struct dentry *parent}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMN hj`ubj)}(hhh]h)}(h parent dentryh]h parent dentry}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMN hj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMN hje`ubj)}(hZ``const struct qstr *name`` the case-exact name to be associated with the returned dentry h](j)}(h``const struct qstr *name``h]j)}(hj`h]hconst struct qstr *name}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMO hj`ubj)}(hhh]h)}(h=the case-exact name to be associated with the returned dentryh]h=the case-exact name to be associated with the returned dentry}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMO hj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMO hje`ubeh}(h]h ]h"]h$]h&]uh1jhjI`ubh)}(h **Return**h]j)}(hjah]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMQ hjI`ubh)}(h true if names are same, or falseh]h true if names are same, or false}(hj1ahhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMQ hjI`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_lookup (C function) c.d_lookuphNtauh1hhjDhhhNhNubj)}(hhh](j)}(hOstruct dentry * d_lookup (const struct dentry *parent, const struct qstr *name)h]j)}(hMstruct dentry *d_lookup(const struct dentry *parent, const struct qstr *name)h](j )}(hjh]hstruct}(hj`ahhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\ahhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj2)}(h h]h }(hjnahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\ahhhjmahM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj )}j ]j)}jd_lookupsb c.d_lookupasbuh1hhj\ahhhjmahM ubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\ahhhjmahM ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ahhhjmahM ubjC)}(hd_lookuph]jI)}(hjah]hd_lookup}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj\ahhhjmahM ubj=)}(h6(const struct dentry *parent, const struct qstr *name)h](jC)}(hconst struct dentry *parenth](j )}(hjh]hconst}(hjahhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjaubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubj )}(hjh]hstruct}(hjahhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjaubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubh)}(hhh]jI)}(hdentryh]hdentry}(hjbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj )}j ]ja c.d_lookupasbuh1hhjaubj2)}(h h]h }(hj1bhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubj)}(hjh]h*}(hj?bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjI)}(hparenth]hparent}(hjLbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubjC)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hjebhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjabubj2)}(h h]h }(hjrbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjabubj )}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjabubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjabubh)}(hhh]jI)}(hqstrh]hqstr}(hjbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj )}j ]ja c.d_lookupasbuh1hhjabubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjabubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjabubjI)}(hnameh]hname}(hjbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjabubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubeh}(h]h ]h"]h$]h&]j`jauh1j<hj\ahhhjmahM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjXahhhjmahM ubah}(h]jSaah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjmahM hjUahhubjw)}(hhh]h)}(hsearch for a dentryh]hsearch for a dentry}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjbhhubah}(h]h ]h"]h$]h&]uh1jvhjUahhhjmahM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``const struct dentry *parent`` parent dentry ``const struct qstr *name`` qstr of name we wish to find **Return** dentry, or NULL **Description** d_lookup searches the children of the parent dentry for the name in question. If the dentry is found its reference count is incremented and the dentry is returned. The caller must use dput to free the entry when it has finished using it. ``NULL`` is returned if the dentry does not exist.h](h)}(h**Parameters**h]j)}(hj#ch]h Parameters}(hj%chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!cubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjcubj)}(hhh](j)}(h.``const struct dentry *parent`` parent dentry h](j)}(h``const struct dentry *parent``h]j)}(hjBch]hconst struct dentry *parent}(hjDchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@cubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjah"]h$]h&]uh1j1hj0dhhhjBdhMx ubjC)}(hd_deleteh]jI)}(hd_deleteh]hd_delete}(hjUdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQdubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj0dhhhjBdhMx ubj=)}(h(struct dentry *dentry)h]jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjqdhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjmdubj2)}(h h]h }(hj~dhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmdubh)}(hhh]jI)}(hdentryh]hdentry}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj )}j ]j)}jjWdsb c.d_deleteasbuh1hhjmdubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmdubjI)}(hdentryh]hdentry}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmdubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjidubah}(h]h ]h"]h$]h&]j`jauh1j<hj0dhhhjBdhMx ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj,dhhhjBdhMx ubah}(h]j'dah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjBdhMx hj)dhhubjw)}(hhh]h)}(hdelete a dentryh]hdelete a dentry}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMx hjdhhubah}(h]h ]h"]h$]h&]uh1jvhj)dhhhjBdhMx ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj ejj ejjjuh1jhhhjDhNhNubj)}(h**Parameters** ``struct dentry * dentry`` The dentry to delete **Description** Turn the dentry into a negative dentry if possible, otherwise remove it from the hash queues so it can be deleted laterh](h)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM| hjeubj)}(hhh]j)}(h0``struct dentry * dentry`` The dentry to delete h](j)}(h``struct dentry * dentry``h]j)}(hj5eh]hstruct dentry * dentry}(hj7ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3eubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMy hj/eubj)}(hhh]h)}(hThe dentry to deleteh]hThe dentry to delete}(hjNehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJehMy hjKeubah}(h]h ]h"]h$]h&]uh1jhj/eubeh}(h]h ]h"]h$]h&]uh1jhjJehMy hj,eubah}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hjpeh]h Description}(hjrehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjneubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM{ hjeubh)}(hwTurn the dentry into a negative dentry if possible, otherwise remove it from the hash queues so it can be deleted laterh]hwTurn the dentry into a negative dentry if possible, otherwise remove it from the hash queues so it can be deleted later}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMz hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_rehash (C function) c.d_rehashhNtauh1hhjDhhhNhNubj)}(hhh](j)}(h%void d_rehash (struct dentry * entry)h]j)}(h#void d_rehash(struct dentry *entry)h](jf)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjehhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjehhhjehM ubjC)}(hd_rehashh]jI)}(hd_rehashh]hd_rehash}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjehhhjehM ubj=)}(h(struct dentry *entry)h]jC)}(hstruct dentry *entryh](j )}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubh)}(hhh]jI)}(hdentryh]hdentry}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj fubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj )}j ]j)}jjesb c.d_rehashasbuh1hhjeubj2)}(h h]h }(hj0fhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj)}(hjh]h*}(hj>fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjI)}(hentryh]hentry}(hjKfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubah}(h]h ]h"]h$]h&]j`jauh1j<hjehhhjehM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjehhhjehM ubah}(h]jeah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjehM hjehhubjw)}(hhh]h)}(hadd an entry back to the hashh]hadd an entry back to the hash}(hjufhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjrfhhubah}(h]h ]h"]h$]h&]uh1jvhjehhhjehM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfjjfjjjuh1jhhhjDhNhNubj)}(h**Parameters** ``struct dentry * entry`` dentry to add to the hash **Description** Adds a dentry to the hash according to its name.h](h)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjfubj)}(hhh]j)}(h4``struct dentry * entry`` dentry to add to the hash h](j)}(h``struct dentry * entry``h]j)}(hjfh]hstruct dentry * entry}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjfubj)}(hhh]h)}(hdentry to add to the hashh]hdentry to add to the hash}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjfubh)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjfubh)}(h0Adds a dentry to the hash according to its name.h]h0Adds a dentry to the hash according to its name.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_add (C function)c.d_addhNtauh1hhjDhhhNhNubj)}(hhh](j)}(h6void d_add (struct dentry *entry, struct inode *inode)h]j)}(h5void d_add(struct dentry *entry, struct inode *inode)h](jf)}(hvoidh]hvoid}(hj6ghhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj2ghhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj2)}(h h]h }(hjEghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj2ghhhjDghM ubjC)}(hd_addh]jI)}(hd_addh]hd_add}(hjWghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSgubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj2ghhhjDghM ubj=)}(h+(struct dentry *entry, struct inode *inode)h](jC)}(hstruct dentry *entryh](j )}(hjh]hstruct}(hjsghhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjogubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjogubh)}(hhh]jI)}(hdentryh]hdentry}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj )}j ]j)}jjYgsbc.d_addasbuh1hhjogubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjogubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjogubjI)}(hentryh]hentry}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjogubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjkgubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjghhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjgubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj )}j ]jgc.d_addasbuh1hhjgubj2)}(h h]h }(hj!hhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h*}(hj/hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(hinodeh]hinode}(hjah"]h$]h&]uh1j1hjnihhhjihM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj )}j ]j)}jd_splice_aliassbc.d_splice_aliasasbuh1hhjnihhhjihM ubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnihhhjihM ubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnihhhjihM ubjC)}(hd_splice_aliash]jI)}(hjih]hd_splice_alias}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjnihhhjihM ubj=)}(h,(struct inode *inode, struct dentry *dentry)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjiubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubh)}(hhh]jI)}(hinodeh]hinode}(hj jhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj jmodnameN classnameNjj )}j ]jic.d_splice_aliasasbuh1hhjiubj2)}(h h]h }(hj(jhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubj)}(hjh]h*}(hj6jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjI)}(hinodeh]hinode}(hjCjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjiubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj\jhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjXjubj2)}(h h]h }(hjijhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXjubh)}(hhh]jI)}(hdentryh]hdentry}(hjzjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|jmodnameN classnameNjj )}j ]jic.d_splice_aliasasbuh1hhjXjubj2)}(h h]h }(hjjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXjubjI)}(hdentryh]hdentry}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjiubeh}(h]h ]h"]h$]h&]j`jauh1j<hjnihhhjihM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjjihhhjihM ubah}(h]jeiah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjihM hjgihhubjw)}(hhh]h)}(h8splice a disconnected dentry into the tree if one existsh]h8splice a disconnected dentry into the tree if one exists}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjjhhubah}(h]h ]h"]h$]h&]uh1jvhjgihhhjihM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``struct inode *inode`` the inode which may have a disconnected dentry ``struct dentry *dentry`` a negative dentry which we want to point to the inode. **Description** If inode is a directory and has an IS_ROOT alias, then d_move that in place of the given dentry and return it, else simply d_add the inode to the dentry and return NULL. If a non-IS_ROOT directory is found, the filesystem is corrupt, and we should error out: directories can't have multiple aliases. This is needed in the lookup routine of any filesystem that is exportable (via knfsd) so that we can build dcache paths to directories effectively. If a dentry was found and moved, then it is returned. Otherwise NULL is returned. This matches the expected return value of ->lookup. Cluster filesystems may call this function with a negative, hashed dentry. In that case, we know that the inode will be a regular file, and also this will only occur during atomic_open. So we need to check for the dentry being already hashed only in the final case.h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjjubj)}(hhh](j)}(hG``struct inode *inode`` the inode which may have a disconnected dentry h](j)}(h``struct inode *inode``h]j)}(hjkh]hstruct inode *inode}(hj khhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjkubj)}(hhh]h)}(h.the inode which may have a disconnected dentryh]h.the inode which may have a disconnected dentry}(hj7khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3khM hj4kubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj3khM hjkubj)}(hQ``struct dentry *dentry`` a negative dentry which we want to point to the inode. h](j)}(h``struct dentry *dentry``h]j)}(hjWkh]hstruct dentry *dentry}(hjYkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUkubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjQkubj)}(hhh]h)}(h6a negative dentry which we want to point to the inode.h]h6a negative dentry which we want to point to the inode.}(hjpkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlkhM hjmkubah}(h]h ]h"]h$]h&]uh1jhjQkubeh}(h]h ]h"]h$]h&]uh1jhjlkhM hjkubeh}(h]h ]h"]h$]h&]uh1jhjjubh)}(h**Description**h]j)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjjubh)}(hIf inode is a directory and has an IS_ROOT alias, then d_move that in place of the given dentry and return it, else simply d_add the inode to the dentry and return NULL.h]hIf inode is a directory and has an IS_ROOT alias, then d_move that in place of the given dentry and return it, else simply d_add the inode to the dentry and return NULL.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjjubh)}(hIf a non-IS_ROOT directory is found, the filesystem is corrupt, and we should error out: directories can't have multiple aliases.h]hIf a non-IS_ROOT directory is found, the filesystem is corrupt, and we should error out: directories can’t have multiple aliases.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjjubh)}(hThis is needed in the lookup routine of any filesystem that is exportable (via knfsd) so that we can build dcache paths to directories effectively.h]hThis is needed in the lookup routine of any filesystem that is exportable (via knfsd) so that we can build dcache paths to directories effectively.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjjubh)}(hIf a dentry was found and moved, then it is returned. Otherwise NULL is returned. This matches the expected return value of ->lookup.h]hIf a dentry was found and moved, then it is returned. Otherwise NULL is returned. This matches the expected return value of ->lookup.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjjubh)}(hX Cluster filesystems may call this function with a negative, hashed dentry. In that case, we know that the inode will be a regular file, and also this will only occur during atomic_open. So we need to check for the dentry being already hashed only in the final case.h]hX Cluster filesystems may call this function with a negative, hashed dentry. In that case, we know that the inode will be a regular file, and also this will only occur during atomic_open. So we need to check for the dentry being already hashed only in the final case.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j is_subdir (C function) c.is_subdirhNtauh1hhjDhhhNhNubj)}(hhh](j)}(hEbool is_subdir (struct dentry *new_dentry, struct dentry *old_dentry)h]j)}(hDbool is_subdir(struct dentry *new_dentry, struct dentry *old_dentry)h](jf)}(hjih]hbool}(hjlhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjlhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj2)}(h h]h }(hj!lhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjlhhhj lhM ubjC)}(h is_subdirh]jI)}(h is_subdirh]h is_subdir}(hj3lhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/lubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjlhhhj lhM ubj=)}(h6(struct dentry *new_dentry, struct dentry *old_dentry)h](jC)}(hstruct dentry *new_dentryh](j )}(hjh]hstruct}(hjOlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjKlubj2)}(h h]h }(hj\lhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjKlubh)}(hhh]jI)}(hdentryh]hdentry}(hjmlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjolmodnameN classnameNjj )}j ]j)}jj5lsb c.is_subdirasbuh1hhjKlubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjKlubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKlubjI)}(h new_dentryh]h new_dentry}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKlubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjGlubjC)}(hstruct dentry *old_dentryh](j )}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjlubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjlubh)}(hhh]jI)}(hdentryh]hdentry}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj )}j ]jl c.is_subdirasbuh1hhjlubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjlubj)}(hjh]h*}(hj mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjI)}(h old_dentryh]h old_dentry}(hjmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjGlubeh}(h]h ]h"]h$]h&]j`jauh1j<hjlhhhj lhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj lhhhj lhM ubah}(h]jlah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj lhM hjlhhubjw)}(hhh]h)}(h*is new dentry a subdirectory of old_dentryh]h*is new dentry a subdirectory of old_dentry}(hjBmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj?mhhubah}(h]h ]h"]h$]h&]uh1jvhjlhhhj lhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZmjjZmjjjuh1jhhhjDhNhNubj)}(hX&**Parameters** ``struct dentry *new_dentry`` new dentry ``struct dentry *old_dentry`` old dentry **Description** Returns true if new_dentry is a subdirectory of the parent (at any depth). Returns false otherwise. Caller must ensure that "new_dentry" is pinned before calling is_subdir()h](h)}(h**Parameters**h]j)}(hjdmh]h Parameters}(hjfmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbmubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj^mubj)}(hhh](j)}(h)``struct dentry *new_dentry`` new dentry h](j)}(h``struct dentry *new_dentry``h]j)}(hjmh]hstruct dentry *new_dentry}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj}mubj)}(hhh]h)}(h new dentryh]h new dentry}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM hjmubah}(h]h ]h"]h$]h&]uh1jhj}mubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjzmubj)}(h)``struct dentry *old_dentry`` old dentry h](j)}(h``struct dentry *old_dentry``h]j)}(hjmh]hstruct dentry *old_dentry}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjmubj)}(hhh]h)}(h old dentryh]h old dentry}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM hjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjzmubeh}(h]h ]h"]h$]h&]uh1jhj^mubh)}(h**Description**h]j)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj^mubh)}(hReturns true if new_dentry is a subdirectory of the parent (at any depth). Returns false otherwise. Caller must ensure that "new_dentry" is pinned before calling is_subdir()h]hReturns true if new_dentry is a subdirectory of the parent (at any depth). Returns false otherwise. Caller must ensure that “new_dentry” is pinned before calling is_subdir()}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj^mubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j dget_dlock (C function) c.dget_dlockhNtauh1hhjDhhhNhNubj)}(hhh](j)}(h2struct dentry * dget_dlock (struct dentry *dentry)h]j)}(h0struct dentry *dget_dlock(struct dentry *dentry)h](j )}(hjh]hstruct}(hjah"]h$]h&]uh1j1hj8nhhhjInhMGubh)}(hhh]jI)}(hdentryh]hdentry}(hj[nhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]nmodnameN classnameNjj )}j ]j)}j dget_dlocksb c.dget_dlockasbuh1hhj8nhhhjInhMGubj2)}(h h]h }(hj|nhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8nhhhjInhMGubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8nhhhjInhMGubjC)}(h dget_dlockh]jI)}(hjynh]h dget_dlock}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj8nhhhjInhMGubj=)}(h(struct dentry *dentry)h]jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjnubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubh)}(hhh]jI)}(hdentryh]hdentry}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]jwn c.dget_dlockasbuh1hhjnubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjI)}(hdentryh]hdentry}(hj ohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjnubah}(h]h ]h"]h$]h&]j`jauh1j<hj8nhhhjInhMGubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj4nhhhjInhMGubah}(h]j/nah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjInhMGhj1nhhubjw)}(hhh]h)}(hget a reference to a dentryh]hget a reference to a dentry}(hj7ohhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMGhj4ohhubah}(h]h ]h"]h$]h&]uh1jvhj1nhhhjInhMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOojjOojjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` dentry to get a reference to **Description** Given a live dentry, increment the reference count and return the dentry. Caller must hold **dentry->d_lock**. Making sure that dentry is alive is caller's resonsibility. There are many conditions sufficient to guarantee that; e.g. anything with non-negative refcount is alive, so's anything hashed, anything positive, anyone's parent, etc.h](h)}(h**Parameters**h]j)}(hjYoh]h Parameters}(hj[ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWoubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMKhjSoubj)}(hhh]j)}(h7``struct dentry *dentry`` dentry to get a reference to h](j)}(h``struct dentry *dentry``h]j)}(hjxoh]hstruct dentry *dentry}(hjzohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvoubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMHhjroubj)}(hhh]h)}(hdentry to get a reference toh]hdentry to get a reference to}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMHhjoubah}(h]h ]h"]h$]h&]uh1jhjroubeh}(h]h ]h"]h$]h&]uh1jhjohMHhjooubah}(h]h ]h"]h$]h&]uh1jhjSoubh)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMJhjSoubh)}(hXVGiven a live dentry, increment the reference count and return the dentry. Caller must hold **dentry->d_lock**. Making sure that dentry is alive is caller's resonsibility. There are many conditions sufficient to guarantee that; e.g. anything with non-negative refcount is alive, so's anything hashed, anything positive, anyone's parent, etc.h](h[Given a live dentry, increment the reference count and return the dentry. Caller must hold }(hjohhhNhNubj)}(h**dentry->d_lock**h]hdentry->d_lock}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh. Making sure that dentry is alive is caller’s resonsibility. There are many conditions sufficient to guarantee that; e.g. anything with non-negative refcount is alive, so’s anything hashed, anything positive, anyone’s parent, etc.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMIhjSoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j dget (C function)c.dgethNtauh1hhjDhhhNhNubj)}(hhh](j)}(h,struct dentry * dget (struct dentry *dentry)h]j)}(h*struct dentry *dget(struct dentry *dentry)h](j )}(hjh]hstruct}(hj phhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjphhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMXubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjphhhjphMXubh)}(hhh]jI)}(hdentryh]hdentry}(hj)phhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&pubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+pmodnameN classnameNjj )}j ]j)}jdgetsbc.dgetasbuh1hhjphhhjphMXubj2)}(h h]h }(hjJphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjphhhjphMXubj)}(hjh]h*}(hjXphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjphMXubjC)}(hdgeth]jI)}(hjGph]hdget}(hjiphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjepubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjphhhjphMXubj=)}(h(struct dentry *dentry)h]jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjphhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjpubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubh)}(hhh]jI)}(hdentryh]hdentry}(hjphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj )}j ]jEpc.dgetasbuh1hhjpubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjI)}(hdentryh]hdentry}(hjphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj|pubah}(h]h ]h"]h$]h&]j`jauh1j<hjphhhjphMXubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjphhhjphMXubah}(h]joah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjphMXhjohhubjw)}(hhh]h)}(hget a reference to a dentryh]hget a reference to a dentry}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMXhjqhhubah}(h]h ]h"]h$]h&]uh1jvhjohhhjphMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` dentry to get a reference to **Description** Given a dentry or ``NULL`` pointer increment the reference count if appropriate and return the dentry. A dentry will not be destroyed when it has references. Conversely, a dentry with no references can disappear for any number of reasons, starting with memory pressure. In other words, that primitive is used to clone an existing reference; using it on something with zero refcount is a bug. **NOTE** it will spin if **dentry->d_lock** is held. From the deadlock avoidance point of view it is equivalent to spin_lock()/increment refcount/spin_unlock(), so calling it under **dentry->d_lock** is always a bug; so's calling it under ->d_lock on any of its descendents.h](h)}(h**Parameters**h]j)}(hj'qh]h Parameters}(hj)qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%qubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM\hj!qubj)}(hhh]j)}(h7``struct dentry *dentry`` dentry to get a reference to h](j)}(h``struct dentry *dentry``h]j)}(hjFqh]hstruct dentry *dentry}(hjHqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDqubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMYhj@qubj)}(hhh]h)}(hdentry to get a reference toh]hdentry to get a reference to}(hj_qhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[qhMYhj\qubah}(h]h ]h"]h$]h&]uh1jhj@qubeh}(h]h ]h"]h$]h&]uh1jhj[qhMYhj=qubah}(h]h ]h"]h$]h&]uh1jhj!qubh)}(h**Description**h]j)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM[hj!qubh)}(hXGiven a dentry or ``NULL`` pointer increment the reference count if appropriate and return the dentry. A dentry will not be destroyed when it has references. Conversely, a dentry with no references can disappear for any number of reasons, starting with memory pressure. In other words, that primitive is used to clone an existing reference; using it on something with zero refcount is a bug.h](hGiven a dentry or }(hjqhhhNhNubj)}(h``NULL``h]hNULL}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubhXp pointer increment the reference count if appropriate and return the dentry. A dentry will not be destroyed when it has references. Conversely, a dentry with no references can disappear for any number of reasons, starting with memory pressure. In other words, that primitive is used to clone an existing reference; using it on something with zero refcount is a bug.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMZhj!qubh)}(h**NOTE**h]j)}(hjqh]hNOTE}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMbhj!qubh)}(hX it will spin if **dentry->d_lock** is held. From the deadlock avoidance point of view it is equivalent to spin_lock()/increment refcount/spin_unlock(), so calling it under **dentry->d_lock** is always a bug; so's calling it under ->d_lock on any of its descendents.h](hit will spin if }(hjqhhhNhNubj)}(h**dentry->d_lock**h]hdentry->d_lock}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh is held. From the deadlock avoidance point of view it is equivalent to spin_lock()/increment refcount/spin_unlock(), so calling it under }(hjqhhhNhNubj)}(h**dentry->d_lock**h]hdentry->d_lock}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubhM is always a bug; so’s calling it under ->d_lock on any of its descendents.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMchj!qubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_unhashed (C function) c.d_unhashedhNtauh1hhjDhhhNhNubj)}(hhh](j)}(h,int d_unhashed (const struct dentry *dentry)h]j)}(h+int d_unhashed(const struct dentry *dentry)h](jf)}(hinth]hint}(hj#rhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjrhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMubj2)}(h h]h }(hj2rhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrhhhj1rhMubjC)}(h d_unhashedh]jI)}(h d_unhashedh]h d_unhashed}(hjDrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@rubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjrhhhj1rhMubj=)}(h(const struct dentry *dentry)h]jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hj`rhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\rubj2)}(h h]h }(hjmrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\rubj )}(hjh]hstruct}(hj{rhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\rubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\rubh)}(hhh]jI)}(hdentryh]hdentry}(hjrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj )}j ]j)}jjFrsb c.d_unhashedasbuh1hhj\rubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\rubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\rubjI)}(hdentryh]hdentry}(hjrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\rubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjXrubah}(h]h ]h"]h$]h&]j`jauh1j<hjrhhhj1rhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjrhhhj1rhMubah}(h]jrah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj1rhMhjrhhubjw)}(hhh]h)}(his dentry hashedh]his dentry hashed}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjrhhubah}(h]h ]h"]h$]h&]uh1jvhjrhhhj1rhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1jhhhjDhNhNubj)}(h**Parameters** ``const struct dentry *dentry`` entry to check **Description** Returns true if the dentry passed is not currently hashed.h](h)}(h**Parameters**h]j)}(hj sh]h Parameters}(hj"shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjsubj)}(hhh]j)}(h/``const struct dentry *dentry`` entry to check h](j)}(h``const struct dentry *dentry``h]j)}(hj?sh]hconst struct dentry *dentry}(hjAshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=subah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhj9subj)}(hhh]h)}(hentry to checkh]hentry to check}(hjXshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTshMhjUsubah}(h]h ]h"]h$]h&]uh1jhj9subeh}(h]h ]h"]h$]h&]uh1jhjTshMhj6subah}(h]h ]h"]h$]h&]uh1jhjsubh)}(h**Description**h]j)}(hjzsh]h Description}(hj|shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxsubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjsubh)}(h:Returns true if the dentry passed is not currently hashed.h]h:Returns true if the dentry passed is not currently hashed.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !d_really_is_negative (C function)c.d_really_is_negativehNtauh1hhjDhhhNhNubj)}(hhh](j)}(h7bool d_really_is_negative (const struct dentry *dentry)h]j)}(h6bool d_really_is_negative(const struct dentry *dentry)h](jf)}(hjih]hbool}(hjshhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjshhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjshhhjshMubjC)}(hd_really_is_negativeh]jI)}(hd_really_is_negativeh]hd_really_is_negative}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjshhhjshMubj=)}(h(const struct dentry *dentry)h]jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjsubj2)}(h h]h }(hjthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubj )}(hjh]hstruct}(hjthhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjsubj2)}(h h]h }(hj#thhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubh)}(hhh]jI)}(hdentryh]hdentry}(hj4thhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1tubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6tmodnameN classnameNjj )}j ]j)}jjssbc.d_really_is_negativeasbuh1hhjsubj2)}(h h]h }(hjTthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubj)}(hjh]h*}(hjbthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjI)}(hdentryh]hdentry}(hjothhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjsubah}(h]h ]h"]h$]h&]j`jauh1j<hjshhhjshMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjshhhjshMubah}(h]jsah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjshMhjshhubjw)}(hhh]h)}(h@Determine if a dentry is really negative (ignoring fallthroughs)h]h@Determine if a dentry is really negative (ignoring fallthroughs)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jvhjshhhjshMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``const struct dentry *dentry`` The dentry in question **Description** Returns true if the dentry represents either an absent name or a name that doesn't map to an inode (ie. ->d_inode is NULL). The dentry could represent a true miss, a whiteout that isn't represented by a 0,0 chardev or a fallthrough marker in an opaque directory. Note! (1) This should be used *only* by a filesystem to examine its own dentries. It should not be used to look at some other filesystem's dentries. (2) It should also be used in combination with d_inode() to get the inode. (3) The dentry may have something attached to ->d_lower and the type field of the flags may be set to something other than miss or whiteout.h](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjtubj)}(hhh]j)}(h7``const struct dentry *dentry`` The dentry in question h](j)}(h``const struct dentry *dentry``h]j)}(hjth]hconst struct dentry *dentry}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjtubj)}(hhh]h)}(hThe dentry in questionh]hThe dentry in question}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjtubh)}(hXReturns true if the dentry represents either an absent name or a name that doesn't map to an inode (ie. ->d_inode is NULL). The dentry could represent a true miss, a whiteout that isn't represented by a 0,0 chardev or a fallthrough marker in an opaque directory.h]hX Returns true if the dentry represents either an absent name or a name that doesn’t map to an inode (ie. ->d_inode is NULL). The dentry could represent a true miss, a whiteout that isn’t represented by a 0,0 chardev or a fallthrough marker in an opaque directory.}(hj+uhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjtubh)}(hXpNote! (1) This should be used *only* by a filesystem to examine its own dentries. It should not be used to look at some other filesystem's dentries. (2) It should also be used in combination with d_inode() to get the inode. (3) The dentry may have something attached to ->d_lower and the type field of the flags may be set to something other than miss or whiteout.h](hNote! (1) This should be used }(hj:uhhhNhNubj )}(h*only*h]honly}(hjBuhhhNhNubah}(h]h ]h"]h$]h&]uh1j~ hj:uubhXM by a filesystem to examine its own dentries. It should not be used to look at some other filesystem’s dentries. (2) It should also be used in combination with d_inode() to get the inode. (3) The dentry may have something attached to ->d_lower and the type field of the flags may be set to something other than miss or whiteout.}(hj:uhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !d_really_is_positive (C function)c.d_really_is_positivehNtauh1hhjDhhhNhNubj)}(hhh](j)}(h7bool d_really_is_positive (const struct dentry *dentry)h]j)}(h6bool d_really_is_positive(const struct dentry *dentry)h](jf)}(hjih]hbool}(hj{uhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjwuhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwuhhhjuhMubjC)}(hd_really_is_positiveh]jI)}(hd_really_is_positiveh]hd_really_is_positive}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjuubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjwuhhhjuhMubj=)}(h(const struct dentry *dentry)h]jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjuhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjuubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjuubj )}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjuubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjuubh)}(hhh]jI)}(hdentryh]hdentry}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj )}j ]j)}jjusbc.d_really_is_positiveasbuh1hhjuubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjuubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjI)}(hdentryh]hdentry}(hj+vhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjuubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjuubah}(h]h ]h"]h$]h&]j`jauh1j<hjwuhhhjuhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjsuhhhjuhMubah}(h]jnuah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjuhMhjpuhhubjw)}(hhh]h)}(h@Determine if a dentry is really positive (ignoring fallthroughs)h]h@Determine if a dentry is really positive (ignoring fallthroughs)}(hjUvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjRvhhubah}(h]h ]h"]h$]h&]uh1jvhjpuhhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmvjjmvjjjuh1jhhhjDhNhNubj)}(hX**Parameters** ``const struct dentry *dentry`` The dentry in question **Description** Returns true if the dentry represents a name that maps to an inode (ie. ->d_inode is not NULL). The dentry might still represent a whiteout if that is represented on medium as a 0,0 chardev. Note! (1) This should be used *only* by a filesystem to examine its own dentries. It should not be used to look at some other filesystem's dentries. (2) It should also be used in combination with d_inode() to get the inode.h](h)}(h**Parameters**h]j)}(hjwvh]h Parameters}(hjyvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuvubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjqvubj)}(hhh]j)}(h7``const struct dentry *dentry`` The dentry in question h](j)}(h``const struct dentry *dentry``h]j)}(hjvh]hconst struct dentry *dentry}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjvubj)}(hhh]h)}(hThe dentry in questionh]hThe dentry in question}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjqvubh)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjqvubh)}(hReturns true if the dentry represents a name that maps to an inode (ie. ->d_inode is not NULL). The dentry might still represent a whiteout if that is represented on medium as a 0,0 chardev.h]hReturns true if the dentry represents a name that maps to an inode (ie. ->d_inode is not NULL). The dentry might still represent a whiteout if that is represented on medium as a 0,0 chardev.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjqvubh)}(hNote! (1) This should be used *only* by a filesystem to examine its own dentries. It should not be used to look at some other filesystem's dentries. (2) It should also be used in combination with d_inode() to get the inode.h](hNote! (1) This should be used }(hjvhhhNhNubj )}(h*only*h]honly}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j~ hjvubh by a filesystem to examine its own dentries. It should not be used to look at some other filesystem’s dentries. (2) It should also be used in combination with d_inode() to get the inode.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjqvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_inode (C function) c.d_inodehNtauh1hhjDhhhNhNubj)}(hhh](j)}(h4struct inode * d_inode (const struct dentry *dentry)h]j)}(h2struct inode *d_inode(const struct dentry *dentry)h](j )}(hjh]hstruct}(hj7whhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj3whhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM,ubj2)}(h h]h }(hjEwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3whhhjDwhM,ubh)}(hhh]jI)}(hinodeh]hinode}(hjVwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXwmodnameN classnameNjj )}j ]j)}jd_inodesb c.d_inodeasbuh1hhj3whhhjDwhM,ubj2)}(h h]h }(hjwwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3whhhjDwhM,ubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3whhhjDwhM,ubjC)}(hd_inodeh]jI)}(hjtwh]hd_inode}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj3whhhjDwhM,ubj=)}(h(const struct dentry *dentry)h]jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjwhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwubj )}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwubh)}(hhh]jI)}(hdentryh]hdentry}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj )}j ]jrw c.d_inodeasbuh1hhjwubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjI)}(hdentryh]hdentry}(hj#xhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjwubah}(h]h ]h"]h$]h&]j`jauh1j<hj3whhhjDwhM,ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj/whhhjDwhM,ubah}(h]j*wah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjDwhM,hj,whhubjw)}(hhh]h)}(h#Get the actual inode of this dentryh]h#Get the actual inode of this dentry}(hjMxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM,hjJxhhubah}(h]h ]h"]h$]h&]uh1jvhj,whhhjDwhM,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjexjjexjjjuh1jhhhjDhNhNubj)}(h**Parameters** ``const struct dentry *dentry`` The dentry to query **Description** This is the helper normal filesystems should use to get at their own inodes in their own dentries and ignore the layering superimposed upon them.h](h)}(h**Parameters**h]j)}(hjoxh]h Parameters}(hjqxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmxubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM0hjixubj)}(hhh]j)}(h4``const struct dentry *dentry`` The dentry to query h](j)}(h``const struct dentry *dentry``h]j)}(hjxh]hconst struct dentry *dentry}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM-hjxubj)}(hhh]h)}(hThe dentry to queryh]hThe dentry to query}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhM-hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM-hjxubah}(h]h ]h"]h$]h&]uh1jhjixubh)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM/hjixubh)}(hThis is the helper normal filesystems should use to get at their own inodes in their own dentries and ignore the layering superimposed upon them.h]hThis is the helper normal filesystems should use to get at their own inodes in their own dentries and ignore the layering superimposed upon them.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM.hjixubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_inode_rcu (C function) c.d_inode_rcuhNtauh1hhjDhhhNhNubj)}(hhh](j)}(h8struct inode * d_inode_rcu (const struct dentry *dentry)h]j)}(h6struct inode *d_inode_rcu(const struct dentry *dentry)h](j )}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj yhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM8ubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj yhhhjyhM8ubh)}(hhh]jI)}(hinodeh]hinode}(hj-yhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*yubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/ymodnameN classnameNjj )}j ]j)}j d_inode_rcusb c.d_inode_rcuasbuh1hhj yhhhjyhM8ubj2)}(h h]h }(hjNyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj yhhhjyhM8ubj)}(hjh]h*}(hj\yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj yhhhjyhM8ubjC)}(h d_inode_rcuh]jI)}(hjKyh]h d_inode_rcu}(hjmyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiyubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj yhhhjyhM8ubj=)}(h(const struct dentry *dentry)h]jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjyhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjyubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyubj )}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjyubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyubh)}(hhh]jI)}(hdentryh]hdentry}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj )}j ]jIy c.d_inode_rcuasbuh1hhjyubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjI)}(hdentryh]hdentry}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubah}(h]h ]h"]h$]h&]j`jauh1j<hj yhhhjyhM8ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjyhhhjyhM8ubah}(h]jyah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjyhM8hjyhhubjw)}(hhh]h)}(h4Get the actual inode of this dentry with READ_ONCE()h]h4Get the actual inode of this dentry with READ_ONCE()}(hj$zhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM8hj!zhhubah}(h]h ]h"]h$]h&]uh1jvhjyhhhjyhM8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjah"]h$]h&]uh1j1hjzhhhjzhMDubh)}(hhh]jI)}(hinodeh]hinode}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj )}j ]j)}jd_backing_inodesbc.d_backing_inodeasbuh1hhjzhhhjzhMDubj2)}(h h]h }(hj%{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzhhhjzhMDubj)}(hjh]h*}(hj3{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMDubjC)}(hd_backing_inodeh]jI)}(hj"{h]hd_backing_inode}(hjD{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@{ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjzhhhjzhMDubj=)}(h(const struct dentry *upper)h]jC)}(hconst struct dentry *upperh](j )}(hjh]hconst}(hj_{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj[{ubj2)}(h h]h }(hjl{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[{ubj )}(hjh]hstruct}(hjz{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj[{ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[{ubh)}(hhh]jI)}(hdentryh]hdentry}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj )}j ]j {c.d_backing_inodeasbuh1hhj[{ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[{ubjI)}(hupperh]hupper}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[{ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjW{ubah}(h]h ]h"]h$]h&]j`jauh1j<hjzhhhjzhMDubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjzhhhjzhMDubah}(h]jzah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjzhMDhjzhhubjw)}(hhh]h)}(h+Get upper or lower inode we should be usingh]h+Get upper or lower inode we should be using}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMDhj{hhubah}(h]h ]h"]h$]h&]uh1jvhjzhhhjzhMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjDhNhNubj)}(hXi**Parameters** ``const struct dentry *upper`` The upper layer **Description** This is the helper that should be used to get at the inode that will be used if this dentry were to be opened as a file. The inode may be on the upper dentry or it may be on a lower dentry pinned by the upper. Normal filesystems should not use this to access their own inodes.h](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMHhj|ubj)}(hhh]j)}(h/``const struct dentry *upper`` The upper layer h](j)}(h``const struct dentry *upper``h]j)}(hj<|h]hconst struct dentry *upper}(hj>|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:|ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMEhj6|ubj)}(hhh]h)}(hThe upper layerh]hThe upper layer}(hjU|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ|hMEhjR|ubah}(h]h ]h"]h$]h&]uh1jhj6|ubeh}(h]h ]h"]h$]h&]uh1jhjQ|hMEhj3|ubah}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hjw|h]h Description}(hjy|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju|ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMGhj|ubh)}(hThis is the helper that should be used to get at the inode that will be used if this dentry were to be opened as a file. The inode may be on the upper dentry or it may be on a lower dentry pinned by the upper.h]hThis is the helper that should be used to get at the inode that will be used if this dentry were to be opened as a file. The inode may be on the upper dentry or it may be on a lower dentry pinned by the upper.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMFhj|ubh)}(hBNormal filesystems should not use this to access their own inodes.h]hBNormal filesystems should not use this to access their own inodes.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMJhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_real (C function)c.d_realhNtauh1hhjDhhhNhNubj)}(hhh](j)}(hEstruct dentry * d_real (struct dentry *dentry, enum d_real_type type)h]j)}(hCstruct dentry *d_real(struct dentry *dentry, enum d_real_type type)h](j )}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|hhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMUubj2)}(h h]h }(hj|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|hhhj|hMUubh)}(hhh]jI)}(hdentryh]hdentry}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj )}j ]j)}jd_realsbc.d_realasbuh1hhj|hhhj|hMUubj2)}(h h]h }(hj }hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|hhhj|hMUubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj|hMUubjC)}(hd_realh]jI)}(hj}h]hd_real}(hj*}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&}ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj|hhhj|hMUubj=)}(h.(struct dentry *dentry, enum d_real_type type)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjE}hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjA}ubj2)}(h h]h }(hjR}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjA}ubh)}(hhh]jI)}(hdentryh]hdentry}(hjc}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetje}modnameN classnameNjj )}j ]j}c.d_realasbuh1hhjA}ubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjA}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA}ubjI)}(hdentryh]hdentry}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjA}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj=}ubjC)}(henum d_real_type typeh](j )}(hj#h]henum}(hj}hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubh)}(hhh]jI)}(h d_real_typeh]h d_real_type}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj )}j ]j}c.d_realasbuh1hhj}ubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubjI)}(htypeh]htype}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj=}ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj|hhhj|hMUubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj|hhhj|hMUubah}(h]j|ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj|hMUhj|hhubjw)}(hhh]h)}(hReturn the real dentryh]hReturn the real dentry}(hj)~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMUhj&~hhubah}(h]h ]h"]h$]h&]uh1jvhj|hhhj|hMUubeh}(h]h ](jfunctioneh"]h$]h&]jjjjA~jjA~jjjuh1jhhhjDhNhNubj)}(hX4**Parameters** ``struct dentry *dentry`` the dentry to query ``enum d_real_type type`` the type of real dentry (data or metadata) **Description** If dentry is on a union/overlay, then return the underlying, real dentry. Otherwise return the dentry itself. See also: Documentation/filesystems/vfs.rsth](h)}(h**Parameters**h]j)}(hjK~h]h Parameters}(hjM~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI~ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMYhjE~ubj)}(hhh](j)}(h.``struct dentry *dentry`` the dentry to query h](j)}(h``struct dentry *dentry``h]j)}(hjj~h]hstruct dentry *dentry}(hjl~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh~ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMVhjd~ubj)}(hhh]h)}(hthe dentry to queryh]hthe dentry to query}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMVhj~ubah}(h]h ]h"]h$]h&]uh1jhjd~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMVhja~ubj)}(hE``enum d_real_type type`` the type of real dentry (data or metadata) h](j)}(h``enum d_real_type type``h]j)}(hj~h]henum d_real_type type}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMWhj~ubj)}(hhh]h)}(h*the type of real dentry (data or metadata)h]h*the type of real dentry (data or metadata)}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMWhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMWhja~ubeh}(h]h ]h"]h$]h&]uh1jhjE~ubh)}(h**Description**h]j)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMYhjE~ubh)}(hmIf dentry is on a union/overlay, then return the underlying, real dentry. Otherwise return the dentry itself.h]hmIf dentry is on a union/overlay, then return the underlying, real dentry. Otherwise return the dentry itself.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMXhjE~ubh)}(h+See also: Documentation/filesystems/vfs.rsth]h+See also: Documentation/filesystems/vfs.rst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM[hjE~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_real_inode (C function)c.d_real_inodehNtauh1hhjDhhhNhNubj)}(hhh](j)}(h9struct inode * d_real_inode (const struct dentry *dentry)h]j)}(h7struct inode *d_real_inode(const struct dentry *dentry)h](j )}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj.hhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMgubj2)}(h h]h }(hj@hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.hhhj?hMgubh)}(hhh]jI)}(hinodeh]hinode}(hjQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj )}j ]j)}j d_real_inodesbc.d_real_inodeasbuh1hhj.hhhj?hMgubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.hhhj?hMgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj?hMgubjC)}(h d_real_inodeh]jI)}(hjoh]h d_real_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj.hhhj?hMgubj=)}(h(const struct dentry *dentry)h]jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jmc.d_real_inodeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hj.hhhj?hMgubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj*hhhj?hMgubah}(h]j%ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj?hMghj'hhubjw)}(hhh]h)}(h&Return the real inode hosting the datah]h&Return the real inode hosting the data}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMghjEhhubah}(h]h ]h"]h$]h&]uh1jvhj'hhhj?hMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1jhhhjDhNhNubj)}(h**Parameters** ``const struct dentry *dentry`` The dentry to query **Description** If dentry is on a union/overlay, then return the underlying, real inode. Otherwise return d_inode().h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMkhjdubj)}(hhh]j)}(h4``const struct dentry *dentry`` The dentry to query h](j)}(h``const struct dentry *dentry``h]j)}(hjh]hconst struct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhhjubj)}(hhh]h)}(hThe dentry to queryh]hThe dentry to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j)}(hjĀh]h Description}(hjƀhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj€ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMjhjdubh)}(hdIf dentry is on a union/overlay, then return the underlying, real inode. Otherwise return d_inode().h]hdIf dentry is on a union/overlay, then return the underlying, real inode. Otherwise return d_inode().}(hjڀhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMihjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubeh}(h]the-directory-cacheah ]h"]the directory cacheah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hInode Handlingh]hInode Handling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "inode_init_always_gfp (C function)c.inode_init_always_gfphNtauh1hhjhhhNhNubj)}(hhh](j)}(hRint inode_init_always_gfp (struct super_block *sb, struct inode *inode, gfp_t gfp)h]j)}(hQint inode_init_always_gfp(struct super_block *sb, struct inode *inode, gfp_t gfp)h](jf)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj0hKubjC)}(hinode_init_always_gfph]jI)}(hinode_init_always_gfph]hinode_init_always_gfp}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj0hKubj=)}(h8(struct super_block *sb, struct inode *inode, gfp_t gfp)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj[ubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubh)}(hhh]jI)}(h super_blockh]h super_block}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjEsbc.inode_init_always_gfpasbuh1hhj[ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjWubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjсhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj́ubj2)}(h h]h }(hjށhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj́ubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.inode_init_always_gfpasbuh1hhj́ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj́ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj́ubjI)}(hinodeh]hinode}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj́ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjWubjC)}(h gfp_t gfph](h)}(hhh]jI)}(hgfp_th]hgfp_t}(hjDhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj )}j ]jc.inode_init_always_gfpasbuh1hhj=ubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=ubjI)}(hgfph]hgfp}(hjphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjWubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj0hKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj0hKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj0hKhjhhubjw)}(hhh]h)}(h&perform inode structure initialisationh]h&perform inode structure initialisation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj0hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXh**Parameters** ``struct super_block *sb`` superblock inode belongs to ``struct inode *inode`` inode to initialise ``gfp_t gfp`` allocation flags **Description** These are initializations that need to be done on every inode allocation as the fields are not initialised by slab allocation. If there are additional allocations required **gfp** is used.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjubj)}(hhh](j)}(h7``struct super_block *sb`` superblock inode belongs to h](j)}(h``struct super_block *sb``h]j)}(hjۂh]hstruct super_block *sb}(hj݂hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjقubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjՂubj)}(hhh]h)}(hsuperblock inode belongs toh]hsuperblock inode belongs to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjՂubeh}(h]h ]h"]h$]h&]uh1jhjhKhj҂ubj)}(h,``struct inode *inode`` inode to initialise h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjubj)}(hhh]h)}(hinode to initialiseh]hinode to initialise}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj҂ubj)}(h``gfp_t gfp`` allocation flags h](j)}(h ``gfp_t gfp``h]j)}(hjMh]h gfp_t gfp}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjGubj)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKhj҂ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjubh)}(hThese are initializations that need to be done on every inode allocation as the fields are not initialised by slab allocation. If there are additional allocations required **gfp** is used.h](hThese are initializations that need to be done on every inode allocation as the fields are not initialised by slab allocation. If there are additional allocations required }(hjhhhNhNubj)}(h**gfp**h]hgfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j drop_nlink (C function) c.drop_nlinkhNtauh1hhjhhhNhNubj)}(hhh](j)}(h%void drop_nlink (struct inode *inode)h]j)}(h$void drop_nlink(struct inode *inode)h](jf)}(hvoidh]hvoid}(hj߃hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjۃhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjۃhhhjhMubjC)}(h drop_nlinkh]jI)}(h drop_nlinkh]h drop_nlink}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjۃhhhjhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj)hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj )}j ]j)}jjsb c.drop_nlinkasbuh1hhjubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjۃhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj׃hhhjhMubah}(h]j҃ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjԃhhubjw)}(hhh]h)}(h#directly drop an inode's link counth]h%directly drop an inode’s link count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjԃhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXV**Parameters** ``struct inode *inode`` inode **Description** This is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. In cases where we are attempting to track writes to the filesystem, a decrement to zero means an imminent write when the file is truncated and actually unlinked on the filesystem.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjÄhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]j)}(h``struct inode *inode`` inode h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjބubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjڄubj)}(hhh]h)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڄubeh}(h]h ]h"]h$]h&]uh1jhjhMhjׄubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hXThis is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. In cases where we are attempting to track writes to the filesystem, a decrement to zero means an imminent write when the file is truncated and actually unlinked on the filesystem.h]hXThis is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. In cases where we are attempting to track writes to the filesystem, a decrement to zero means an imminent write when the file is truncated and actually unlinked on the filesystem.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j clear_nlink (C function) c.clear_nlinkhNtauh1hhjhhhNhNubj)}(hhh](j)}(h&void clear_nlink (struct inode *inode)h]j)}(h%void clear_nlink(struct inode *inode)h](jf)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj\hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\hhhjnhMubjC)}(h clear_nlinkh]jI)}(h clear_nlinkh]h clear_nlink}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj\hhhjnhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.clear_nlinkasbuh1hhjubj2)}(h h]h }(hjۅhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hj\hhhjnhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjXhhhjnhMubah}(h]jSah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjnhMhjUhhubjw)}(hhh]h)}(h#directly zero an inode's link counth]h%directly zero an inode’s link count}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjUhhhjnhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8jj8jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` inode **Description** This is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. See drop_nlink() for why we care about i_nlink hitting zero.h](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj<ubj)}(hhh]j)}(h``struct inode *inode`` inode h](j)}(h``struct inode *inode``h]j)}(hjah]hstruct inode *inode}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj[ubj)}(hhh]h)}(hinodeh]hinode}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj<ubh)}(hThis is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. See drop_nlink() for why we care about i_nlink hitting zero.h]hThis is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. See drop_nlink() for why we care about i_nlink hitting zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j set_nlink (C function) c.set_nlinkhNtauh1hhjhhhNhNubj)}(hhh](j)}(h8void set_nlink (struct inode *inode, unsigned int nlink)h]j)}(h7void set_nlink(struct inode *inode, unsigned int nlink)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj݆hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj݆hhhjhMubjC)}(h set_nlinkh]jI)}(h set_nlinkh]h set_nlink}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj݆hhhjhMubj=)}(h)(struct inode *inode, unsigned int nlink)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj )}j ]j)}jjsb c.set_nlinkasbuh1hhjubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hunsigned int nlinkh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hnlinkh]hnlink}(hjȇhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj݆hhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjنhhhjhMubah}(h]jԆah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjֆhhubjw)}(hhh]h)}(h"directly set an inode's link counth]h$directly set an inode’s link count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjֆhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` inode ``unsigned int nlink`` new nlink (should be non-zero) **Description** This is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh](j)}(h``struct inode *inode`` inode h](j)}(h``struct inode *inode``h]j)}(hj3h]hstruct inode *inode}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj-ubj)}(hhh]h)}(hinodeh]hinode}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubj)}(h6``unsigned int nlink`` new nlink (should be non-zero) h](j)}(h``unsigned int nlink``h]j)}(hjlh]hunsigned int nlink}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjfubj)}(hhh]h)}(hnew nlink (should be non-zero)h]hnew nlink (should be non-zero)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(h_This is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink.h]h_This is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inc_nlink (C function) c.inc_nlinkhNtauh1hhjhhhNhNubj)}(hhh](j)}(h$void inc_nlink (struct inode *inode)h]j)}(h#void inc_nlink(struct inode *inode)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h inc_nlinkh]jI)}(h inc_nlinkh]h inc_nlink}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubh)}(hhh]jI)}(hinodeh]hinode}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj )}j ]j)}jjsb c.inc_nlinkasbuh1hhj%ubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]j߈ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h(directly increment an inode's link counth]h*directly increment an inode’s link count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjĉjjĉjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` inode **Description** This is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. Currently, it is only here for parity with dec_nlink().h](h)}(h**Parameters**h]j)}(hjΉh]h Parameters}(hjЉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̉ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjȉubj)}(hhh]j)}(h``struct inode *inode`` inode h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjȉubh)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjȉubh)}(hThis is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. Currently, it is only here for parity with dec_nlink().h]hThis is a low-level filesystem helper to replace any direct filesystem manipulation of i_nlink. Currently, it is only here for parity with dec_nlink().}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjȉubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_sb_list_add (C function)c.inode_sb_list_addhNtauh1hhjhhhNhNubj)}(hhh](j)}(h,void inode_sb_list_add (struct inode *inode)h]j)}(h+void inode_sb_list_add(struct inode *inode)h](jf)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjihhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMwubj2)}(h h]h }(hj|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjihhhj{hMwubjC)}(hinode_sb_list_addh]jI)}(hinode_sb_list_addh]hinode_sb_list_add}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjihhhj{hMwubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjȊhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjŊubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjʊmodnameN classnameNjj )}j ]j)}jjsbc.inode_sb_list_addasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjihhhj{hMwubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjehhhj{hMwubah}(h]j`ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj{hMwhjbhhubjw)}(hhh]h)}(h*add inode to the superblock list of inodesh]h*add inode to the superblock list of inodes}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMwhj*hhubah}(h]h ]h"]h$]h&]uh1jvhjbhhhj{hMwubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jhhhjhNhNubj)}(h6**Parameters** ``struct inode *inode`` inode to addh](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM{hjIubj)}(hhh]j)}(h$``struct inode *inode`` inode to addh](j)}(h``struct inode *inode``h]j)}(hjnh]hstruct inode *inode}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM}hjhubj)}(hhh]h)}(h inode to addh]h inode to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMxhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  __insert_inode_hash (C function)c.__insert_inode_hashhNtauh1hhjhhhNhNubj)}(hhh](j)}(h;void __insert_inode_hash (struct inode *inode, u64 hashval)h]j)}(h:void __insert_inode_hash(struct inode *inode, u64 hashval)h](jf)}(hvoidh]hvoid}(hjȋhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjċhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hj׋hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjċhhhj֋hMubjC)}(h__insert_inode_hashh]jI)}(h__insert_inode_hashh]h__insert_inode_hash}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjċhhhj֋hMubj=)}(h"(struct inode *inode, u64 hashval)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj )}j ]j)}jjsbc.__insert_inode_hashasbuh1hhjubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u64 hashvalh](h)}(hhh]jI)}(hu64h]hu64}(hjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj )}j ]j?c.__insert_inode_hashasbuh1hhjsubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubjI)}(hhashvalh]hhashval}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjċhhhj֋hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj֋hMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj֋hMhjhhubjw)}(hhh]h)}(h hash an inodeh]h hash an inode}(hjЌhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj͌hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj֋hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` unhashed inode ``u64 hashval`` u64 value used to locate this object in the inode_hashtable. **Description** Add an inode to the inode hash for this superblock.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh](j)}(h'``struct inode *inode`` unhashed inode h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj ubj)}(hhh]h)}(hunhashed inodeh]hunhashed inode}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubj)}(hM``u64 hashval`` u64 value used to locate this object in the inode_hashtable. h](j)}(h``u64 hashval``h]j)}(hjJh]h u64 hashval}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjDubj)}(hhh]h)}(hah"]h$]h&]uh1j1hjҍhhhjhMubjC)}(h__remove_inode_hashh]jI)}(h__remove_inode_hashh]h__remove_inode_hash}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjҍhhhjhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj )}j ]j)}jjsbc.__remove_inode_hashasbuh1hhjubj2)}(h h]h }(hjQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubah}(h]h ]h"]h$]h&]j`jauh1j<hjҍhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj΍hhhjhMubah}(h]jɍah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjˍhhubjw)}(hhh]h)}(hremove an inode from the hashh]hremove an inode from the hash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjˍhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hu**Parameters** ``struct inode *inode`` inode to unhash **Description** Remove an inode from the superblock.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]j)}(h(``struct inode *inode`` inode to unhash h](j)}(h``struct inode *inode``h]j)}(hj׎h]hstruct inode *inode}(hjَhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՎubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjюubj)}(hhh]h)}(hinode to unhashh]hinode to unhash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjюubeh}(h]h ]h"]h$]h&]uh1jhjhMhjΎubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(h$Remove an inode from the superblock.h]h)}(hj*h]h$Remove an inode from the superblock.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj(ubah}(h]h ]h"]h$]h&]uh1jhj9hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j evict_inodes (C function)c.evict_inodeshNtauh1hhjhhhNhNubj)}(hhh](j)}(h*void evict_inodes (struct super_block *sb)h]j)}(h)void evict_inodes(struct super_block *sb)h](jf)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj\hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMfubj2)}(h h]h }(hjohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\hhhjnhMfubjC)}(h evict_inodesh]jI)}(h evict_inodesh]h evict_inodes}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj\hhhjnhMfubj=)}(h(struct super_block *sb)h]jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.evict_inodesasbuh1hhjubj2)}(h h]h }(hjۏhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hj\hhhjnhMfubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjXhhhjnhMfubah}(h]jSah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjnhMfhjUhhubjw)}(hhh]h)}(h+evict all evictable inodes for a superblockh]h+evict all evictable inodes for a superblock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMfhjhhubah}(h]h ]h"]h$]h&]uh1jvhjUhhhjnhMfubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8jj8jjjuh1jhhhjhNhNubj)}(hX8**Parameters** ``struct super_block *sb`` superblock to operate on **Description** Make sure that no inodes with zero refcount are retained. This is called by superblock shutdown after having SB_ACTIVE flag removed, so any inode reaching zero refcount during or after that call will be immediately evicted.h](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMjhj<ubj)}(hhh]j)}(h4``struct super_block *sb`` superblock to operate on h](j)}(h``struct super_block *sb``h]j)}(hjah]hstruct super_block *sb}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMghj[ubj)}(hhh]h)}(hsuperblock to operate onh]hsuperblock to operate on}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMghjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMghjXubah}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMihj<ubh)}(hMake sure that no inodes with zero refcount are retained. This is called by superblock shutdown after having SB_ACTIVE flag removed, so any inode reaching zero refcount during or after that call will be immediately evicted.h]hMake sure that no inodes with zero refcount are retained. This is called by superblock shutdown after having SB_ACTIVE flag removed, so any inode reaching zero refcount during or after that call will be immediately evicted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j new_inode (C function) c.new_inodehNtauh1hhjhhhNhNubj)}(hhh](j)}(h1struct inode * new_inode (struct super_block *sb)h]j)}(h/struct inode *new_inode(struct super_block *sb)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjݐhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjݐhhhjhMubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}j new_inodesb c.new_inodeasbuh1hhjݐhhhjhMubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjݐhhhjhMubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݐhhhjhMubjC)}(h new_inodeh]jI)}(hjh]h new_inode}(hj@hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjݐhhhjhMubj=)}(h(struct super_block *sb)h]jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjWubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWubh)}(hhh]jI)}(h super_blockh]h super_block}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj )}j ]j c.new_inodeasbuh1hhjWubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjSubah}(h]h ]h"]h$]h&]j`jauh1j<hjݐhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjِhhhjhMubah}(h]jԐah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhj֐hhubjw)}(hhh]h)}(hobtain an inodeh]hobtain an inode}(hjܑhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjّhhubah}(h]h ]h"]h$]h&]uh1jvhj֐hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` superblock **Description** Allocates a new inode for given superblock. The default gfp_mask for allocations related to inode->i_mapping is GFP_HIGHUSER_MOVABLE. If HIGHMEM pages are unsuitable or it is known that pages allocated for the page cache are not reclaimable or migratable, mapping_set_gfp_mask() must be called with suitable flags on the newly created inode's mappingh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]j)}(h&``struct super_block *sb`` superblock h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h superblockh]h superblock}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hX^Allocates a new inode for given superblock. The default gfp_mask for allocations related to inode->i_mapping is GFP_HIGHUSER_MOVABLE. If HIGHMEM pages are unsuitable or it is known that pages allocated for the page cache are not reclaimable or migratable, mapping_set_gfp_mask() must be called with suitable flags on the newly created inode's mappingh]h)}(hX^Allocates a new inode for given superblock. The default gfp_mask for allocations related to inode->i_mapping is GFP_HIGHUSER_MOVABLE. If HIGHMEM pages are unsuitable or it is known that pages allocated for the page cache are not reclaimable or migratable, mapping_set_gfp_mask() must be called with suitable flags on the newly created inode's mappingh]hX`Allocates a new inode for given superblock. The default gfp_mask for allocations related to inode->i_mapping is GFP_HIGHUSER_MOVABLE. If HIGHMEM pages are unsuitable or it is known that pages allocated for the page cache are not reclaimable or migratable, mapping_set_gfp_mask() must be called with suitable flags on the newly created inode’s mapping}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjnubah}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j unlock_new_inode (C function)c.unlock_new_inodehNtauh1hhjhhhNhNubj)}(hhh](j)}(h+void unlock_new_inode (struct inode *inode)h]j)}(h*void unlock_new_inode(struct inode *inode)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hunlock_new_inodeh]jI)}(hunlock_new_inodeh]hunlock_new_inode}(hjȒhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjĒubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjʒsbc.unlock_new_inodeasbuh1hhjubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjܒubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h-clear the I_NEW state and wake up any waitersh]h-clear the I_NEW state and wake up any waiters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjdhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` new inode to unlock **Description** Called when the inode is fully initialised to clear the new state of the inode and wake up anyone waiting for the inode to finish initialisation.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]j)}(h,``struct inode *inode`` new inode to unlock h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hnew inode to unlockh]hnew inode to unlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hCalled when the inode is fully initialised to clear the new state of the inode and wake up anyone waiting for the inode to finish initialisation.h]hCalled when the inode is fully initialised to clear the new state of the inode and wake up anyone waiting for the inode to finish initialisation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $lock_two_nondirectories (C function)c.lock_two_nondirectorieshNtauh1hhjhhhNhNubj)}(hhh](j)}(hIvoid lock_two_nondirectories (struct inode *inode1, struct inode *inode2)h]j)}(hHvoid lock_two_nondirectories(struct inode *inode1, struct inode *inode2)h](jf)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj$hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$hhhj6hMubjC)}(hlock_two_nondirectoriesh]jI)}(hlock_two_nondirectoriesh]hlock_two_nondirectories}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj$hhhj6hMubj=)}(h,(struct inode *inode1, struct inode *inode2)h](jC)}(hstruct inode *inode1h](j )}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjaubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjKsbc.lock_two_nondirectoriesasbuh1hhjaubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjI)}(hinode1h]hinode1}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj]ubjC)}(hstruct inode *inode2h](j )}(hjh]hstruct}(hjהhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjӔubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjӔubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.lock_two_nondirectoriesasbuh1hhjӔubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjӔubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӔubjI)}(hinode2h]hinode2}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjӔubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj]ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj$hhhj6hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhj6hMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj6hMhjhhubjw)}(hhh]h)}(h+take two i_mutexes on non-directory objectsh]h+take two i_mutexes on non-directory objects}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjpjjpjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode1`` first inode to lock ``struct inode *inode2`` second inode to lock **Description** Lock any non-NULL argument. Passed objects must not be directories. Zero, one or two objects may be locked by this function.h](h)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjtubj)}(hhh](j)}(h-``struct inode *inode1`` first inode to lock h](j)}(h``struct inode *inode1``h]j)}(hjh]hstruct inode *inode1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hfirst inode to lockh]hfirst inode to lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``struct inode *inode2`` second inode to lock h](j)}(h``struct inode *inode2``h]j)}(hjҕh]hstruct inode *inode2}(hjԕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЕubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj̕ubj)}(hhh]h)}(hsecond inode to lockh]hsecond inode to lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̕ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjtubh)}(h|Lock any non-NULL argument. Passed objects must not be directories. Zero, one or two objects may be locked by this function.h]h|Lock any non-NULL argument. Passed objects must not be directories. Zero, one or two objects may be locked by this function.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j &unlock_two_nondirectories (C function)c.unlock_two_nondirectorieshNtauh1hhjhhhNhNubj)}(hhh](j)}(hKvoid unlock_two_nondirectories (struct inode *inode1, struct inode *inode2)h]j)}(hJvoid unlock_two_nondirectories(struct inode *inode1, struct inode *inode2)h](jf)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjNhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjNhhhj`hMubjC)}(hunlock_two_nondirectoriesh]jI)}(hunlock_two_nondirectoriesh]hunlock_two_nondirectories}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjoubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjNhhhj`hMubj=)}(h,(struct inode *inode1, struct inode *inode2)h](jC)}(hstruct inode *inode1h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjusbc.unlock_two_nondirectoriesasbuh1hhjubj2)}(h h]h }(hj͖hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjۖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinode1h]hinode1}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inode2h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj )}j ]jɖc.unlock_two_nondirectoriesasbuh1hhjubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinode2h]hinode2}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjNhhhj`hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjJhhhj`hMubah}(h]jEah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj`hMhjGhhubjw)}(hhh]h)}(h,release locks from lock_two_nondirectories()h]h,release locks from lock_two_nondirectories()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjGhhhj`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hs**Parameters** ``struct inode *inode1`` first inode to unlock ``struct inode *inode2`` second inode to unlockh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh](j)}(h/``struct inode *inode1`` first inode to unlock h](j)}(h``struct inode *inode1``h]j)}(hj×h]hstruct inode *inode1}(hjŗhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hfirst inode to unlockh]hfirst inode to unlock}(hjܗhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjؗhMhjٗubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjؗhMhjubj)}(h/``struct inode *inode2`` second inode to unlockh](j)}(h``struct inode *inode2``h]j)}(hjh]hstruct inode *inode2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hsecond inode to unlockh]hsecond inode to unlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_insert5 (C function)c.inode_insert5hNtauh1hhjhhhNhNubj)}(hhh](j)}(hstruct inode * inode_insert5 (struct inode *inode, u64 hashval, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *data)h]j)}(hstruct inode *inode_insert5(struct inode *inode, u64 hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j )}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRhhhjchMubh)}(hhh]jI)}(hinodeh]hinode}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj )}j ]j)}j inode_insert5sbc.inode_insert5asbuh1hhjRhhhjchMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRhhhjchMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjchMubjC)}(h inode_insert5h]jI)}(hjh]h inode_insert5}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjRhhhjchMubj=)}(hs(struct inode *inode, u64 hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjИhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj̘ubj2)}(h h]h }(hjݘhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj̘ubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.inode_insert5asbuh1hhj̘ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj̘ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̘ubjI)}(hinodeh]hinode}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj̘ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjȘubjC)}(h u64 hashvalh](h)}(hhh]jI)}(hu64h]hu64}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj )}j ]jc.inode_insert5asbuh1hhj<ubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubjI)}(hhashvalh]hhashval}(hjohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjȘubjC)}(h!int (*test)(struct inode*, void*)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(h(h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(htesth]htest}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(h)h]h)}(hj͙hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjۙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.inode_insert5asbuh1hhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h,h]h,}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjȘubjC)}(h int (*set)(struct inode*, void*)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj|ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|ubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjI)}(hseth]hset}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubj)}(hjϙh]h)}(hjĚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]h(}(hjњhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj )}(hjh]hstruct}(hjޚhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|ubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.inode_insert5asbuh1hhj|ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hj3h]h,}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|ubjf)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj|ubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjϙh]h)}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjȘubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjqubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjI)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjqubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjȘubeh}(h]h ]h"]h$]h&]j`jauh1j<hjRhhhjchMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjNhhhjchMubah}(h]jIah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjchMhjKhhubjw)}(hhh]h)}(h*obtain an inode from a mounted file systemh]h*obtain an inode from a mounted file system}(hjțhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjśhhubah}(h]h ]h"]h$]h&]uh1jvhjKhhhjchMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct inode *inode`` pre-allocated inode to use for insert to cache ``u64 hashval`` hash value (usually inode number) to get ``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes ``int (*set)(struct inode *, void *)`` callback used to initialize a new struct inode ``void *data`` opaque data pointer to pass to **test** and **set** **Description** Search for the inode specified by **hashval** and **data** in the inode cache, and if present return it with an increased reference count. This is a variant of iget5_locked() that doesn't allocate an inode. If the inode is not present in the cache, insert the pre-allocated inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode(). Note that both **test** and **set** are called with the inode_hash_lock held, so they can't sleep.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh](j)}(hG``struct inode *inode`` pre-allocated inode to use for insert to cache h](j)}(h``struct inode *inode``h]j)}(hj h]hstruct inode *inode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h.pre-allocated inode to use for insert to cacheh]h.pre-allocated inode to use for insert to cache}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h9``u64 hashval`` hash value (usually inode number) to get h](j)}(h``u64 hashval``h]j)}(hjBh]h u64 hashval}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj<ubj)}(hhh]h)}(h(hash value (usually inode number) to geth]h(hash value (usually inode number) to get}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubj)}(hU``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes h](j)}(h'``int (*test)(struct inode *, void *)``h]j)}(hj{h]h#int (*test)(struct inode *, void *)}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjuubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``int (*set)(struct inode *, void *)`` callback used to initialize a new struct inode h](j)}(h&``int (*set)(struct inode *, void *)``h]j)}(hjh]h"int (*set)(struct inode *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h.callback used to initialize a new struct inodeh]h.callback used to initialize a new struct inode}(hj͜hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjɜhMhjʜubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɜhMhjubj)}(hC``void *data`` opaque data pointer to pass to **test** and **set** h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h3opaque data pointer to pass to **test** and **set**h](hopaque data pointer to pass to }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**set**h]hset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hSearch for the inode specified by **hashval** and **data** in the inode cache, and if present return it with an increased reference count. This is a variant of iget5_locked() that doesn't allocate an inode.h](h"Search for the inode specified by }(hj^hhhNhNubj)}(h **hashval**h]hhashval}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh and }(hj^hhhNhNubj)}(h**data**h]hdata}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh in the inode cache, and if present return it with an increased reference count. This is a variant of iget5_locked() that doesn’t allocate an inode.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hIf the inode is not present in the cache, insert the pre-allocated inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode().h]hIf the inode is not present in the cache, insert the pre-allocated inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hbNote that both **test** and **set** are called with the inode_hash_lock held, so they can't sleep.h](hNote that both }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**set**h]hset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhA are called with the inode_hash_lock held, so they can’t sleep.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j iget5_locked (C function)c.iget5_lockedhNtauh1hhjhhhNhNubj)}(hhh](j)}(hstruct inode * iget5_locked (struct super_block *sb, u64 hashval, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *data)h]j)}(hstruct inode *iget5_locked(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMKubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMKubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}j iget5_lockedsbc.iget5_lockedasbuh1hhjhhhjhMKubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMKubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMKubjC)}(h iget5_lockedh]jI)}(hj0h]h iget5_locked}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjNubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMKubj=)}(hv(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjiubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j.c.iget5_lockedasbuh1hhjiubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjI)}(hsbh]hsb}(hjĞhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubjC)}(h u64 hashvalh](h)}(hhh]jI)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjݞubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j.c.iget5_lockedasbuh1hhjٞubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjٞubjI)}(hhashvalh]hhashval}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjٞubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubjC)}(h!int (*test)(struct inode*, void*)h](jf)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj!ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubj)}(hjh]h(}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjI)}(htesth]htest}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubj)}(hjϙh]h)}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]h(}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j.c.iget5_lockedasbuh1hhj!ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hj3h]h,}(hj̟hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj2)}(h h]h }(hjٟhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj!ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubjC)}(h int (*set)(struct inode*, void*)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hseth]hset}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j.c.iget5_lockedasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjΠhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjܠhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hdatah]hdata}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMKhjhhubjw)}(hhh]h)}(h*obtain an inode from a mounted file systemh]h*obtain an inode from a mounted file system}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMKhj_hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system ``u64 hashval`` hash value (usually inode number) to get ``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes ``int (*set)(struct inode *, void *)`` callback used to initialize a new struct inode ``void *data`` opaque data pointer to pass to **test** and **set** **Description** Search for the inode specified by **hashval** and **data** in the inode cache, and if present return it with an increased reference count. This is a generalized version of iget_locked() for file systems where the inode number is not sufficient for unique identification of an inode. If the inode is not present in the cache, allocate and insert a new inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode(). Note that both **test** and **set** are called with the inode_hash_lock held, so they can't sleep.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMOhj~ubj)}(hhh](j)}(h6``struct super_block *sb`` super block of file system h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMLhjubj)}(hhh]h)}(hsuper block of file systemh]hsuper block of file system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubj)}(h9``u64 hashval`` hash value (usually inode number) to get h](j)}(h``u64 hashval``h]j)}(hjܡh]h u64 hashval}(hjޡhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڡubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMMhj֡ubj)}(hhh]h)}(h(hash value (usually inode number) to geth]h(hash value (usually inode number) to get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhj֡ubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubj)}(hU``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes h](j)}(h'``int (*test)(struct inode *, void *)``h]j)}(hjh]h#int (*test)(struct inode *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMNhjubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMNhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMNhjubj)}(hV``int (*set)(struct inode *, void *)`` callback used to initialize a new struct inode h](j)}(h&``int (*set)(struct inode *, void *)``h]j)}(hjNh]h"int (*set)(struct inode *, void *)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMOhjHubj)}(hhh]h)}(h.callback used to initialize a new struct inodeh]h.callback used to initialize a new struct inode}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMOhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMOhjubj)}(hC``void *data`` opaque data pointer to pass to **test** and **set** h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMPhjubj)}(hhh]h)}(h3opaque data pointer to pass to **test** and **set**h](hopaque data pointer to pass to }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**set**h]hset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubeh}(h]h ]h"]h$]h&]uh1jhj~ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMRhj~ubh)}(hXSearch for the inode specified by **hashval** and **data** in the inode cache, and if present return it with an increased reference count. This is a generalized version of iget_locked() for file systems where the inode number is not sufficient for unique identification of an inode.h](h"Search for the inode specified by }(hjhhhNhNubj)}(h **hashval**h]hhashval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh in the inode cache, and if present return it with an increased reference count. This is a generalized version of iget_locked() for file systems where the inode number is not sufficient for unique identification of an inode.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMQhj~ubh)}(hIf the inode is not present in the cache, allocate and insert a new inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode().h]hIf the inode is not present in the cache, allocate and insert a new inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode().}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMVhj~ubh)}(hbNote that both **test** and **set** are called with the inode_hash_lock held, so they can't sleep.h](hNote that both }(hj:hhhNhNubj)}(h**test**h]htest}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh and }(hj:hhhNhNubj)}(h**set**h]hset}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubhA are called with the inode_hash_lock held, so they can’t sleep.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMZhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j iget5_locked_rcu (C function)c.iget5_locked_rcuhNtauh1hhjhhhNhNubj)}(hhh](j)}(hstruct inode * iget5_locked_rcu (struct super_block *sb, u64 hashval, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *data)h]j)}(hstruct inode *iget5_locked_rcu(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMrubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMrubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jiget5_locked_rcusbc.iget5_locked_rcuasbuh1hhjhhhjhMrubj2)}(h h]h }(hjͣhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMrubj)}(hjh]h*}(hjۣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMrubjC)}(higet5_locked_rcuh]jI)}(hjʣh]higet5_locked_rcu}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMrubj=)}(hv(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj )}j ]jȣc.iget5_locked_rcuasbuh1hhjubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u64 hashvalh](h)}(hhh]jI)}(hu64h]hu64}(hjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj )}j ]jȣc.iget5_locked_rcuasbuh1hhjsubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubjI)}(hhashvalh]hhashval}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h!int (*test)(struct inode*, void*)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjͤhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hjۤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(htesth]htest}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj )}j ]jȣc.iget5_locked_rcuasbuh1hhjubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj3h]h,}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int (*set)(struct inode*, void*)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj¥hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hjХhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjݥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hseth]hset}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj )}j ]jȣc.iget5_locked_rcuasbuh1hhjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj3h]h,}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjŦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdatah]hdata}(hjҦhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMrubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMrubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMrhjhhubjw)}(hhh]h)}(h*obtain an inode from a mounted file systemh]h*obtain an inode from a mounted file system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMrhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMrubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system ``u64 hashval`` hash value (usually inode number) to get ``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes ``int (*set)(struct inode *, void *)`` callback used to initialize a new struct inode ``void *data`` opaque data pointer to pass to **test** and **set** **Description** This is equivalent to iget5_locked, except the **test** callback must tolerate the inode not being stable, including being mid-teardown.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMvhjubj)}(hhh](j)}(h6``struct super_block *sb`` super block of file system h](j)}(h``struct super_block *sb``h]j)}(hj=h]hstruct super_block *sb}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMshj7ubj)}(hhh]h)}(hsuper block of file systemh]hsuper block of file system}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMshjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMshj4ubj)}(h9``u64 hashval`` hash value (usually inode number) to get h](j)}(h``u64 hashval``h]j)}(hjvh]h u64 hashval}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMthjpubj)}(hhh]h)}(h(hash value (usually inode number) to geth]h(hash value (usually inode number) to get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMthj4ubj)}(hU``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes h](j)}(h'``int (*test)(struct inode *, void *)``h]j)}(hjh]h#int (*test)(struct inode *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMuhjubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hjȧhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjħhMuhjŧubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjħhMuhj4ubj)}(hV``int (*set)(struct inode *, void *)`` callback used to initialize a new struct inode h](j)}(h&``int (*set)(struct inode *, void *)``h]j)}(hjh]h"int (*set)(struct inode *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMvhjubj)}(hhh]h)}(h.callback used to initialize a new struct inodeh]h.callback used to initialize a new struct inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhj4ubj)}(hC``void *data`` opaque data pointer to pass to **test** and **set** h](j)}(h``void *data``h]j)}(hj!h]h void *data}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMwhjubj)}(hhh]h)}(h3opaque data pointer to pass to **test** and **set**h](hopaque data pointer to pass to }(hj:hhhNhNubj)}(h**test**h]htest}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh and }(hj:hhhNhNubj)}(h**set**h]hset}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1hhj6hMwhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMwhj4ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMyhjubh)}(hThis is equivalent to iget5_locked, except the **test** callback must tolerate the inode not being stable, including being mid-teardown.h](h/This is equivalent to iget5_locked, except the }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhQ callback must tolerate the inode not being stable, including being mid-teardown.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j iget_locked (C function) c.iget_lockedhNtauh1hhjhhhNhNubj)}(hhh](j)}(hah"]h$]h&]uh1j1hjϨhhhjhMubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}j iget_lockedsb c.iget_lockedasbuh1hhjϨhhhjhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjϨhhhjhMubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϨhhhjhMubjC)}(h iget_lockedh]jI)}(hjh]h iget_locked}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjϨhhhjhMubj=)}(h!(struct super_block *sb, u64 ino)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjIubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjIubh)}(hhh]jI)}(h super_blockh]h super_block}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj )}j ]j c.iget_lockedasbuh1hhjIubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjIubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjEubjC)}(hu64 inoh](h)}(hhh]jI)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj©modnameN classnameNjj )}j ]j c.iget_lockedasbuh1hhjubj2)}(h h]h }(hjީhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hinoh]hino}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjEubeh}(h]h ]h"]h$]h&]j`jauh1j<hjϨhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj˨hhhjhMubah}(h]jƨah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjȨhhubjw)}(hhh]h)}(h*obtain an inode from a mounted file systemh]h*obtain an inode from a mounted file system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjȨhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system ``u64 ino`` inode number to get **Description** Search for the inode specified by **ino** in the inode cache and if present return it with an increased reference count. This is for file systems where the inode number is sufficient for unique identification of an inode. If the inode is not in cache, allocate a new inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode().h](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj2ubj)}(hhh](j)}(h6``struct super_block *sb`` super block of file system h](j)}(h``struct super_block *sb``h]j)}(hjWh]hstruct super_block *sb}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjQubj)}(hhh]h)}(hsuper block of file systemh]hsuper block of file system}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjNubj)}(h ``u64 ino`` inode number to get h](j)}(h ``u64 ino``h]j)}(hjh]hu64 ino}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hinode number to geth]hinode number to get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjNubeh}(h]h ]h"]h$]h&]uh1jhj2ubh)}(h**Description**h]j)}(hj˪h]h Description}(hjͪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɪubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj2ubh)}(hSearch for the inode specified by **ino** in the inode cache and if present return it with an increased reference count. This is for file systems where the inode number is sufficient for unique identification of an inode.h](h"Search for the inode specified by }(hjhhhNhNubj)}(h**ino**h]hino}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh in the inode cache and if present return it with an increased reference count. This is for file systems where the inode number is sufficient for unique identification of an inode.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj2ubh)}(hIf the inode is not in cache, allocate a new inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode().h]hIf the inode is not in cache, allocate a new inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j iunique (C function) c.iuniquehNtauh1hhjhhhNhNubj)}(hhh](j)}(h:ino_t iunique (struct super_block *sb, ino_t max_reserved)h]j)}(h9ino_t iunique(struct super_block *sb, ino_t max_reserved)h](h)}(hhh]jI)}(hino_th]hino_t}(hj4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj )}j ]j)}jiuniquesb c.iuniqueasbuh1hhj-hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj-hhhjUhMubjC)}(hiuniqueh]jI)}(hjRh]hiunique}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj-hhhjUhMubj=)}(h,(struct super_block *sb, ino_t max_reserved)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jP c.iuniqueasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjͫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hjګhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj{ubjC)}(hino_t max_reservedh](h)}(hhh]jI)}(hino_th]hino_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jP c.iuniqueasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(h max_reservedh]h max_reserved}(hj"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj{ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj-hhhjUhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj)hhhjUhMubah}(h]j$ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjUhMhj&hhubjw)}(hhh]h)}(hget a unique inode numberh]hget a unique inode number}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jvhj&hhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` superblock ``ino_t max_reserved`` highest reserved inode number **Description** Obtain an inode number that is unique on the system for a given superblock. This is used by file systems that have no natural permanent inode numbering system. An inode number is returned that is higher than the reserved limit but unique. BUGS: With a large number of inodes live on the file system this function currently becomes quite slow.h](h)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhubj)}(hhh](j)}(h&``struct super_block *sb`` superblock h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h superblockh]h superblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``ino_t max_reserved`` highest reserved inode number h](j)}(h``ino_t max_reserved``h]j)}(hjƬh]hino_t max_reserved}(hjȬhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĬubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hhighest reserved inode numberh]hhighest reserved inode number}(hj߬hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj۬hMhjܬubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj۬hMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhubj)}(hXWObtain an inode number that is unique on the system for a given superblock. This is used by file systems that have no natural permanent inode numbering system. An inode number is returned that is higher than the reserved limit but unique. BUGS: With a large number of inodes live on the file system this function currently becomes quite slow.h](h)}(hObtain an inode number that is unique on the system for a given superblock. This is used by file systems that have no natural permanent inode numbering system. An inode number is returned that is higher than the reserved limit but unique.h]hObtain an inode number that is unique on the system for a given superblock. This is used by file systems that have no natural permanent inode numbering system. An inode number is returned that is higher than the reserved limit but unique.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hgBUGS: With a large number of inodes live on the file system this function currently becomes quite slow.h]hgBUGS: With a large number of inodes live on the file system this function currently becomes quite slow.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ihold (C function)c.iholdhNtauh1hhjhhhNhNubj)}(hhh](j)}(h void ihold (struct inode *inode)h]j)}(hvoid ihold(struct inode *inode)h](jf)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj[hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM'ubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[hhhjmhM'ubjC)}(hiholdh]jI)}(hiholdh]hihold}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj[hhhjmhM'ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.iholdasbuh1hhjubj2)}(h h]h }(hjڭhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hj[hhhjmhM'ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjWhhhjmhM'ubah}(h]jRah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjmhM'hjThhubjw)}(hhh]h)}(h;get a reference on the inode, provided you already have oneh]h;get a reference on the inode, provided you already have one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM'hjhhubah}(h]h ]h"]h$]h&]uh1jvhjThhhjmhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhjhNhNubj)}(h=**Parameters** ``struct inode *inode`` inode to operate onh](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM+hj;ubj)}(hhh]j)}(h+``struct inode *inode`` inode to operate onh](j)}(h``struct inode *inode``h]j)}(hj`h]hstruct inode *inode}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM-hjZubj)}(hhh]h)}(hinode to operate onh]hinode to operate on}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM(hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhM-hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ilookup5_nowait (C function)c.ilookup5_nowaithNtauh1hhjhhhNhNubj)}(hhh](j)}(hstruct inode * ilookup5_nowait (struct super_block *sb, u64 hashval, int (*test)(struct inode *, void *), void *data, bool *isnew)h]j)}(h~struct inode *ilookup5_nowait(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), void *data, bool *isnew)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMrubj2)}(h h]h }(hjȮhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjǮhMrubh)}(hhh]jI)}(hinodeh]hinode}(hjٮhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj֮ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjۮmodnameN classnameNjj )}j ]j)}jilookup5_nowaitsbc.ilookup5_nowaitasbuh1hhjhhhjǮhMrubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjǮhMrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjǮhMrubjC)}(hilookup5_nowaith]jI)}(hjh]hilookup5_nowait}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjǮhMrubj=)}(ha(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), void *data, bool *isnew)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0ubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubh)}(hhh]jI)}(h super_blockh]h super_block}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj )}j ]jc.ilookup5_nowaitasbuh1hhj0ubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj,ubjC)}(h u64 hashvalh](h)}(hhh]jI)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.ilookup5_nowaitasbuh1hhjubj2)}(h h]h }(hjůhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hhashvalh]hhashval}(hjӯhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj,ubjC)}(h!int (*test)(struct inode*, void*)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(htesth]htest}(hj"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj )}j ]jc.ilookup5_nowaitasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjɰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj,ubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjݰubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjݰubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݰubjI)}(hdatah]hdata}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjݰubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj,ubjC)}(h bool *isnewh](jf)}(hjih]hbool}(hj#hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hisnewh]hisnew}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj,ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjǮhMrubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjǮhMrubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjǮhMrhjhhubjw)}(hhh]h)}(h&search for an inode in the inode cacheh]h&search for an inode in the inode cache}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMrhjrhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjǮhMrubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXX**Parameters** ``struct super_block *sb`` super block of file system to search ``u64 hashval`` hash value (usually inode number) to search for ``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes ``void *data`` opaque data pointer to pass to **test** ``bool *isnew`` return argument telling whether I_NEW was set when the inode was found in hash (the caller needs to wait for I_NEW to clear) **Description** Search for the inode specified by **hashval** and **data** in the inode cache. If the inode is in the cache, the inode is returned with an incremented reference count. **Note** I_NEW is not waited upon so you have to be very careful what you do with the returned inode. You probably should be using ilookup5() instead. Note2: **test** is called with the inode_hash_lock held, so can't sleep.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMvhjubj)}(hhh](j)}(h@``struct super_block *sb`` super block of file system to search h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMshjubj)}(hhh]h)}(h$super block of file system to searchh]h$super block of file system to search}(hjϱhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj˱hMshj̱ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˱hMshjubj)}(h@``u64 hashval`` hash value (usually inode number) to search for h](j)}(h``u64 hashval``h]j)}(hjh]h u64 hashval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMthjubj)}(hhh]h)}(h/hash value (usually inode number) to search forh]h/hash value (usually inode number) to search for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(hU``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes h](j)}(h'``int (*test)(struct inode *, void *)``h]j)}(hj(h]h#int (*test)(struct inode *, void *)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMuhj"ubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMuhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMuhjubj)}(h7``void *data`` opaque data pointer to pass to **test** h](j)}(h``void *data``h]j)}(hjah]h void *data}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMvhj[ubj)}(hhh]h)}(h'opaque data pointer to pass to **test**h](hopaque data pointer to pass to }(hjzhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1hhjvhMvhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMvhjubj)}(h``bool *isnew`` return argument telling whether I_NEW was set when the inode was found in hash (the caller needs to wait for I_NEW to clear) h](j)}(h``bool *isnew``h]j)}(hjh]h bool *isnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMyhjubj)}(hhh]h)}(h|return argument telling whether I_NEW was set when the inode was found in hash (the caller needs to wait for I_NEW to clear)h]h|return argument telling whether I_NEW was set when the inode was found in hash (the caller needs to wait for I_NEW to clear)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM{hjubh)}(hSearch for the inode specified by **hashval** and **data** in the inode cache. If the inode is in the cache, the inode is returned with an incremented reference count.h](h"Search for the inode specified by }(hjhhhNhNubj)}(h **hashval**h]hhashval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhm in the inode cache. If the inode is in the cache, the inode is returned with an incremented reference count.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMzhjubh)}(h**Note**h]j)}(hj/h]hNote}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM~hjubh)}(hI_NEW is not waited upon so you have to be very careful what you do with the returned inode. You probably should be using ilookup5() instead.h]hI_NEW is not waited upon so you have to be very careful what you do with the returned inode. You probably should be using ilookup5() instead.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hHNote2: **test** is called with the inode_hash_lock held, so can't sleep.h](hNote2: }(hjThhhNhNubj)}(h**test**h]htest}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh; is called with the inode_hash_lock held, so can’t sleep.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ilookup5 (C function) c.ilookup5hNtauh1hhjhhhNhNubj)}(hhh](j)}(hnstruct inode * ilookup5 (struct super_block *sb, u64 hashval, int (*test)(struct inode *, void *), void *data)h]j)}(hjstruct inode *ilookup5(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), void *data)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jilookup5sb c.ilookup5asbuh1hhjhhhjhMubj2)}(h h]h }(hjճhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hilookup5h]jI)}(hjҳh]hilookup5}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hT(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), void *data)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(h super_blockh]h super_block}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj )}j ]jг c.ilookup5asbuh1hhj ubj2)}(h h]h }(hjKhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hsbh]hsb}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u64 hashvalh](h)}(hhh]jI)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jг c.ilookup5asbuh1hhj{ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj{ubjI)}(hhashvalh]hhashval}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h!int (*test)(struct inode*, void*)h](jf)}(hinth]hint}(hjǴhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjôubj2)}(h h]h }(hjմhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjôubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubjI)}(htesth]htest}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjôubj)}(hjϙh]h)}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj )}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjôubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjôubh)}(hhh]jI)}(hinodeh]hinode}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj )}j ]jг c.ilookup5asbuh1hhjôubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj)}(hj3h]h,}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjôubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjôubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjʵhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjصhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h&search for an inode in the inode cacheh]h&search for an inode in the inode cache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system to search ``u64 hashval`` hash value (usually inode number) to search for ``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes ``void *data`` opaque data pointer to pass to **test** **Description** Search for the inode specified by **hashval** and **data** in the inode cache, and if the inode is in the cache, return the inode with an incremented reference count. Waits on I_NEW before returning the inode. returned with an incremented reference count. This is a generalized version of ilookup() for file systems where the inode number is not sufficient for unique identification of an inode. **Note** **test** is called with the inode_hash_lock held, so can't sleep.h](h)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj+ubj)}(hhh](j)}(h@``struct super_block *sb`` super block of file system to search h](j)}(h``struct super_block *sb``h]j)}(hjPh]hstruct super_block *sb}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjJubj)}(hhh]h)}(h$super block of file system to searchh]h$super block of file system to search}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjGubj)}(h@``u64 hashval`` hash value (usually inode number) to search for h](j)}(h``u64 hashval``h]j)}(hjh]h u64 hashval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h/hash value (usually inode number) to search forh]h/hash value (usually inode number) to search for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjGubj)}(hU``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes h](j)}(h'``int (*test)(struct inode *, void *)``h]j)}(hj¶h]h#int (*test)(struct inode *, void *)}(hjĶhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hj۶hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj׶hMhjضubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj׶hMhjGubj)}(h7``void *data`` opaque data pointer to pass to **test** h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h'opaque data pointer to pass to **test**h](hopaque data pointer to pass to }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubh)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj+ubh)}(hXSearch for the inode specified by **hashval** and **data** in the inode cache, and if the inode is in the cache, return the inode with an incremented reference count. Waits on I_NEW before returning the inode. returned with an incremented reference count.h](h"Search for the inode specified by }(hjZhhhNhNubj)}(h **hashval**h]hhashval}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh and }(hjZhhhNhNubj)}(h**data**h]hdata}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh in the inode cache, and if the inode is in the cache, return the inode with an incremented reference count. Waits on I_NEW before returning the inode. returned with an incremented reference count.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj+ubh)}(hThis is a generalized version of ilookup() for file systems where the inode number is not sufficient for unique identification of an inode.h]hThis is a generalized version of ilookup() for file systems where the inode number is not sufficient for unique identification of an inode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj+ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj+ubh)}(hA**test** is called with the inode_hash_lock held, so can't sleep.h](j)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh; is called with the inode_hash_lock held, so can’t sleep.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ilookup (C function) c.ilookuphNtauh1hhjhhhNhNubj)}(hhh](j)}(h8struct inode * ilookup (struct super_block *sb, u64 ino)h]j)}(h6struct inode *ilookup(struct super_block *sb, u64 ino)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jilookupsb c.ilookupasbuh1hhjhhhjhMubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hilookuph]jI)}(hj.h]hilookup}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h!(struct super_block *sb, u64 ino)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjgubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j, c.ilookupasbuh1hhjgubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(hsbh]hsb}(hj¸hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjcubjC)}(hu64 inoh](h)}(hhh]jI)}(hu64h]hu64}(hj޸hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj۸ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j, c.ilookupasbuh1hhj׸ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj׸ubjI)}(hinoh]hino}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj׸ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjcubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h&search for an inode in the inode cacheh]h&search for an inode in the inode cache}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system to search ``u64 ino`` inode number to search for **Description** Search for the inode **ino** in the inode cache, and if the inode is in the cache, the inode is returned with an incremented reference count.h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjPubj)}(hhh](j)}(h@``struct super_block *sb`` super block of file system to search h](j)}(h``struct super_block *sb``h]j)}(hjuh]hstruct super_block *sb}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjoubj)}(hhh]h)}(h$super block of file system to searchh]h$super block of file system to search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubj)}(h'``u64 ino`` inode number to search for h](j)}(h ``u64 ino``h]j)}(hjh]hu64 ino}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hinode number to search forh]hinode number to search for}(hjǹhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjùhMhjĹubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjùhMhjlubeh}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjPubh)}(hSearch for the inode **ino** in the inode cache, and if the inode is in the cache, the inode is returned with an incremented reference count.h](hSearch for the inode }(hjhhhNhNubj)}(h**ino**h]hino}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhq in the inode cache, and if the inode is in the cache, the inode is returned with an incremented reference count.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j find_inode_nowait (C function)c.find_inode_nowaithNtauh1hhjhhhNhNubj)}(hhh](j)}(h}struct inode * find_inode_nowait (struct super_block *sb, u64 hashval, int (*match)(struct inode *, u64, void *), void *data)h]j)}(hystruct inode *find_inode_nowait(struct super_block *sb, u64 hashval, int (*match)(struct inode*, u64, void*), void *data)h](j )}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj<hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjNhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<hhhjMhMubh)}(hhh]jI)}(hinodeh]hinode}(hj_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj )}j ]j)}jfind_inode_nowaitsbc.find_inode_nowaitasbuh1hhj<hhhjMhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<hhhjMhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhMubjC)}(hfind_inode_nowaith]jI)}(hj}h]hfind_inode_nowait}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj<hhhjMhMubj=)}(hZ(struct super_block *sb, u64 hashval, int (*match)(struct inode*, u64, void*), void *data)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjǺhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjغhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjպubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjںmodnameN classnameNjj )}j ]j{c.find_inode_nowaitasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u64 hashvalh](h)}(hhh]jI)}(hu64h]hu64}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj )}j ]j{c.find_inode_nowaitasbuh1hhj&ubj2)}(h h]h }(hjKhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubjI)}(hhashvalh]hhashval}(hjYhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'int (*match)(struct inode*, u64, void*)h](jf)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjnubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjI)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]h(}(hjûhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj )}(hjh]hstruct}(hjлhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjnubj2)}(h h]h }(hjݻhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j{c.find_inode_nowaitasbuh1hhjnubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubh)}(hhh]jI)}(hu64h]hu64}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj )}j ]j{c.find_inode_nowaitasbuh1hhjnubj)}(hj3h]h,}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubjf)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjnubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdatah]hdata}(hj̼hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj<hhhjMhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj8hhhjMhMubah}(h]j3ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjMhMhj5hhubjw)}(hhh]h)}(h find an inode in the inode cacheh]h find an inode in the inode cache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj5hhhjMhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system to search ``u64 hashval`` hash value (usually inode number) to search for ``int (*match)(struct inode *, u64, void *)`` callback used for comparisons between inodes ``void *data`` opaque data pointer to pass to **match** **Description** Search for the inode specified by **hashval** and **data** in the inode cache, where the helper function **match** will return 0 if the inode does not match, 1 if the inode does match, and -1 if the search should be stopped. The **match** function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized, and incrementing the reference count before returning 1. It also must not sleep, since it is called with the inode_hash_lock spinlock held. This is a even more generalized version of ilookup5() when the function must never block --- find_inode() can block in __wait_on_freeing_inode() --- or when the caller can not increment the reference count because the resulting iput() might cause an inode eviction. The tradeoff is that the **match** funtion must be very carefully implemented.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh](j)}(h@``struct super_block *sb`` super block of file system to search h](j)}(h``struct super_block *sb``h]j)}(hj7h]hstruct super_block *sb}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj1ubj)}(hhh]h)}(h$super block of file system to searchh]h$super block of file system to search}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.ubj)}(h@``u64 hashval`` hash value (usually inode number) to search for h](j)}(h``u64 hashval``h]j)}(hjph]h u64 hashval}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjjubj)}(hhh]h)}(h/hash value (usually inode number) to search forh]h/hash value (usually inode number) to search for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubj)}(h[``int (*match)(struct inode *, u64, void *)`` callback used for comparisons between inodes h](j)}(h-``int (*match)(struct inode *, u64, void *)``h]j)}(hjh]h)int (*match)(struct inode *, u64, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hj½hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubj)}(h8``void *data`` opaque data pointer to pass to **match** h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjܽubj)}(hhh]h)}(h(opaque data pointer to pass to **match**h](hopaque data pointer to pass to }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjܽubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hXSearch for the inode specified by **hashval** and **data** in the inode cache, where the helper function **match** will return 0 if the inode does not match, 1 if the inode does match, and -1 if the search should be stopped. The **match** function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized, and incrementing the reference count before returning 1. It also must not sleep, since it is called with the inode_hash_lock spinlock held.h](h"Search for the inode specified by }(hjAhhhNhNubj)}(h **hashval**h]hhashval}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh and }(hjAhhhNhNubj)}(h**data**h]hdata}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh/ in the inode cache, where the helper function }(hjAhhhNhNubj)}(h **match**h]hmatch}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubht will return 0 if the inode does not match, 1 if the inode does match, and -1 if the search should be stopped. The }(hjAhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubhX function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized, and incrementing the reference count before returning 1. It also must not sleep, since it is called with the inode_hash_lock spinlock held.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hXYThis is a even more generalized version of ilookup5() when the function must never block --- find_inode() can block in __wait_on_freeing_inode() --- or when the caller can not increment the reference count because the resulting iput() might cause an inode eviction. The tradeoff is that the **match** funtion must be very carefully implemented.h](hX$This is a even more generalized version of ilookup5() when the function must never block --- find_inode() can block in __wait_on_freeing_inode() --- or when the caller can not increment the reference count because the resulting iput() might cause an inode eviction. The tradeoff is that the }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, funtion must be very carefully implemented.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j find_inode_rcu (C function)c.find_inode_rcuhNtauh1hhjhhhNhNubj)}(hhh](j)}(htstruct inode * find_inode_rcu (struct super_block *sb, u64 hashval, int (*test)(struct inode *, void *), void *data)h]j)}(hpstruct inode *find_inode_rcu(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), void *data)h](j )}(hjh]hstruct}(hjپhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjվhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjվhhhjhM ubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jfind_inode_rcusbc.find_inode_rcuasbuh1hhjվhhhjhM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjվhhhjhM ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjվhhhjhM ubjC)}(hfind_inode_rcuh]jI)}(hjh]hfind_inode_rcu}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjվhhhjhM ubj=)}(hT(struct super_block *sb, u64 hashval, int (*test)(struct inode*, void*), void *data)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubh)}(hhh]jI)}(h super_blockh]h super_block}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj )}j ]jc.find_inode_rcuasbuh1hhjOubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjKubjC)}(h u64 hashvalh](h)}(hhh]jI)}(hu64h]hu64}(hjƿhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjÿubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjȿmodnameN classnameNjj )}j ]jc.find_inode_rcuasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hhashvalh]hhashval}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjKubjC)}(h!int (*test)(struct inode*, void*)h](jf)}(hinth]hint}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(htesth]htest}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.find_inode_rcuasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjKubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdatah]hdata}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjKubeh}(h]h ]h"]h$]h&]j`jauh1j<hjվhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjѾhhhjhM ubah}(h]j̾ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjξhhubjw)}(hhh]h)}(h find an inode in the inode cacheh]h find an inode in the inode cache}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjPhhubah}(h]h ]h"]h$]h&]uh1jvhjξhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jhhhjhNhNubj)}(hX:**Parameters** ``struct super_block *sb`` Super block of file system to search ``u64 hashval`` Key to hash ``int (*test)(struct inode *, void *)`` Function to test match on an inode ``void *data`` Data for test function **Description** Search for the inode specified by **hashval** and **data** in the inode cache, where the helper function **test** will return 0 if the inode does not match and 1 if it does. The **test** function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized. If successful, this will return the inode for which the **test** function returned 1 and NULL otherwise. The **test** function is not permitted to take a ref on any inode presented. It is also not permitted to sleep. The caller must hold the RCU read lock.h](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjoubj)}(hhh](j)}(h@``struct super_block *sb`` Super block of file system to search h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h$Super block of file system to searchh]h$Super block of file system to search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``u64 hashval`` Key to hash h](j)}(h``u64 hashval``h]j)}(hjh]h u64 hashval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h Key to hashh]h Key to hash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hK``int (*test)(struct inode *, void *)`` Function to test match on an inode h](j)}(h'``int (*test)(struct inode *, void *)``h]j)}(hjh]h#int (*test)(struct inode *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h"Function to test match on an inodeh]h"Function to test match on an inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``void *data`` Data for test function Wh](j)}(h``void *data``h]j)}(hj?h]h void *data}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj9ubj)}(hhh]h)}(hData for test functionh]hData for test function}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubh)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjoubh)}(hX<Search for the inode specified by **hashval** and **data** in the inode cache, where the helper function **test** will return 0 if the inode does not match and 1 if it does. The **test** function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized.h](h"Search for the inode specified by }(hjhhhNhNubj)}(h **hashval**h]hhashval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ in the inode cache, where the helper function }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB will return 0 if the inode does not match and 1 if it does. The }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjoubh)}(hhIf successful, this will return the inode for which the **test** function returned 1 and NULL otherwise.h](h8If successful, this will return the inode for which the }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh( function returned 1 and NULL otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjoubh)}(hoThe **test** function is not permitted to take a ref on any inode presented. It is also not permitted to sleep.h](hThe }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhc function is not permitted to take a ref on any inode presented. It is also not permitted to sleep.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjoubh)}(h'The caller must hold the RCU read lock.h]h'The caller must hold the RCU read lock.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "find_inode_by_ino_rcu (C function)c.find_inode_by_ino_rcuhNtauh1hhjhhhNhNubj)}(hhh](j)}(hFstruct inode * find_inode_by_ino_rcu (struct super_block *sb, u64 ino)h]j)}(hDstruct inode *find_inode_by_ino_rcu(struct super_block *sb, u64 ino)h](j )}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjThhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM5ubj2)}(h h]h }(hjfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjThhhjehM5ubh)}(hhh]jI)}(hinodeh]hinode}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj )}j ]j)}jfind_inode_by_ino_rcusbc.find_inode_by_ino_rcuasbuh1hhjThhhjehM5ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjThhhjehM5ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjehM5ubjC)}(hfind_inode_by_ino_rcuh]jI)}(hjh]hfind_inode_by_ino_rcu}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjThhhjehM5ubj=)}(h!(struct super_block *sb, u64 ino)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.find_inode_by_ino_rcuasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hu64 inoh](h)}(hhh]jI)}(hu64h]hu64}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj )}j ]jc.find_inode_by_ino_rcuasbuh1hhj>ubj2)}(h h]h }(hjchhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubjI)}(hinoh]hino}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjThhhjehM5ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjPhhhjehM5ubah}(h]jKah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjehM5hjMhhubjw)}(hhh]h)}(h Find an inode in the inode cacheh]h Find an inode in the inode cache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM5hjhhubah}(h]h ]h"]h$]h&]uh1jvhjMhhhjehM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` Super block of file system to search ``u64 ino`` The inode number to match **Description** Search for the inode specified by **hashval** and **data** in the inode cache, where the helper function **test** will return 0 if the inode does not match and 1 if it does. The **test** function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized. If successful, this will return the inode for which the **test** function returned 1 and NULL otherwise. The **test** function is not permitted to take a ref on any inode presented. It is also not permitted to sleep. The caller must hold the RCU read lock.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM9hjubj)}(hhh](j)}(h@``struct super_block *sb`` Super block of file system to search h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM6hjubj)}(hhh]h)}(h$Super block of file system to searchh]h$Super block of file system to search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h&``u64 ino`` The inode number to match h](j)}(h ``u64 ino``h]j)}(hjh]hu64 ino}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM7hjubj)}(hhh]h)}(hThe inode number to matchh]hThe inode number to match}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM7hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM7hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM9hjubh)}(hX<Search for the inode specified by **hashval** and **data** in the inode cache, where the helper function **test** will return 0 if the inode does not match and 1 if it does. The **test** function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized.h](h"Search for the inode specified by }(hjfhhhNhNubj)}(h **hashval**h]hhashval}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh and }(hjfhhhNhNubj)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh/ in the inode cache, where the helper function }(hjfhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubhB will return 0 if the inode does not match and 1 if it does. The }(hjfhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM8hjubh)}(hhIf successful, this will return the inode for which the **test** function returned 1 and NULL otherwise.h](h8If successful, this will return the inode for which the }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh( function returned 1 and NULL otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM>hjubh)}(hoThe **test** function is not permitted to take a ref on any inode presented. It is also not permitted to sleep.h](hThe }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhc function is not permitted to take a ref on any inode presented. It is also not permitted to sleep.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMAhjubh)}(h'The caller must hold the RCU read lock.h]h'The caller must hold the RCU read lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j iput (C function)c.iputhNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid iput (struct inode *inode)h]j)}(hvoid iput(struct inode *inode)h](jf)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj*hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*hhhj<hMubjC)}(hiputh]jI)}(hiputh]hiput}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj*hhhj<hMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjgubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjQsbc.iputasbuh1hhjgubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjcubah}(h]h ]h"]h$]h&]j`jauh1j<hj*hhhj<hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj&hhhj<hMubah}(h]j!ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj<hMhj#hhubjw)}(hhh]h)}(h put an inodeh]h put an inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj#hhhj<hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` inode to put **Description** Puts an inode, dropping its usage count. If the inode use count hits zero, the inode is then freed and may also be destroyed. Consequently, iput() can sleep.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj ubj)}(hhh]j)}(h%``struct inode *inode`` inode to put h](j)}(h``struct inode *inode``h]j)}(hj/h]hstruct inode *inode}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj)ubj)}(hhh]h)}(h inode to puth]h inode to put}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj ubj)}(hPuts an inode, dropping its usage count. If the inode use count hits zero, the inode is then freed and may also be destroyed. Consequently, iput() can sleep.h](h)}(h}Puts an inode, dropping its usage count. If the inode use count hits zero, the inode is then freed and may also be destroyed.h]h}Puts an inode, dropping its usage count. If the inode use count hits zero, the inode is then freed and may also be destroyed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hConsequently, iput() can sleep.h]hConsequently, iput() can sleep.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j iput_not_last (C function)c.iput_not_lasthNtauh1hhjhhhNhNubj)}(hhh](j)}(h(void iput_not_last (struct inode *inode)h]j)}(h'void iput_not_last(struct inode *inode)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h iput_not_lasth]jI)}(h iput_not_lasth]h iput_not_last}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj )}j ]j)}jjsbc.iput_not_lastasbuh1hhjubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h4put an inode assuming this is not the last referenceh]h4put an inode assuming this is not the last reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h6**Parameters** ``struct inode *inode`` inode to puth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]j)}(h$``struct inode *inode`` inode to puth](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(h inode to puth]h inode to put}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bmap (C function)c.bmaphNtauh1hhjhhhNhNubj)}(hhh](j)}(h/int bmap (struct inode *inode, sector_t *block)h]j)}(h.int bmap(struct inode *inode, sector_t *block)h](jf)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM#ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj1hM#ubjC)}(hbmaph]jI)}(hbmaph]hbmap}(hjDhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj1hM#ubj=)}(h&(struct inode *inode, sector_t *block)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\ubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\ubh)}(hhh]jI)}(hinodeh]hinode}(hj~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjFsbc.bmapasbuh1hhj\ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjXubjC)}(hsector_t *blockh](h)}(hhh]jI)}(hsector_th]hsector_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bmapasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hblockh]hblock}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjXubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj1hM#ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj1hM#ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj1hM#hjhhubjw)}(hhh]h)}(hfind a block number in a fileh]hfind a block number in a file}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM#hj5hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj1hM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1jhhhjhNhNubj)}(hXj**Parameters** ``struct inode *inode`` inode owning the block number being requested ``sector_t *block`` pointer containing the block to find **Description** Replaces the value in ``*block`` with the block number on the device holding corresponding to the requested block number in the file. That is, asked for block 4 of inode 1 the function will replace the 4 in ``*block``, with disk block relative to the disk start that holds that block of the file. Returns -EINVAL in case of error, 0 otherwise. If mapping falls into a hole, returns 0 and ``*block`` is also set to 0.h](h)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM'hjTubj)}(hhh](j)}(hF``struct inode *inode`` inode owning the block number being requested h](j)}(h``struct inode *inode``h]j)}(hjyh]hstruct inode *inode}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM$hjsubj)}(hhh]h)}(h-inode owning the block number being requestedh]h-inode owning the block number being requested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjpubj)}(h9``sector_t *block`` pointer containing the block to find h](j)}(h``sector_t *block``h]j)}(hjh]hsector_t *block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM%hjubj)}(hhh]h)}(h$pointer containing the block to findh]h$pointer containing the block to find}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjpubeh}(h]h ]h"]h$]h&]uh1jhjTubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM'hjTubj)}(hXReplaces the value in ``*block`` with the block number on the device holding corresponding to the requested block number in the file. That is, asked for block 4 of inode 1 the function will replace the 4 in ``*block``, with disk block relative to the disk start that holds that block of the file. Returns -EINVAL in case of error, 0 otherwise. If mapping falls into a hole, returns 0 and ``*block`` is also set to 0.h](h)}(hX(Replaces the value in ``*block`` with the block number on the device holding corresponding to the requested block number in the file. That is, asked for block 4 of inode 1 the function will replace the 4 in ``*block``, with disk block relative to the disk start that holds that block of the file.h](hReplaces the value in }(hjhhhNhNubj)}(h ``*block``h]h*block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with the block number on the device holding corresponding to the requested block number in the file. That is, asked for block 4 of inode 1 the function will replace the 4 in }(hjhhhNhNubj)}(h ``*block``h]h*block}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhO, with disk block relative to the disk start that holds that block of the file.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM&hjubh)}(hwReturns -EINVAL in case of error, 0 otherwise. If mapping falls into a hole, returns 0 and ``*block`` is also set to 0.h](h[Returns -EINVAL in case of error, 0 otherwise. If mapping falls into a hole, returns 0 and }(hj:hhhNhNubj)}(h ``*block``h]h*block}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh is also set to 0.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM,hjubeh}(h]h ]h"]h$]h&]uh1jhj9hM&hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_update_time (C function)c.inode_update_timehNtauh1hhjhhhNhNubj)}(hhh](j)}(hYint inode_update_time (struct inode *inode, enum fs_update_time type, unsigned int flags)h]j)}(hXint inode_update_time(struct inode *inode, enum fs_update_time type, unsigned int flags)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj}hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}hhhjhMubjC)}(hinode_update_timeh]jI)}(hinode_update_timeh]hinode_update_time}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj}hhhjhMubj=)}(hC(struct inode *inode, enum fs_update_time type, unsigned int flags)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.inode_update_timeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(henum fs_update_time typeh](j )}(hj#h]henum}(hj0hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj,ubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubh)}(hhh]jI)}(hfs_update_timeh]hfs_update_time}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj )}j ]jc.inode_update_timeasbuh1hhj,ubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubjI)}(htypeh]htype}(hjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hunsigned int flagsh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj}hhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjyhhhjhMubah}(h]jtah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjvhhubjw)}(hhh]h)}(h9update either atime or c/mtime and i_version on the inodeh]h9update either atime or c/mtime and i_version on the inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjvhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct inode *inode`` inode to be updated ``enum fs_update_time type`` timestamp to be updated ``unsigned int flags`` flags for the update **Description** Update either atime or c/mtime and version in a inode if needed for a file access or modification. It is up to the caller to mark the inode dirty appropriately. Returns the positive I_DIRTY_* flags for __mark_inode_dirty() if the inode needs to be marked dirty, 0 if it did not, or a negative errno if an error happened.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh](j)}(h,``struct inode *inode`` inode to be updated h](j)}(h``struct inode *inode``h]j)}(hj6h]hstruct inode *inode}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj0ubj)}(hhh]h)}(hinode to be updatedh]hinode to be updated}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubj)}(h5``enum fs_update_time type`` timestamp to be updated h](j)}(h``enum fs_update_time type``h]j)}(hjoh]henum fs_update_time type}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjiubj)}(hhh]h)}(htimestamp to be updatedh]htimestamp to be updated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubj)}(h,``unsigned int flags`` flags for the update h](j)}(h``unsigned int flags``h]j)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hflags for the updateh]hflags for the update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hUpdate either atime or c/mtime and version in a inode if needed for a file access or modification. It is up to the caller to mark the inode dirty appropriately.h]hUpdate either atime or c/mtime and version in a inode if needed for a file access or modification. It is up to the caller to mark the inode dirty appropriately.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(hReturns the positive I_DIRTY_* flags for __mark_inode_dirty() if the inode needs to be marked dirty, 0 if it did not, or a negative errno if an error happened.h]hReturns the positive I_DIRTY_* flags for __mark_inode_dirty() if the inode needs to be marked dirty, 0 if it did not, or a negative errno if an error happened.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  generic_update_time (C function)c.generic_update_timehNtauh1hhjhhhNhNubj)}(hhh](j)}(h[int generic_update_time (struct inode *inode, enum fs_update_time type, unsigned int flags)h]j)}(hZint generic_update_time(struct inode *inode, enum fs_update_time type, unsigned int flags)h](jf)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj3hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3hhhjEhMubjC)}(hgeneric_update_timeh]jI)}(hgeneric_update_timeh]hgeneric_update_time}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj3hhhjEhMubj=)}(hC(struct inode *inode, enum fs_update_time type, unsigned int flags)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjthhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjpubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjZsbc.generic_update_timeasbuh1hhjpubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjlubjC)}(henum fs_update_time typeh](j )}(hj#h]henum}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfs_update_timeh]hfs_update_time}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_update_timeasbuh1hhjubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(htypeh]htype}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjlubjC)}(hunsigned int flagsh](jf)}(hunsignedh]hunsigned}(hjIhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjEubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEubjf)}(hinth]hint}(hjehhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjEubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEubjI)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjlubeh}(h]h ]h"]h$]h&]j`jauh1j<hj3hhhjEhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj/hhhjEhMubah}(h]j*ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjEhMhj,hhubjw)}(hhh]h)}(h"update the timestamps on the inodeh]h"update the timestamps on the inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj,hhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` inode to be updated ``enum fs_update_time type`` timestamp to be updated ``unsigned int flags`` flags for the update **Description** Returns a negative error value on error, else 0.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh](j)}(h,``struct inode *inode`` inode to be updated h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(hinode to be updatedh]hinode to be updated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``enum fs_update_time type`` timestamp to be updated h](j)}(h``enum fs_update_time type``h]j)}(hj%h]henum fs_update_time type}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubj)}(hhh]h)}(htimestamp to be updatedh]htimestamp to be updated}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h,``unsigned int flags`` flags for the update h](j)}(h``unsigned int flags``h]j)}(hj^h]hunsigned int flags}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjXubj)}(hhh]h)}(hflags for the updateh]hflags for the update}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(h0Returns a negative error value on error, else 0.h]h0Returns a negative error value on error, else 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j file_remove_privs (C function)c.file_remove_privshNtauh1hhjhhhNhNubj)}(hhh](j)}(h)int file_remove_privs (struct file *file)h]j)}(h(int file_remove_privs(struct file *file)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM_ ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM_ ubjC)}(hfile_remove_privsh]jI)}(hfile_remove_privsh]hfile_remove_privs}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM_ ubj=)}(h(struct file *file)h]jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfileh]hfile}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj )}j ]j)}jjsbc.file_remove_privsasbuh1hhjubj2)}(h h]h }(hjYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfileh]hfile}(hjthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM_ ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM_ ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM_ hjhhubjw)}(hhh]h)}(h3remove special file privileges (suid, capabilities)h]h3remove special file privileges (suid, capabilities)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM_ hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM_ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct file *file`` file to remove privileges from **Description** When file is modified by a write or truncation ensure that special file privileges are removed. **Return** 0 on success, negative errno on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMc hjubj)}(hhh]j)}(h5``struct file *file`` file to remove privileges from h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM` hjubj)}(hhh]h)}(hfile to remove privileges fromh]hfile to remove privileges from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM` hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM` hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMb hjubh)}(h_When file is modified by a write or truncation ensure that special file privileges are removed.h]h_When file is modified by a write or truncation ensure that special file privileges are removed.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMa hjubh)}(h **Return**h]j)}(hjAh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMd hjubh)}(h(0 on success, negative errno on failure.h]h(0 on success, negative errno on failure.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMe hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j current_time (C function)c.current_timehNtauh1hhjhhhNhNubj)}(hhh](j)}(h4struct timespec64 current_time (struct inode *inode)h]j)}(h3struct timespec64 current_time(struct inode *inode)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMn ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMn ubh)}(hhh]jI)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}j current_timesbc.current_timeasbuh1hhjhhhjhMn ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMn ubjC)}(h current_timeh]jI)}(hjh]h current_time}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMn ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.current_timeasbuh1hhjubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMn ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj~hhhjhMn ubah}(h]jyah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMn hj{hhubjw)}(hhh]h)}(h&Return FS time (possibly fine-grained)h]h&Return FS time (possibly fine-grained)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMn hjqhhubah}(h]h ]h"]h$]h&]uh1jvhj{hhhjhMn ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct inode *inode`` inode. **Description** Return the current time truncated to the time granularity supported by the fs, as suitable for a ctime/mtime change. If the ctime is flagged as having been QUERIED, get a fine-grained timestamp, but don't update the floor. For a multigrain inode, this is effectively an estimate of the timestamp that a file would receive. An actual update must go through inode_set_ctime_current().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMr hjubj)}(hhh]j)}(h``struct inode *inode`` inode. h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMo hjubj)}(hhh]h)}(hinode.h]hinode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMo hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMo hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMq hjubh)}(hReturn the current time truncated to the time granularity supported by the fs, as suitable for a ctime/mtime change. If the ctime is flagged as having been QUERIED, get a fine-grained timestamp, but don't update the floor.h]hReturn the current time truncated to the time granularity supported by the fs, as suitable for a ctime/mtime change. If the ctime is flagged as having been QUERIED, get a fine-grained timestamp, but don’t update the floor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMp hjubh)}(hFor a multigrain inode, this is effectively an estimate of the timestamp that a file would receive. An actual update must go through inode_set_ctime_current().h]hFor a multigrain inode, this is effectively an estimate of the timestamp that a file would receive. An actual update must go through inode_set_ctime_current().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMu hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j file_update_time (C function)c.file_update_timehNtauh1hhjhhhNhNubj)}(hhh](j)}(h(int file_update_time (struct file *file)h]j)}(h'int file_update_time(struct file *file)h](jf)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj@hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@hhhjRhM ubjC)}(hfile_update_timeh]jI)}(hfile_update_timeh]hfile_update_time}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj@hhhjRhM ubj=)}(h(struct file *file)h]jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubh)}(hhh]jI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjgsbc.file_update_timeasbuh1hhj}ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubah}(h]h ]h"]h$]h&]j`jauh1j<hj@hhhjRhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj<hhhjRhM ubah}(h]j7ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjRhM hj9hhubjw)}(hhh]h)}(hupdate mtime and ctime timeh]hupdate mtime and ctime time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhj9hhhjRhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXD**Parameters** ``struct file *file`` file accessed **Description** Update the mtime and ctime members of an inode and mark the inode for writeback. Note that this function is meant exclusively for usage in the file write path of filesystems, and filesystems may choose to explicitly ignore updates via this function with the _NOCMTIME inode flag, e.g. for network filesystem where these imestamps are handled by the server. This can return an error for file systems who need to allocate space in order to update an inode. **Return** 0 on success, negative errno on failure.h](h)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj ubj)}(hhh]j)}(h$``struct file *file`` file accessed h](j)}(h``struct file *file``h]j)}(hjEh]hstruct file *file}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj?ubj)}(hhh]h)}(h file accessedh]h file accessed}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhM hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj ubh)}(hXUpdate the mtime and ctime members of an inode and mark the inode for writeback. Note that this function is meant exclusively for usage in the file write path of filesystems, and filesystems may choose to explicitly ignore updates via this function with the _NOCMTIME inode flag, e.g. for network filesystem where these imestamps are handled by the server. This can return an error for file systems who need to allocate space in order to update an inode.h]hXUpdate the mtime and ctime members of an inode and mark the inode for writeback. Note that this function is meant exclusively for usage in the file write path of filesystems, and filesystems may choose to explicitly ignore updates via this function with the _NOCMTIME inode flag, e.g. for network filesystem where these imestamps are handled by the server. This can return an error for file systems who need to allocate space in order to update an inode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj ubh)}(h(0 on success, negative errno on failure.h]h(0 on success, negative errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j file_modified (C function)c.file_modifiedhNtauh1hhjhhhNhNubj)}(hhh](j)}(h%int file_modified (struct file *file)h]j)}(h$int file_modified(struct file *file)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubjC)}(h file_modifiedh]jI)}(h file_modifiedh]h file_modified}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(h(struct file *file)h]jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubh)}(hhh]jI)}(hfileh]hfile}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj )}j ]j)}jjsbc.file_modifiedasbuh1hhj%ubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(h1handle mandated vfs changes when modifying a fileh]h1handle mandated vfs changes when modifying a file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX'**Parameters** ``struct file *file`` file that was modified **Description** When file has been modified ensure that special file privileges are removed and time settings are updated. **Context** Caller must hold the file's inode lock. **Return** 0 on success, negative errno on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]j)}(h-``struct file *file`` file that was modified h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(hfile that was modifiedh]hfile that was modified}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hjWhen file has been modified ensure that special file privileges are removed and time settings are updated.h]hjWhen file has been modified ensure that special file privileges are removed and time settings are updated.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h **Context**h]j)}(hjOh]hContext}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h'Caller must hold the file's inode lock.h]h)Caller must hold the file’s inode lock.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h **Return**h]j)}(hjvh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h(0 on success, negative errno on failure.h]h(0 on success, negative errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j kiocb_modified (C function)c.kiocb_modifiedhNtauh1hhjhhhNhNubj)}(hhh](j)}(h'int kiocb_modified (struct kiocb *iocb)h]j)}(h&int kiocb_modified(struct kiocb *iocb)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubjC)}(hkiocb_modifiedh]jI)}(hkiocb_modifiedh]hkiocb_modified}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(h(struct kiocb *iocb)h]jC)}(hstruct kiocb *iocbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkiocbh]hkiocb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.kiocb_modifiedasbuh1hhjubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hiocbh]hiocb}(hjQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(h1handle mandated vfs changes when modifying a fileh]h1handle mandated vfs changes when modifying a file}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjxhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX(**Parameters** ``struct kiocb *iocb`` iocb that was modified **Description** When file has been modified ensure that special file privileges are removed and time settings are updated. **Context** Caller must hold the file's inode lock. **Return** 0 on success, negative errno on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]j)}(h.``struct kiocb *iocb`` iocb that was modified h](j)}(h``struct kiocb *iocb``h]j)}(hjh]hstruct kiocb *iocb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(hiocb that was modifiedh]hiocb that was modified}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hjWhen file has been modified ensure that special file privileges are removed and time settings are updated.h]hjWhen file has been modified ensure that special file privileges are removed and time settings are updated.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h **Context**h]j)}(hjh]hContext}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h'Caller must hold the file's inode lock.h]h)Caller must hold the file’s inode lock.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h(0 on success, negative errno on failure.h]h(0 on success, negative errno on failure.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_init_owner (C function)c.inode_init_ownerhNtauh1hhjhhhNhNubj)}(hhh](j)}(hkvoid inode_init_owner (struct mnt_idmap *idmap, struct inode *inode, const struct inode *dir, umode_t mode)h]j)}(hjvoid inode_init_owner(struct mnt_idmap *idmap, struct inode *inode, const struct inode *dir, umode_t mode)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubjC)}(hinode_init_ownerh]jI)}(hinode_init_ownerh]hinode_init_owner}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(hU(struct mnt_idmap *idmap, struct inode *inode, const struct inode *dir, umode_t mode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.inode_init_ownerasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj5ubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5ubh)}(hhh]jI)}(hinodeh]hinode}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj )}j ]jc.inode_init_ownerasbuh1hhj5ubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct inode *dirh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.inode_init_ownerasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj )}j ]jc.inode_init_ownerasbuh1hhj0ubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubjI)}(hmodeh]hmode}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]j}ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(hubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj:ubj)}(hhh]h)}(hDirectory inodeh]hDirectory inode}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM hjubj)}(h'``umode_t mode`` mode of the new inode h](j)}(h``umode_t mode``h]j)}(hjyh]h umode_t mode}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjsubj)}(hhh]h)}(hmode of the new inodeh]hmode of the new inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hXoIf the inode has been created through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions and initializing i_uid and i_gid. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hiIf the inode has been created through an idmapped mount the idmap of the vfsmount must be passed through }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This function will then take care to map the inode according to }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh before checking permissions and initializing i_uid and i_gid. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #inode_owner_or_capable (C function)c.inode_owner_or_capablehNtauh1hhjhhhNhNubj)}(hhh](j)}(hPbool inode_owner_or_capable (struct mnt_idmap *idmap, const struct inode *inode)h]j)}(hObool inode_owner_or_capable(struct mnt_idmap *idmap, const struct inode *inode)h](jf)}(hjih]hbool}(hj/hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj+hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+hhhj<hM ubjC)}(hinode_owner_or_capableh]jI)}(hinode_owner_or_capableh]hinode_owner_or_capable}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj+hhhj<hM ubj=)}(h4(struct mnt_idmap *idmap, const struct inode *inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjgubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjQsbc.inode_owner_or_capableasbuh1hhjgubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjcubjC)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.inode_owner_or_capableasbuh1hhjubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjcubeh}(h]h ]h"]h$]h&]j`jauh1j<hj+hhhj<hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj'hhhj<hM ubah}(h]j"ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj<hM hj$hhubjw)}(hhh]h)}(h'check current task permissions to inodeh]h'check current task permissions to inode}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjvhhubah}(h]h ]h"]h$]h&]uh1jvhj$hhhj<hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX]**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``const struct inode *inode`` inode being checked **Description** Return true if current either has CAP_FOWNER in a namespace with the inode owner uid mapped, or owns the file. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h2``const struct inode *inode`` inode being checked h](j)}(h``const struct inode *inode``h]j)}(hjh]hconst struct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(hinode being checkedh]hinode being checked}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hnReturn true if current either has CAP_FOWNER in a namespace with the inode owner uid mapped, or owns the file.h]hnReturn true if current either has CAP_FOWNER in a namespace with the inode owner uid mapped, or owns the file.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjShhhNhNubj)}(h **idmap**h]hidmap}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhB. This function will then take care to map the inode according to }(hjShhhNhNubj)}(h **idmap**h]hidmap}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjShhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_dio_wait (C function)c.inode_dio_waithNtauh1hhjhhhNhNubj)}(hhh](j)}(h)void inode_dio_wait (struct inode *inode)h]j)}(h(void inode_dio_wait(struct inode *inode)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubjC)}(hinode_dio_waith]jI)}(hinode_dio_waith]hinode_dio_wait}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.inode_dio_waitasbuh1hhjubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(h+wait for outstanding DIO requests to finishh]h+wait for outstanding DIO requests to finish}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjuhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX/**Parameters** ``struct inode *inode`` inode to wait for **Description** Waits for all pending direct I/O requests to finish so that we can proceed with a truncate or equivalent operation. Must be called under a lock that serializes taking new references to i_dio_count, usually by inode->i_rwsem.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]j)}(h*``struct inode *inode`` inode to wait for h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(hinode to wait forh]hinode to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hsWaits for all pending direct I/O requests to finish so that we can proceed with a truncate or equivalent operation.h]hsWaits for all pending direct I/O requests to finish so that we can proceed with a truncate or equivalent operation.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hlMust be called under a lock that serializes taking new references to i_dio_count, usually by inode->i_rwsem.h]hlMust be called under a lock that serializes taking new references to i_dio_count, usually by inode->i_rwsem.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j timestamp_truncate (C function)c.timestamp_truncatehNtauh1hhjhhhNhNubj)}(hhh](j)}(hOstruct timespec64 timestamp_truncate (struct timespec64 t, struct inode *inode)h]j)}(hNstruct timespec64 timestamp_truncate(struct timespec64 t, struct inode *inode)h](j )}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjDhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDhhhjUhM ubh)}(hhh]jI)}(h timespec64h]h timespec64}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj )}j ]j)}jtimestamp_truncatesbc.timestamp_truncateasbuh1hhjDhhhjUhM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDhhhjUhM ubjC)}(htimestamp_truncateh]jI)}(hjh]htimestamp_truncate}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjDhhhjUhM ubj=)}(h*(struct timespec64 t, struct inode *inode)h](jC)}(hstruct timespec64 th](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.timestamp_truncateasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hth]ht}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj )}j ]jc.timestamp_truncateasbuh1hhjubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjDhhhjUhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj@hhhjUhM ubah}(h]j;ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjUhM hj=hhubjw)}(hhh]h)}(h"Truncate timespec to a granularityh]h"Truncate timespec to a granularity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhj=hhhjUhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX!**Parameters** ``struct timespec64 t`` Timespec ``struct inode *inode`` inode being updated **Description** Truncate a timespec to the granularity supported by the fs containing the inode. Always rounds down. gran must not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns).h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh](j)}(h!``struct timespec64 t`` Timespec h](j)}(h``struct timespec64 t``h]j)}(hjh]hstruct timespec64 t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(hTimespech]hTimespec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h,``struct inode *inode`` inode being updated h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj ubj)}(hhh]h)}(hinode being updatedh]hinode being updated}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hTruncate a timespec to the granularity supported by the fs containing the inode. Always rounds down. gran must not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns).h]hTruncate a timespec to the granularity supported by the fs containing the inode. Always rounds down. gran must not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns).}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $inode_set_ctime_current (C function)c.inode_set_ctime_currenthNtauh1hhjhhhNhNubj)}(hhh](j)}(h?struct timespec64 inode_set_ctime_current (struct inode *inode)h]j)}(h>struct timespec64 inode_set_ctime_current(struct inode *inode)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM6 ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM6 ubh)}(hhh]jI)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jinode_set_ctime_currentsbc.inode_set_ctime_currentasbuh1hhjhhhjhM6 ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM6 ubjC)}(hinode_set_ctime_currenth]jI)}(hjh]hinode_set_ctime_current}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM6 ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]jc.inode_set_ctime_currentasbuh1hhjubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM6 ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM6 ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM6 hjhhubjw)}(hhh]h)}(hset the ctime to current_timeh]hset the ctime to current_time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM6 hj~hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM6 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct inode *inode`` inode **Description** Set the inode's ctime to the current value for the inode. Returns the current value that was assigned. If this is not a multigrain inode, then we set it to the later of the coarse time and floor value. If it is multigrain, then we first see if the coarse-grained timestamp is distinct from what is already there. If so, then use that. Otherwise, get a fine-grained timestamp. After that, try to swap the new value into i_ctime_nsec. Accept the resulting ctime, regardless of the outcome of the swap. If it has already been replaced, then that timestamp is later than the earlier unacceptable one, and is thus acceptable.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM: hjubj)}(hhh]j)}(h``struct inode *inode`` inode h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM7 hjubj)}(hhh]h)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM7 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7 hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM9 hjubh)}(hSet the inode's ctime to the current value for the inode. Returns the current value that was assigned. If this is not a multigrain inode, then we set it to the later of the coarse time and floor value.h]hSet the inode’s ctime to the current value for the inode. Returns the current value that was assigned. If this is not a multigrain inode, then we set it to the later of the coarse time and floor value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM8 hjubh)}(hIf it is multigrain, then we first see if the coarse-grained timestamp is distinct from what is already there. If so, then use that. Otherwise, get a fine-grained timestamp.h]hIf it is multigrain, then we first see if the coarse-grained timestamp is distinct from what is already there. If so, then use that. Otherwise, get a fine-grained timestamp.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM< hjubh)}(hAfter that, try to swap the new value into i_ctime_nsec. Accept the resulting ctime, regardless of the outcome of the swap. If it has already been replaced, then that timestamp is later than the earlier unacceptable one, and is thus acceptable.h]hAfter that, try to swap the new value into i_ctime_nsec. Accept the resulting ctime, regardless of the outcome of the swap. If it has already been replaced, then that timestamp is later than the earlier unacceptable one, and is thus acceptable.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM@ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "inode_set_ctime_deleg (C function)c.inode_set_ctime_deleghNtauh1hhjhhhNhNubj)}(hhh](j)}(hWstruct timespec64 inode_set_ctime_deleg (struct inode *inode, struct timespec64 update)h]j)}(hVstruct timespec64 inode_set_ctime_deleg(struct inode *inode, struct timespec64 update)h](j )}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\hhhjmhM ubh)}(hhh]jI)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jinode_set_ctime_delegsbc.inode_set_ctime_delegasbuh1hhj\hhhjmhM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\hhhjmhM ubjC)}(hinode_set_ctime_delegh]jI)}(hjh]hinode_set_ctime_deleg}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj\hhhjmhM ubj=)}(h/(struct inode *inode, struct timespec64 update)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.inode_set_ctime_delegasbuh1hhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct timespec64 updateh](j )}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj9ubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9ubh)}(hhh]jI)}(h timespec64h]h timespec64}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj )}j ]jc.inode_set_ctime_delegasbuh1hhj9ubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9ubjI)}(hupdateh]hupdate}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj\hhhjmhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjXhhhjmhM ubah}(h]jSah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjmhM hjUhhubjw)}(hhh]h)}(h,try to update the ctime on a delegated inodeh]h,try to update the ctime on a delegated inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhjUhhhjmhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXK**Parameters** ``struct inode *inode`` inode to update ``struct timespec64 update`` timespec64 to set the ctime **Description** Attempt to atomically update the ctime on behalf of a delegation holder. The nfs server can call back the holder of a delegation to get updated inode attributes, including the mtime. When updating the mtime, update the ctime to a value at least equal to that. This can race with concurrent updates to the inode, in which case the update is skipped. Note that this works even when multigrain timestamps are not enabled, so it is used in either case.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh](j)}(h(``struct inode *inode`` inode to update h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(hinode to updateh]hinode to update}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h9``struct timespec64 update`` timespec64 to set the ctime h](j)}(h``struct timespec64 update``h]j)}(hj+h]hstruct timespec64 update}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj%ubj)}(hhh]h)}(htimespec64 to set the ctimeh]htimespec64 to set the ctime}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hHAttempt to atomically update the ctime on behalf of a delegation holder.h]hHAttempt to atomically update the ctime on behalf of a delegation holder.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hThe nfs server can call back the holder of a delegation to get updated inode attributes, including the mtime. When updating the mtime, update the ctime to a value at least equal to that.h]hThe nfs server can call back the holder of a delegation to get updated inode attributes, including the mtime. When updating the mtime, update the ctime to a value at least equal to that.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hXThis can race with concurrent updates to the inode, in which case the update is skipped.h]hXThis can race with concurrent updates to the inode, in which case the update is skipped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hcNote that this works even when multigrain timestamps are not enabled, so it is used in either case.h]hcNote that this works even when multigrain timestamps are not enabled, so it is used in either case.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  in_group_or_capable (C function)c.in_group_or_capablehNtauh1hhjhhhNhNubj)}(hhh](j)}(h^bool in_group_or_capable (struct mnt_idmap *idmap, const struct inode *inode, vfsgid_t vfsgid)h]j)}(h]bool in_group_or_capable(struct mnt_idmap *idmap, const struct inode *inode, vfsgid_t vfsgid)h](jf)}(hjih]hbool}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubjC)}(hin_group_or_capableh]jI)}(hin_group_or_capableh]hin_group_or_capable}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(hE(struct mnt_idmap *idmap, const struct inode *inode, vfsgid_t vfsgid)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj )}j ]j)}jjsbc.in_group_or_capableasbuh1hhjubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jNc.in_group_or_capableasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hvfsgid_t vfsgidh](h)}(hhh]jI)}(hvfsgid_th]hvfsgid_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jNc.in_group_or_capableasbuh1hhj ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hvfsgidh]hvfsgid}(hj@hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(h-check whether caller is CAP_FSETID privilegedh]h-check whether caller is CAP_FSETID privileged}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjghhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from ``const struct inode *inode`` inode to check ``vfsgid_t vfsgid`` the new/current vfsgid of **inode** **Description** Check whether **vfsgid** is in the caller's group list or if the caller is privileged with CAP_FSETID over **inode**. This can be used to determine whether the setgid bit can be kept or must be dropped. **Return** true if the caller is sufficiently privileged, false if not.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(h+idmap of the mount **inode** was found fromh](hidmap of the mount }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was found from}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h-``const struct inode *inode`` inode to check h](j)}(h``const struct inode *inode``h]j)}(hjh]hconst struct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(hinode to checkh]hinode to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h8``vfsgid_t vfsgid`` the new/current vfsgid of **inode** h](j)}(h``vfsgid_t vfsgid``h]j)}(hj/h]hvfsgid_t vfsgid}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj)ubj)}(hhh]h)}(h#the new/current vfsgid of **inode**h](hthe new/current vfsgid of }(hjHhhhNhNubj)}(h **inode**h]hinode}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1hhjDhM hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hCheck whether **vfsgid** is in the caller's group list or if the caller is privileged with CAP_FSETID over **inode**. This can be used to determine whether the setgid bit can be kept or must be dropped.h](hCheck whether }(hjhhhNhNubj)}(h **vfsgid**h]hvfsgid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhU is in the caller’s group list or if the caller is privileged with CAP_FSETID over }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhV. This can be used to determine whether the setgid bit can be kept or must be dropped.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hah"]h$]h&]uh1j1hjhhhj,hM ubjC)}(hmode_strip_sgidh]jI)}(hj)h]hmode_strip_sgid}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj,hM ubj=)}(h@(struct mnt_idmap *idmap, const struct inode *dir, umode_t mode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjVubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjxhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj )}j ]j'c.mode_strip_sgidasbuh1hhjVubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubjC)}(hconst struct inode *dirh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j'c.mode_strip_sgidasbuh1hhjubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdirh]hdir}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj )}j ]j'c.mode_strip_sgidasbuh1hhjQubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj,hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj,hM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj,hM hjhhubjw)}(hhh]h)}(h'handle the sgid bit for non-directoriesh]h'handle the sgid bit for non-directories}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj,hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX_**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was created from ``const struct inode *dir`` parent directory inode ``umode_t mode`` mode of the file to be created in **dir** **Description** If the **mode** of the new file has both the S_ISGID and S_IXGRP bit raised and **dir** has the S_ISGID bit raised ensure that the caller is either in the group of the parent directory or they have CAP_FSETID in their user namespace and are privileged over the parent directory. In all other cases, strip the S_ISGID bit from **mode**. **Return** the new mode to use for the fileh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh](j)}(hJ``struct mnt_idmap *idmap`` idmap of the mount the inode was created from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(h-idmap of the mount the inode was created fromh]h-idmap of the mount the inode was created from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h3``const struct inode *dir`` parent directory inode h](j)}(h``const struct inode *dir``h]j)}(hj(h]hconst struct inode *dir}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj"ubj)}(hhh]h)}(hparent directory inodeh]hparent directory inode}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hjubj)}(h;``umode_t mode`` mode of the file to be created in **dir** h](j)}(h``umode_t mode``h]j)}(hjah]h umode_t mode}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj[ubj)}(hhh]h)}(h)mode of the file to be created in **dir**h](h"mode of the file to be created in }(hjzhhhNhNubj)}(h**dir**h]hdir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1hhjvhM hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hXOIf the **mode** of the new file has both the S_ISGID and S_IXGRP bit raised and **dir** has the S_ISGID bit raised ensure that the caller is either in the group of the parent directory or they have CAP_FSETID in their user namespace and are privileged over the parent directory. In all other cases, strip the S_ISGID bit from **mode**.h](hIf the }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhA of the new file has both the S_ISGID and S_IXGRP bit raised and }(hjhhhNhNubj)}(h**dir**h]hdir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh has the S_ISGID bit raised ensure that the caller is either in the group of the parent directory or they have CAP_FSETID in their user namespace and are privileged over the parent directory. In all other cases, strip the S_ISGID bit from }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h the new mode to use for the fileh]h the new mode to use for the file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j dump_inode (C function) c.dump_inodehNtauh1hhjhhhNhNubj)}(hhh](j)}(h9void dump_inode (struct inode *inode, const char *reason)h]j)}(h8void dump_inode(struct inode *inode, const char *reason)h](jf)}(hvoidh]hvoid}(hjLhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjHhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHhhhjZhM ubjC)}(h dump_inodeh]jI)}(h dump_inodeh]h dump_inode}(hjmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjHhhhjZhM ubj=)}(h)(struct inode *inode, const char *reason)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjosb c.dump_inodeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *reasonh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hreasonh]hreason}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjHhhhjZhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjDhhhjZhM ubah}(h]j?ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjZhM hjAhhubjw)}(hhh]h)}(hdump an inode.h]hdump an inode.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjfhhubah}(h]h ]h"]h$]h&]uh1jvhjAhhhjZhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct inode *inode`` inode to dump ``const char *reason`` reason for dumping **Description** If inode is an invalid pointer, we don't want to crash accessing it, so probe everything depending on it carefully with get_kernel_nofault().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh](j)}(h&``struct inode *inode`` inode to dump h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(h inode to dumph]h inode to dump}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h*``const char *reason`` reason for dumping h](j)}(h``const char *reason``h]j)}(hjh]hconst char *reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubj)}(hhh]h)}(hreason for dumpingh]hreason for dumping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(hIf inode is an invalid pointer, we don't want to crash accessing it, so probe everything depending on it carefully with get_kernel_nofault().h]hIf inode is an invalid pointer, we don’t want to crash accessing it, so probe everything depending on it carefully with get_kernel_nofault().}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j make_bad_inode (C function)c.make_bad_inodehNtauh1hhjhhhNhNubj)}(hhh](j)}(h)void make_bad_inode (struct inode *inode)h]j)}(h(void make_bad_inode(struct inode *inode)h](jf)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj_hhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_hhhjqhKubjC)}(hmake_bad_inodeh]jI)}(hmake_bad_inodeh]hmake_bad_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj_hhhjqhKubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.make_bad_inodeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hj_hhhjqhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj[hhhjqhKubah}(h]jVah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjqhKhjXhhubjw)}(hhh]h)}(h%mark an inode bad due to an I/O errorh]h%mark an inode bad due to an I/O error}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhj hhubah}(h]h ]h"]h$]h&]uh1jvhjXhhhjqhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct inode *inode`` Inode to mark bad **Description** When an inode cannot be read due to a media or remote network failure this function makes the inode "bad" and causes I/O operations on it to fail from this point on.h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhj?ubj)}(hhh]j)}(h*``struct inode *inode`` Inode to mark bad h](j)}(h``struct inode *inode``h]j)}(hjdh]hstruct inode *inode}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhj^ubj)}(hhh]h)}(hInode to mark badh]hInode to mark bad}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhKhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhj?ubj)}(hWhen an inode cannot be read due to a media or remote network failure this function makes the inode "bad" and causes I/O operations on it to fail from this point on.h]h)}(hWhen an inode cannot be read due to a media or remote network failure this function makes the inode "bad" and causes I/O operations on it to fail from this point on.h]hWhen an inode cannot be read due to a media or remote network failure this function makes the inode “bad” and causes I/O operations on it to fail from this point on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j is_bad_inode (C function)c.is_bad_inodehNtauh1hhjhhhNhNubj)}(hhh](j)}(h'bool is_bad_inode (struct inode *inode)h]j)}(h&bool is_bad_inode(struct inode *inode)h](jf)}(hjih]hbool}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhKubjC)}(h is_bad_inodeh]jI)}(h is_bad_inodeh]h is_bad_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhKubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubh)}(hhh]jI)}(hinodeh]hinode}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj )}j ]j)}jjsbc.is_bad_inodeasbuh1hhj&ubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj"ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjhhubjw)}(hhh]h)}(his an inode erroredh]his an inode errored}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` inode to test **Description** Returns true if the inode in question has been marked as bad.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjubj)}(hhh]j)}(h&``struct inode *inode`` inode to test h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjubj)}(hhh]h)}(h inode to testh]h inode to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjubj)}(h=Returns true if the inode in question has been marked as bad.h]h)}(hjAh]h=Returns true if the inode in question has been marked as bad.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhj?ubah}(h]h ]h"]h$]h&]uh1jhjPhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j iget_failed (C function) c.iget_failedhNtauh1hhjhhhNhNubj)}(hhh](j)}(h&void iget_failed (struct inode *inode)h]j)}(h%void iget_failed(struct inode *inode)h](jf)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjshhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjshhhjhKubjC)}(h iget_failedh]jI)}(h iget_failedh]h iget_failed}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjshhhjhKubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.iget_failedasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjshhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjohhhjhKubah}(h]jjah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjlhhubjw)}(hhh]h)}(h7Mark an under-construction inode as dead and release ith]h7Mark an under-construction inode as dead and release it}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhj4hhubah}(h]h ]h"]h$]h&]uh1jvhjlhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOjjOjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` The inode to discard **Description** Mark an under-construction inode as dead and release it.h](h)}(h**Parameters**h]j)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjSubj)}(hhh]j)}(h-``struct inode *inode`` The inode to discard h](j)}(h``struct inode *inode``h]j)}(hjxh]hstruct inode *inode}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjrubj)}(hhh]h)}(hThe inode to discardh]hThe inode to discard}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhKhjoubah}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjSubh)}(h8Mark an under-construction inode as dead and release it.h]h8Mark an under-construction inode as dead and release it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:32: ./fs/bad_inode.chKhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]inode-handlingah ]h"]inode handlingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hRegistration and Superblocksh]hRegistration and Superblocks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK$ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $deactivate_locked_super (C function)c.deactivate_locked_superhNtauh1hhjhhhNhNubj)}(hhh](j)}(h4void deactivate_locked_super (struct super_block *s)h]j)}(h3void deactivate_locked_super(struct super_block *s)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMLubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhjhMLubjC)}(hdeactivate_locked_superh]jI)}(hdeactivate_locked_superh]hdeactivate_locked_super}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhjhMLubj=)}(h(struct super_block *s)h]jC)}(hstruct super_block *sh](j )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(h super_blockh]h super_block}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]j)}jj4sbc.deactivate_locked_superasbuh1hhjJubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(hsh]hs}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubah}(h]h ]h"]h$]h&]j`jauh1j<hj hhhjhMLubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhjhMLubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMLhjhhubjw)}(hhh]h)}(h&drop an active reference to superblockh]h&drop an active reference to superblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *s`` superblock to deactivate **Description** Drops an active reference to superblock, converting it into a temporary one if there is no other active references left. In that case we tell fs driver to shut it down and drop the temporary reference we had just acquired. Caller holds exclusive lock on superblock; that lock is released.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMPhjubj)}(hhh]j)}(h3``struct super_block *s`` superblock to deactivate h](j)}(h``struct super_block *s``h]j)}(hjh]hstruct super_block *s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMMhj ubj)}(hhh]h)}(hsuperblock to deactivateh]hsuperblock to deactivate}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMMhj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMOhjubj)}(hX"Drops an active reference to superblock, converting it into a temporary one if there is no other active references left. In that case we tell fs driver to shut it down and drop the temporary reference we had just acquired. Caller holds exclusive lock on superblock; that lock is released.h](h)}(hDrops an active reference to superblock, converting it into a temporary one if there is no other active references left. In that case we tell fs driver to shut it down and drop the temporary reference we had just acquired.h]hDrops an active reference to superblock, converting it into a temporary one if there is no other active references left. In that case we tell fs driver to shut it down and drop the temporary reference we had just acquired.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMNhjcubh)}(hACaller holds exclusive lock on superblock; that lock is released.h]hACaller holds exclusive lock on superblock; that lock is released.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMShjcubeh}(h]h ]h"]h$]h&]uh1jhjuhMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j deactivate_super (C function)c.deactivate_superhNtauh1hhjhhhNhNubj)}(hhh](j)}(h-void deactivate_super (struct super_block *s)h]j)}(h,void deactivate_super(struct super_block *s)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMmubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMmubjC)}(hdeactivate_superh]jI)}(hdeactivate_superh]hdeactivate_super}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMmubj=)}(h(struct super_block *s)h]jC)}(hstruct super_block *sh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.deactivate_superasbuh1hhjubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hjh]hs}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMmubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMmubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMmhjhhubjw)}(hhh]h)}(h&drop an active reference to superblockh]h&drop an active reference to superblock}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMmhjghhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *s`` superblock to deactivate **Description** Variant of deactivate_locked_super(), except that superblock is *not* locked by caller. If we are going to drop the final active reference, lock will be acquired prior to that.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMqhjubj)}(hhh]j)}(h3``struct super_block *s`` superblock to deactivate h](j)}(h``struct super_block *s``h]j)}(hjh]hstruct super_block *s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMnhjubj)}(hhh]h)}(hsuperblock to deactivateh]hsuperblock to deactivate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMphjubj)}(hVariant of deactivate_locked_super(), except that superblock is *not* locked by caller. If we are going to drop the final active reference, lock will be acquired prior to that.h]h)}(hVariant of deactivate_locked_super(), except that superblock is *not* locked by caller. If we are going to drop the final active reference, lock will be acquired prior to that.h](h@Variant of deactivate_locked_super(), except that superblock is }(hjhhhNhNubj )}(h*not*h]hnot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~ hjubhl locked by caller. If we are going to drop the final active reference, lock will be acquired prior to that.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMohjubah}(h]h ]h"]h$]h&]uh1jhj hMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j retire_super (C function)c.retire_superhNtauh1hhjhhhNhNubj)}(hhh](j)}(h*void retire_super (struct super_block *sb)h]j)}(h)void retire_super(struct super_block *sb)h](jf)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjChhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjChhhjUhMubjC)}(h retire_superh]jI)}(h retire_superh]h retire_super}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjChhhjUhMubj=)}(h(struct super_block *sb)h]jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjjsbc.retire_superasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj|ubah}(h]h ]h"]h$]h&]j`jauh1j<hjChhhjUhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj?hhhjUhMubah}(h]j:ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjUhMhj<hhubjw)}(hhh]h)}(h%prevents superblock from being reusedh]h%prevents superblock from being reused}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj<hhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` superblock to retire **Description** The function marks superblock to be ignored in superblock test, which prevents it from being reused for any new mounts. If the superblock has a private bdi, it also unregisters it, but doesn't reduce the refcount of the superblock to prevent potential races. The refcount is reduced by generic_shutdown_super(). The function can not be called concurrently with generic_shutdown_super(). It is safe to call the function multiple times, subsequent calls have no effect. The marker will affect the re-use only for block-device-based superblocks. Other superblocks will still get marked if this function is used, but that will not affect their reusability.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj#ubj)}(hhh]j)}(h0``struct super_block *sb`` superblock to retire h](j)}(h``struct super_block *sb``h]j)}(hjHh]hstruct super_block *sb}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjBubj)}(hhh]h)}(hsuperblock to retireh]hsuperblock to retire}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj#ubj)}(hXThe function marks superblock to be ignored in superblock test, which prevents it from being reused for any new mounts. If the superblock has a private bdi, it also unregisters it, but doesn't reduce the refcount of the superblock to prevent potential races. The refcount is reduced by generic_shutdown_super(). The function can not be called concurrently with generic_shutdown_super(). It is safe to call the function multiple times, subsequent calls have no effect. The marker will affect the re-use only for block-device-based superblocks. Other superblocks will still get marked if this function is used, but that will not affect their reusability.h](h)}(hXThe function marks superblock to be ignored in superblock test, which prevents it from being reused for any new mounts. If the superblock has a private bdi, it also unregisters it, but doesn't reduce the refcount of the superblock to prevent potential races. The refcount is reduced by generic_shutdown_super(). The function can not be called concurrently with generic_shutdown_super(). It is safe to call the function multiple times, subsequent calls have no effect.h]hXThe function marks superblock to be ignored in superblock test, which prevents it from being reused for any new mounts. If the superblock has a private bdi, it also unregisters it, but doesn’t reduce the refcount of the superblock to prevent potential races. The refcount is reduced by generic_shutdown_super(). The function can not be called concurrently with generic_shutdown_super(). It is safe to call the function multiple times, subsequent calls have no effect.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hThe marker will affect the re-use only for block-device-based superblocks. Other superblocks will still get marked if this function is used, but that will not affect their reusability.h]hThe marker will affect the re-use only for block-device-based superblocks. Other superblocks will still get marked if this function is used, but that will not affect their reusability.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #generic_shutdown_super (C function)c.generic_shutdown_superhNtauh1hhjhhhNhNubj)}(hhh](j)}(h4void generic_shutdown_super (struct super_block *sb)h]j)}(h3void generic_shutdown_super(struct super_block *sb)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hgeneric_shutdown_superh]jI)}(hgeneric_shutdown_superh]hgeneric_shutdown_super}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct super_block *sb)h]jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj )}j ]j)}jjsbc.generic_shutdown_superasbuh1hhjubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hcommon helper for ->kill_sb()h]hcommon helper for ->kill_sb()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXv**Parameters** ``struct super_block *sb`` superblock to kill **Description** generic_shutdown_super() does all fs-independent work on superblock shutdown. Typical ->kill_sb() should pick all fs-specific objects that need destruction out of superblock, call generic_shutdown_super() and release aforementioned objects. Note: dentries and inodes _are_ taken care of and do not need specific handling. Upon calling this function, the filesystem may no longer alter or rearrange the set of dentries belonging to this super_block, nor may it change the attachments of dentries to inodes.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]j)}(h.``struct super_block *sb`` superblock to kill h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(hsuperblock to killh]hsuperblock to kill}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hXgeneric_shutdown_super() does all fs-independent work on superblock shutdown. Typical ->kill_sb() should pick all fs-specific objects that need destruction out of superblock, call generic_shutdown_super() and release aforementioned objects. Note: dentries and inodes _are_ taken care of and do not need specific handling. Upon calling this function, the filesystem may no longer alter or rearrange the set of dentries belonging to this super_block, nor may it change the attachments of dentries to inodes.h](h)}(hXCgeneric_shutdown_super() does all fs-independent work on superblock shutdown. Typical ->kill_sb() should pick all fs-specific objects that need destruction out of superblock, call generic_shutdown_super() and release aforementioned objects. Note: dentries and inodes _are_ taken care of and do not need specific handling.h]hXCgeneric_shutdown_super() does all fs-independent work on superblock shutdown. Typical ->kill_sb() should pick all fs-specific objects that need destruction out of superblock, call generic_shutdown_super() and release aforementioned objects. Note: dentries and inodes _are_ taken care of and do not need specific handling.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj3ubh)}(hUpon calling this function, the filesystem may no longer alter or rearrange the set of dentries belonging to this super_block, nor may it change the attachments of dentries to inodes.h]hUpon calling this function, the filesystem may no longer alter or rearrange the set of dentries belonging to this super_block, nor may it change the attachments of dentries to inodes.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj3ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j sget_fc (C function) c.sget_fchNtauh1hhjhhhNhNubj)}(hhh](j)}(hstruct super_block * sget_fc (struct fs_context *fc, int (*test)(struct super_block *, struct fs_context *), int (*set)(struct super_block *, struct fs_context *))h]j)}(hstruct super_block *sget_fc(struct fs_context *fc, int (*test)(struct super_block*, struct fs_context*), int (*set)(struct super_block*, struct fs_context*))h](j )}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM:ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwhhhjhM:ubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jsget_fcsb c.sget_fcasbuh1hhjwhhhjhM:ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwhhhjhM:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjhM:ubjC)}(hsget_fch]jI)}(hjh]hsget_fc}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjwhhhjhM:ubj=)}(h(struct fs_context *fc, int (*test)(struct super_block*, struct fs_context*), int (*set)(struct super_block*, struct fs_context*))h](jC)}(hstruct fs_context *fch](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.sget_fcasbuh1hhjubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfch]hfc}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h4int (*test)(struct super_block*, struct fs_context*)h](jf)}(hinth]hint}(hjehhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjaubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjI)}(htesth]htest}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjaubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.sget_fcasbuh1hhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hj3h]h,}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubj )}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjaubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj )}j ]j c.sget_fcasbuh1hhjaubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjϙh]h)}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h3int (*set)(struct super_block*, struct fs_context*)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hseth]hset}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.sget_fcasbuh1hhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj3h]h,}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj )}j ]j c.sget_fcasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjwhhhjhM:ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjshhhjhM:ubah}(h]jnah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM:hjphhubjw)}(hhh]h)}(hFind or create a superblockh]hFind or create a superblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM:hjhhubah}(h]h ]h"]h$]h&]uh1jvhjphhhjhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct fs_context *fc`` Filesystem context. ``int (*test)(struct super_block *, struct fs_context *)`` Comparison callback ``int (*set)(struct super_block *, struct fs_context *)`` Setup callback **Description** Create a new superblock or find an existing one. The **test** callback is used to find a matching existing superblock. Whether or not the requested parameters in **fc** are taken into account is specific to the **test** callback that is used. They may even be completely ignored. If an extant superblock is matched, it will be returned unless: (1) the namespace the filesystem context **fc** and the extant superblock's namespace differ (2) the filesystem context **fc** has requested that reusing an extant superblock is not allowed In both cases EBUSY will be returned. If no match is made, a new superblock will be allocated and basic initialisation will be performed (s_type, s_fs_info and s_id will be set and the **set** callback will be invoked), the superblock will be published and it will be returned in a partially constructed state with SB_BORN and SB_ACTIVE as yet unset. **Return** On success, an extant or newly created superblock is returned. On failure an error pointer is returned.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM>hjubj)}(hhh](j)}(h.``struct fs_context *fc`` Filesystem context. h](j)}(h``struct fs_context *fc``h]j)}(hjh]hstruct fs_context *fc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM;hjubj)}(hhh]h)}(hFilesystem context.h]hFilesystem context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubj)}(hO``int (*test)(struct super_block *, struct fs_context *)`` Comparison callback h](j)}(h:``int (*test)(struct super_block *, struct fs_context *)``h]j)}(hj6h]h6int (*test)(struct super_block *, struct fs_context *)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM<hj0ubj)}(hhh]h)}(hComparison callbackh]hComparison callback}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM<hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM<hjubj)}(hI``int (*set)(struct super_block *, struct fs_context *)`` Setup callback h](j)}(h9``int (*set)(struct super_block *, struct fs_context *)``h]j)}(hjoh]h5int (*set)(struct super_block *, struct fs_context *)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM=hjiubj)}(hhh]h)}(hSetup callbackh]hSetup callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM?hjubh)}(h0Create a new superblock or find an existing one.h]h0Create a new superblock or find an existing one.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM>hjubh)}(hThe **test** callback is used to find a matching existing superblock. Whether or not the requested parameters in **fc** are taken into account is specific to the **test** callback that is used. They may even be completely ignored.h](hThe }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhe callback is used to find a matching existing superblock. Whether or not the requested parameters in }(hjhhhNhNubj)}(h**fc**h]hfc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh+ are taken into account is specific to the }(hjhhhNhNubj)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh< callback that is used. They may even be completely ignored.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM@hjubh)}(h?If an extant superblock is matched, it will be returned unless:h]h?If an extant superblock is matched, it will be returned unless:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMEhjubhenumerated_list)}(hhh](jD)}(hYthe namespace the filesystem context **fc** and the extant superblock's namespace differ h]h)}(hXthe namespace the filesystem context **fc** and the extant superblock's namespace differh](h%the namespace the filesystem context }(hj,hhhNhNubj)}(h**fc**h]hfc}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh/ and the extant superblock’s namespace differ}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMGhj(ubah}(h]h ]h"]h$]h&]uh1jDhj%ubjD)}(h]the filesystem context **fc** has requested that reusing an extant superblock is not allowed h]h)}(h\the filesystem context **fc** has requested that reusing an extant superblock is not allowedh](hthe filesystem context }(hjWhhhNhNubj)}(h**fc**h]hfc}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh? has requested that reusing an extant superblock is not allowed}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMJhjSubah}(h]h ]h"]h$]h&]uh1jDhj%ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixjsuffixjϙuh1j#hjubh)}(h%In both cases EBUSY will be returned.h]h%In both cases EBUSY will be returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMMhjubh)}(hX8If no match is made, a new superblock will be allocated and basic initialisation will be performed (s_type, s_fs_info and s_id will be set and the **set** callback will be invoked), the superblock will be published and it will be returned in a partially constructed state with SB_BORN and SB_ACTIVE as yet unset.h](hIf no match is made, a new superblock will be allocated and basic initialisation will be performed (s_type, s_fs_info and s_id will be set and the }(hjhhhNhNubj)}(h**set**h]hset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh callback will be invoked), the superblock will be published and it will be returned in a partially constructed state with SB_BORN and SB_ACTIVE as yet unset.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMOhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMUhjubh)}(hgOn success, an extant or newly created superblock is returned. On failure an error pointer is returned.h]hgOn success, an extant or newly created superblock is returned. On failure an error pointer is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  iterate_supers_type (C function)c.iterate_supers_typehNtauh1hhjhhhNhNubj)}(hhh](j)}(hlvoid iterate_supers_type (struct file_system_type *type, void (*f)(struct super_block *, void *), void *arg)h]j)}(hivoid iterate_supers_type(struct file_system_type *type, void (*f)(struct super_block*, void*), void *arg)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj hMubjC)}(hiterate_supers_typeh]jI)}(hiterate_supers_typeh]hiterate_supers_type}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj hMubj=)}(hQ(struct file_system_type *type, void (*f)(struct super_block*, void*), void *arg)h](jC)}(hstruct file_system_type *typeh](j )}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj8ubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8ubh)}(hhh]jI)}(hfile_system_typeh]hfile_system_type}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj )}j ]j)}jj"sbc.iterate_supers_typeasbuh1hhj8ubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjI)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4ubjC)}(h%void (*f)(struct super_block*, void*)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfh]hf}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj )}j ]jvc.iterate_supers_typeasbuh1hhjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj3h]h,}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4ubjC)}(h void *argh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hargh]harg}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj hMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hMhjhhubjw)}(hhh]h)}(h+call function for superblocks of given typeh]h+call function for superblocks of given type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX$**Parameters** ``struct file_system_type *type`` fs type ``void (*f)(struct super_block *, void *)`` function to call ``void *arg`` argument to pass to it **Description** Scans the superblock list and calls given function, passing it locked superblock and given argument.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh](j)}(h*``struct file_system_type *type`` fs type h](j)}(h!``struct file_system_type *type``h]j)}(hj7h]hstruct file_system_type *type}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj1ubj)}(hhh]h)}(hfs typeh]hfs type}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.ubj)}(h=``void (*f)(struct super_block *, void *)`` function to call h](j)}(h+``void (*f)(struct super_block *, void *)``h]j)}(hjph]h'void (*f)(struct super_block *, void *)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjjubj)}(hhh]h)}(hfunction to callh]hfunction to call}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubj)}(h%``void *arg`` argument to pass to it h](j)}(h ``void *arg``h]j)}(hjh]h void *arg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(hargument to pass to ith]hargument to pass to it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hdScans the superblock list and calls given function, passing it locked superblock and given argument.h]h)}(hdScans the superblock list and calls given function, passing it locked superblock and given argument.h]hdScans the superblock list and calls given function, passing it locked superblock and given argument.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubah}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j get_anon_bdev (C function)c.get_anon_bdevhNtauh1hhjhhhNhNubj)}(hhh](j)}(hint get_anon_bdev (dev_t *p)h]j)}(hint get_anon_bdev(dev_t *p)h](jf)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj/hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM$ubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/hhhjAhM$ubjC)}(h get_anon_bdevh]jI)}(h get_anon_bdevh]h get_anon_bdev}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjPubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj/hhhjAhM$ubj=)}(h (dev_t *p)h]jC)}(hdev_t *ph](h)}(hhh]jI)}(hdev_th]hdev_t}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj )}j ]j)}jjVsbc.get_anon_bdevasbuh1hhjlubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjI)}(hjh]hp}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjhubah}(h]h ]h"]h$]h&]j`jauh1j<hj/hhhjAhM$ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj+hhhjAhM$ubah}(h]j&ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjAhM$hj(hhubjw)}(hhh]h)}(h=Allocate a block device for filesystems which don't have one.h]h?Allocate a block device for filesystems which don’t have one.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM$hjhhubah}(h]h ]h"]h$]h&]uh1jvhj(hhhjAhM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXc**Parameters** ``dev_t *p`` Pointer to a dev_t. **Description** Filesystems which don't use real block devices can call this function to allocate a virtual block device. **Context** Any context. Frequently called while holding sb_lock. **Return** 0 on success, -EMFILE if there are no anonymous bdevs left or -ENOMEM if memory allocation failed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM(hjubj)}(hhh]j)}(h!``dev_t *p`` Pointer to a dev_t. h](j)}(h ``dev_t *p``h]j)}(hjh]hdev_t *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM%hjubj)}(hhh]h)}(hPointer to a dev_t.h]hPointer to a dev_t.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM%hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hM%hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM'hjubh)}(hiFilesystems which don't use real block devices can call this function to allocate a virtual block device.h]hkFilesystems which don’t use real block devices can call this function to allocate a virtual block device.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM&hjubh)}(h **Context**h]j)}(hjzh]hContext}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM)hjubh)}(h6Any context. Frequently called while holding sb_lock.h]h6Any context. Frequently called while holding sb_lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM*hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM,hjubh)}(hb0 on success, -EMFILE if there are no anonymous bdevs left or -ENOMEM if memory allocation failed.h]hb0 on success, -EMFILE if there are no anonymous bdevs left or -ENOMEM if memory allocation failed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j sget_dev (C function) c.sget_devhNtauh1hhjhhhNhNubj)}(hhh](j)}(h@struct super_block * sget_dev (struct fs_context *fc, dev_t dev)h]j)}(h>struct super_block *sget_dev(struct fs_context *fc, dev_t dev)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jsget_devsb c.sget_devasbuh1hhjhhhjhMubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hsget_devh]jI)}(hj#h]hsget_dev}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h"(struct fs_context *fc, dev_t dev)h](jC)}(hstruct fs_context *fch](j )}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\ubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\ubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hj~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j! c.sget_devasbuh1hhj\ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjI)}(hfch]hfc}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjXubjC)}(h dev_t devh](h)}(hhh]jI)}(hdev_th]hdev_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j! c.sget_devasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjXubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h,Find or create a superblock by device numberh]h,Find or create a superblock by device number}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct fs_context *fc`` Filesystem context. ``dev_t dev`` device number **Description** Find or create a superblock using the provided device number that will be stored in fc->sget_key. If an extant superblock is matched, then that will be returned with an elevated reference count that the caller must transfer or discard. If no match is made, a new superblock will be allocated and basic initialisation will be performed (s_type, s_fs_info, s_id, s_dev will be set). The superblock will be published and it will be returned in a partially constructed state with SB_BORN and SB_ACTIVE as yet unset. **Return** an existing or newly created superblock on success, an error pointer on failure.h](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjEubj)}(hhh](j)}(h.``struct fs_context *fc`` Filesystem context. h](j)}(h``struct fs_context *fc``h]j)}(hjjh]hstruct fs_context *fc}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjdubj)}(hhh]h)}(hFilesystem context.h]hFilesystem context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(h``dev_t dev`` device number h](j)}(h ``dev_t dev``h]j)}(hjh]h dev_t dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(h device numberh]h device number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjEubh)}(haFind or create a superblock using the provided device number that will be stored in fc->sget_key.h]haFind or create a superblock using the provided device number that will be stored in fc->sget_key.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjEubh)}(hIf an extant superblock is matched, then that will be returned with an elevated reference count that the caller must transfer or discard.h]hIf an extant superblock is matched, then that will be returned with an elevated reference count that the caller must transfer or discard.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjEubh)}(hXIf no match is made, a new superblock will be allocated and basic initialisation will be performed (s_type, s_fs_info, s_id, s_dev will be set). The superblock will be published and it will be returned in a partially constructed state with SB_BORN and SB_ACTIVE as yet unset.h]hXIf no match is made, a new superblock will be allocated and basic initialisation will be performed (s_type, s_fs_info, s_id, s_dev will be set). The superblock will be published and it will be returned in a partially constructed state with SB_BORN and SB_ACTIVE as yet unset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjEubh)}(h **Return**h]j)}(hj#h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjEubh)}(hPan existing or newly created superblock on success, an error pointer on failure.h]hPan existing or newly created superblock on success, an error pointer on failure.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %fs_bdev_file_open_by_dev (C function)c.fs_bdev_file_open_by_devhNtauh1hhjhhhNhNubj)}(hhh](j)}(histruct file * fs_bdev_file_open_by_dev (dev_t dev, blk_mode_t mode, void *holder, struct super_block *sb)h]j)}(hgstruct file *fs_bdev_file_open_by_dev(dev_t dev, blk_mode_t mode, void *holder, struct super_block *sb)h](j )}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjdhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdhhhjuhMubh)}(hhh]jI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jfs_bdev_file_open_by_devsbc.fs_bdev_file_open_by_devasbuh1hhjdhhhjuhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdhhhjuhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjuhMubjC)}(hfs_bdev_file_open_by_devh]jI)}(hjh]hfs_bdev_file_open_by_dev}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjdhhhjuhMubj=)}(hB(dev_t dev, blk_mode_t mode, void *holder, struct super_block *sb)h](jC)}(h dev_t devh](h)}(hhh]jI)}(hdev_th]hdev_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.fs_bdev_file_open_by_devasbuh1hhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hblk_mode_t modeh](h)}(hhh]jI)}(h blk_mode_th]h blk_mode_t}(hj- hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj* ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/ modnameN classnameNjj )}j ]jc.fs_bdev_file_open_by_devasbuh1hhj& ubj2)}(h h]h }(hjK hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj& ubjI)}(hmodeh]hmode}(hjY hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj& ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h void *holderh](jf)}(hvoidh]hvoid}(hjr hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjn ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjn ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn ubjI)}(hholderh]hholder}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjn ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(h super_blockh]h super_block}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]jc.fs_bdev_file_open_by_devasbuh1hhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hsbh]hsb}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjdhhhjuhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj`hhhjuhMubah}(h]j[ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjuhMhj]hhubjw)}(hhh]h)}(h.claim a block device on behalf of a superblockh]h.claim a block device on behalf of a superblock}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj2 hhubah}(h]h ]h"]h$]h&]uh1jvhj]hhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjM jjM jjjuh1jhhhjhNhNubj)}(hXj**Parameters** ``dev_t dev`` block device number ``blk_mode_t mode`` open mode ``void *holder`` block-layer exclusivity token (a superblock, or the file_system_type when the device may be shared by several superblocks of that type) ``struct super_block *sb`` superblock to drive fs_holder_ops events for **Description** Open **dev** with :c:type:`fs_holder_ops` and register that **sb** uses it, so device removal/sync/freeze/thaw are propagated to **sb** (and any other superblock sharing **dev**). Must be paired with fs_bdev_file_release(). **Return** an opened block-device file or an ERR_PTR().h](h)}(h**Parameters**h]j)}(hjW h]h Parameters}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjQ ubj)}(hhh](j)}(h"``dev_t dev`` block device number h](j)}(h ``dev_t dev``h]j)}(hjv h]h dev_t dev}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjp ubj)}(hhh]h)}(hblock device numberh]hblock device number}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjp ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjm ubj)}(h``blk_mode_t mode`` open mode h](j)}(h``blk_mode_t mode``h]j)}(hj h]hblk_mode_t mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj ubj)}(hhh]h)}(h open modeh]h open mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjm ubj)}(h``void *holder`` block-layer exclusivity token (a superblock, or the file_system_type when the device may be shared by several superblocks of that type) h](j)}(h``void *holder``h]j)}(hj h]h void *holder}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj ubj)}(hhh]h)}(hblock-layer exclusivity token (a superblock, or the file_system_type when the device may be shared by several superblocks of that type)h]hblock-layer exclusivity token (a superblock, or the file_system_type when the device may be shared by several superblocks of that type)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjm ubj)}(hH``struct super_block *sb`` superblock to drive fs_holder_ops events for h](j)}(h``struct super_block *sb``h]j)}(hj" h]hstruct super_block *sb}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj ubj)}(hhh]h)}(h,superblock to drive fs_holder_ops events forh]h,superblock to drive fs_holder_ops events for}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7 hMhj8 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj7 hMhjm ubeh}(h]h ]h"]h$]h&]uh1jhjQ ubh)}(h**Description**h]j)}(hj] h]h Description}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjQ ubh)}(hOpen **dev** with :c:type:`fs_holder_ops` and register that **sb** uses it, so device removal/sync/freeze/thaw are propagated to **sb** (and any other superblock sharing **dev**). Must be paired with fs_bdev_file_release().h](hOpen }(hjs hhhNhNubj)}(h**dev**h]hdev}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs ubh with }(hjs hhhNhNubh)}(h:c:type:`fs_holder_ops`h]j)}(hj h]h fs_holder_ops}(hj hhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocfilesystems/api-summary refdomainjreftypetype refexplicitrefwarnjj )}j ]sb reftarget fs_holder_opsuh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjs ubh and register that }(hjs hhhNhNubj)}(h**sb**h]hsb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs ubh? uses it, so device removal/sync/freeze/thaw are propagated to }(hjs hhhNhNubj)}(h**sb**h]hsb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs ubh# (and any other superblock sharing }(hjs hhhNhNubj)}(h**dev**h]hdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs ubh/). Must be paired with fs_bdev_file_release().}(hjs hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhjQ ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjQ ubh)}(h,an opened block-device file or an ERR_PTR().h]h,an opened block-device file or an ERR_PTR().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjQ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j &fs_bdev_file_open_by_path (C function)c.fs_bdev_file_open_by_pathhNtauh1hhjhhhNhNubj)}(hhh](j)}(hqstruct file * fs_bdev_file_open_by_path (const char *path, blk_mode_t mode, void *holder, struct super_block *sb)h]j)}(hostruct file *fs_bdev_file_open_by_path(const char *path, blk_mode_t mode, void *holder, struct super_block *sb)h](j )}(hjh]hstruct}(hj: hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj6 hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjH hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6 hhhjG hMubh)}(hhh]jI)}(hfileh]hfile}(hjY hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjV ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[ modnameN classnameNjj )}j ]j)}jfs_bdev_file_open_by_pathsbc.fs_bdev_file_open_by_pathasbuh1hhj6 hhhjG hMubj2)}(h h]h }(hjz hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6 hhhjG hMubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6 hhhjG hMubjC)}(hfs_bdev_file_open_by_pathh]jI)}(hjw h]hfs_bdev_file_open_by_path}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj6 hhhjG hMubj=)}(hI(const char *path, blk_mode_t mode, void *holder, struct super_block *sb)h](jC)}(hconst char *pathh](j )}(hjh]hconst}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjf)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hpathh]hpath}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hblk_mode_t modeh](h)}(hhh]jI)}(h blk_mode_th]h blk_mode_t}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]ju c.fs_bdev_file_open_by_pathasbuh1hhj ubj2)}(h h]h }(hj2 hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hmodeh]hmode}(hj@ hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h void *holderh](jf)}(hvoidh]hvoid}(hjY hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjU ubj2)}(h h]h }(hjg hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjU ubj)}(hjh]h*}(hju hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU ubjI)}(hholderh]hholder}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjU ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(h super_blockh]h super_block}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]ju c.fs_bdev_file_open_by_pathasbuh1hhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hsbh]hsb}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj6 hhhjG hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj2 hhhjG hMubah}(h]j- ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjG hMhj/ hhubjw)}(hhh]h)}(h.claim a block device on behalf of a superblockh]h.claim a block device on behalf of a superblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj/ hhhjG hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const char *path`` path to the block device ``blk_mode_t mode`` open mode ``void *holder`` block-layer exclusivity token (a superblock, or the file_system_type when the device may be shared by several superblocks of that type) ``struct super_block *sb`` superblock to drive fs_holder_ops events for **Description** Open the block device at **path** with :c:type:`fs_holder_ops` and register that **sb** uses it, so device removal/sync/freeze/thaw are propagated to **sb** (and any other superblock sharing the device). Must be paired with fs_bdev_file_release(). **Return** an opened block-device file or an ERR_PTR().h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj8ubj)}(hhh](j)}(h.``const char *path`` path to the block device h](j)}(h``const char *path``h]j)}(hj]h]hconst char *path}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjWubj)}(hhh]h)}(hpath to the block deviceh]hpath to the block device}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h``blk_mode_t mode`` open mode h](j)}(h``blk_mode_t mode``h]j)}(hjh]hblk_mode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(h open modeh]h open mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h``void *holder`` block-layer exclusivity token (a superblock, or the file_system_type when the device may be shared by several superblocks of that type) h](j)}(h``void *holder``h]j)}(hjh]h void *holder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(hblock-layer exclusivity token (a superblock, or the file_system_type when the device may be shared by several superblocks of that type)h]hblock-layer exclusivity token (a superblock, or the file_system_type when the device may be shared by several superblocks of that type)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(hH``struct super_block *sb`` superblock to drive fs_holder_ops events for h](j)}(h``struct super_block *sb``h]j)}(hj h]hstruct super_block *sb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(h,superblock to drive fs_holder_ops events forh]h,superblock to drive fs_holder_ops events for}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubh)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj8ubh)}(hOpen the block device at **path** with :c:type:`fs_holder_ops` and register that **sb** uses it, so device removal/sync/freeze/thaw are propagated to **sb** (and any other superblock sharing the device). Must be paired with fs_bdev_file_release().h](hOpen the block device at }(hjZhhhNhNubj)}(h**path**h]hpath}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh with }(hjZhhhNhNubh)}(h:c:type:`fs_holder_ops`h]j)}(hjvh]h fs_holder_ops}(hjxhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]refdocj  refdomainjreftypetype refexplicitrefwarnjj j  fs_holder_opsuh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjZubh and register that }(hjZhhhNhNubj)}(h**sb**h]hsb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh? uses it, so device removal/sync/freeze/thaw are propagated to }(hjZhhhNhNubj)}(h**sb**h]hsb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh\ (and any other superblock sharing the device). Must be paired with fs_bdev_file_release().}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj8ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj8ubh)}(h,an opened block-device file or an ERR_PTR().h]h,an opened block-device file or an ERR_PTR().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j fs_bdev_unregister (C function)c.fs_bdev_unregisterhNtauh1hhjhhhNhNubj)}(hhh](j)}(hHvoid fs_bdev_unregister (struct file *bdev_file, struct super_block *sb)h]j)}(hGvoid fs_bdev_unregister(struct file *bdev_file, struct super_block *sb)h](jf)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hfs_bdev_unregisterh]jI)}(hfs_bdev_unregisterh]hfs_bdev_unregister}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h0(struct file *bdev_file, struct super_block *sb)h](jC)}(hstruct file *bdev_fileh](j )}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjBubj2)}(h h]h }(hjShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubh)}(hhh]jI)}(hfileh]hfile}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj )}j ]j)}jj,sbc.fs_bdev_unregisterasbuh1hhjBubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjI)}(h bdev_fileh]h bdev_file}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj>ubjC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.fs_bdev_unregisterasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj>ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h+drop a superblock's claim on a block deviceh]h-drop a superblock’s claim on a block device}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1jhhhjhNhNubj)}(hXS**Parameters** ``struct file *bdev_file`` file returned by fs_bdev_file_open_by_{dev,path}() ``struct super_block *sb`` superblock the device was claimed for **Description** The inverse of fs_bdev_register(): drop one claim on the {dev, **sb**} entry (the last claim unregisters it; a pinning cursor defers the actual unlink) without closing the device. A caller that must act on the still-open device between unregistering and closing - e.g. re-allow freezing one denied for a membership change - pairs this with bdev_fput(). fs_bdev_file_release() is the common unregister-and-close.h](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjUubj)}(hhh](j)}(hN``struct file *bdev_file`` file returned by fs_bdev_file_open_by_{dev,path}() h](j)}(h``struct file *bdev_file``h]j)}(hjzh]hstruct file *bdev_file}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjtubj)}(hhh]h)}(h2file returned by fs_bdev_file_open_by_{dev,path}()h]h2file returned by fs_bdev_file_open_by_{dev,path}()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubj)}(hA``struct super_block *sb`` superblock the device was claimed for h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(h%superblock the device was claimed forh]h%superblock the device was claimed for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubeh}(h]h ]h"]h$]h&]uh1jhjUubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjUubh)}(hXThe inverse of fs_bdev_register(): drop one claim on the {dev, **sb**} entry (the last claim unregisters it; a pinning cursor defers the actual unlink) without closing the device. A caller that must act on the still-open device between unregistering and closing - e.g. re-allow freezing one denied for a membership change - pairs this with bdev_fput(). fs_bdev_file_release() is the common unregister-and-close.h](h?The inverse of fs_bdev_register(): drop one claim on the {dev, }(hjhhhNhNubj)}(h**sb**h]hsb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhXX} entry (the last claim unregisters it; a pinning cursor defers the actual unlink) without closing the device. A caller that must act on the still-open device between unregistering and closing - e.g. re-allow freezing one denied for a membership change - pairs this with bdev_fput(). fs_bdev_file_release() is the common unregister-and-close.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !fs_bdev_file_release (C function)c.fs_bdev_file_releasehNtauh1hhjhhhNhNubj)}(hhh](j)}(hJvoid fs_bdev_file_release (struct file *bdev_file, struct super_block *sb)h]j)}(hIvoid fs_bdev_file_release(struct file *bdev_file, struct super_block *sb)h](jf)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjAhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAhhhjShMubjC)}(hfs_bdev_file_releaseh]jI)}(hfs_bdev_file_releaseh]hfs_bdev_file_release}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjAhhhjShMubj=)}(h0(struct file *bdev_file, struct super_block *sb)h](jC)}(hstruct file *bdev_fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj~ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj~ubh)}(hhh]jI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjhsbc.fs_bdev_file_releaseasbuh1hhj~ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjI)}(h bdev_fileh]h bdev_file}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj~ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjzubjC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.fs_bdev_file_releaseasbuh1hhjubj2)}(h h]h }(hj0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjzubeh}(h]h ]h"]h$]h&]j`jauh1j<hjAhhhjShMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj=hhhjShMubah}(h]j8ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjShMhj:hhubjw)}(hhh]h)}(h/release a block device claimed for a superblockh]h/release a block device claimed for a superblock}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjrhhubah}(h]h ]h"]h$]h&]uh1jvhj:hhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct file *bdev_file`` file returned by fs_bdev_file_open_by_{dev,path}() ``struct super_block *sb`` superblock the device was claimed for **Description** Unregister the {dev, **sb**} entry, then close the block device.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh](j)}(hN``struct file *bdev_file`` file returned by fs_bdev_file_open_by_{dev,path}() h](j)}(h``struct file *bdev_file``h]j)}(hjh]hstruct file *bdev_file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(h2file returned by fs_bdev_file_open_by_{dev,path}()h]h2file returned by fs_bdev_file_open_by_{dev,path}()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``struct super_block *sb`` superblock the device was claimed for h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(h%superblock the device was claimed forh]h%superblock the device was claimed for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(h@Unregister the {dev, **sb**} entry, then close the block device.h](hUnregister the {dev, }(hj@hhhNhNubj)}(h**sb**h]hsb}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh%} entry, then close the block device.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  get_tree_bdev_flags (C function)c.get_tree_bdev_flagshNtauh1hhjhhhNhNubj)}(hhh](j)}(hint get_tree_bdev_flags (struct fs_context *fc, int (*fill_super)(struct super_block *sb, struct fs_context *fc), unsigned int flags)h]j)}(hint get_tree_bdev_flags(struct fs_context *fc, int (*fill_super)(struct super_block *sb, struct fs_context *fc), unsigned int flags)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj}hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM:ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}hhhjhM:ubjC)}(hget_tree_bdev_flagsh]jI)}(hget_tree_bdev_flagsh]hget_tree_bdev_flags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj}hhhjhM:ubj=)}(hm(struct fs_context *fc, int (*fill_super)(struct super_block *sb, struct fs_context *fc), unsigned int flags)h](jC)}(hstruct fs_context *fch](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.get_tree_bdev_flagsasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfch]hfc}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h@int (*fill_super)(struct super_block *sb, struct fs_context *fc)h](jf)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj,ubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubj)}(hjh]h(}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjI)}(h fill_superh]h fill_super}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubj)}(hjϙh]h)}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj,ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.get_tree_bdev_flagsasbuh1hhj,ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj,ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj )}j ]jc.get_tree_bdev_flagsasbuh1hhj,ubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjI)}(hfch]hfc}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubj)}(hjϙh]h)}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hunsigned int flagsh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj}hhhjhM:ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjyhhhjhM:ubah}(h]jtah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM:hjvhhubjw)}(hhh]h)}(h/Get a superblock based on a single block deviceh]h/Get a superblock based on a single block device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM:hjhhubah}(h]h ]h"]h$]h&]uh1jvhjvhhhjhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct fs_context *fc`` The filesystem context holding the parameters ``int (*fill_super)(struct super_block *sb, struct fs_context *fc)`` Helper to initialise a new superblock ``unsigned int flags`` GET_TREE_BDEV_* flagsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM>hj ubj)}(hhh](j)}(hH``struct fs_context *fc`` The filesystem context holding the parameters h](j)}(h``struct fs_context *fc``h]j)}(hj.h]hstruct fs_context *fc}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM;hj(ubj)}(hhh]h)}(h-The filesystem context holding the parametersh]h-The filesystem context holding the parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM;hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM;hj%ubj)}(hk``int (*fill_super)(struct super_block *sb, struct fs_context *fc)`` Helper to initialise a new superblock h](j)}(hD``int (*fill_super)(struct super_block *sb, struct fs_context *fc)``h]j)}(hjgh]h@int (*fill_super)(struct super_block *sb, struct fs_context *fc)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM<hjaubj)}(hhh]h)}(h%Helper to initialise a new superblockh]h%Helper to initialise a new superblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hM<hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM<hj%ubj)}(h,``unsigned int flags`` GET_TREE_BDEV_* flagsh](j)}(h``unsigned int flags``h]j)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM>hjubj)}(hhh]h)}(hGET_TREE_BDEV_* flagsh]hGET_TREE_BDEV_* flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM>hj%ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j get_tree_bdev (C function)c.get_tree_bdevhNtauh1hhjhhhNhNubj)}(hhh](j)}(hgint get_tree_bdev (struct fs_context *fc, int (*fill_super)(struct super_block *, struct fs_context *))h]j)}(hdint get_tree_bdev(struct fs_context *fc, int (*fill_super)(struct super_block*, struct fs_context*))h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMnubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMnubjC)}(h get_tree_bdevh]jI)}(h get_tree_bdevh]h get_tree_bdev}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMnubj=)}(hS(struct fs_context *fc, int (*fill_super)(struct super_block*, struct fs_context*))h](jC)}(hstruct fs_context *fch](j )}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj3ubj2)}(h h]h }(hjDhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj )}j ]j)}jjsbc.get_tree_bdevasbuh1hhj3ubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjI)}(hfch]hfc}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj/ubjC)}(h:int (*fill_super)(struct super_block*, struct fs_context*)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h fill_superh]h fill_super}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj )}j ]jqc.get_tree_bdevasbuh1hhjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj3h]h,}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hj]hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jqc.get_tree_bdevasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj/ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMnubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMnubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMnhjhhubjw)}(hhh]h)}(h/Get a superblock based on a single block deviceh]h/Get a superblock based on a single block device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMnhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct fs_context *fc`` The filesystem context holding the parameters ``int (*fill_super)(struct super_block *, struct fs_context *)`` Helper to initialise a new superblockh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMrhjubj)}(hhh](j)}(hH``struct fs_context *fc`` The filesystem context holding the parameters h](j)}(h``struct fs_context *fc``h]j)}(hjh]hstruct fs_context *fc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMohjubj)}(hhh]h)}(h-The filesystem context holding the parametersh]h-The filesystem context holding the parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMohj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMohjubj)}(hf``int (*fill_super)(struct super_block *, struct fs_context *)`` Helper to initialise a new superblockh](j)}(h@``int (*fill_super)(struct super_block *, struct fs_context *)``h]j)}(hjWh]hah"]h$]h&]uh1j1hjhhhjhMubjC)}(h vfs_get_treeh]jI)}(h vfs_get_treeh]h vfs_get_tree}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct fs_context *fc)h]jC)}(hstruct fs_context *fch](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.vfs_get_treeasbuh1hhjubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfch]hfc}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hGet the mountable rooth]hGet the mountable root}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct fs_context *fc`` The superblock configuration context. **Description** The filesystem is invoked to get or create a superblock which can then later be used for mounting. The filesystem places a pointer to the root to be used for mounting in **fc->root**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]j)}(h@``struct fs_context *fc`` The superblock configuration context. h](j)}(h``struct fs_context *fc``h]j)}(hjh]hstruct fs_context *fc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(h%The superblock configuration context.h]h%The superblock configuration context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hThe filesystem is invoked to get or create a superblock which can then later be used for mounting. The filesystem places a pointer to the root to be used for mounting in **fc->root**.h](hThe filesystem is invoked to get or create a superblock which can then later be used for mounting. The filesystem places a pointer to the root to be used for mounting in }(hjhhhNhNubj)}(h **fc->root**h]hfc->root}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j freeze_super (C function)c.freeze_superhNtauh1hhjhhhNhNubj)}(hhh](j)}(h[int freeze_super (struct super_block *sb, enum freeze_holder who, const void *freeze_owner)h]j)}(hZint freeze_super(struct super_block *sb, enum freeze_holder who, const void *freeze_owner)h](jf)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj@hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj2)}(h h]h }(hjShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@hhhjRhMubjC)}(h freeze_superh]jI)}(h freeze_superh]h freeze_super}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj@hhhjRhMubj=)}(hJ(struct super_block *sb, enum freeze_holder who, const void *freeze_owner)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjgsbc.freeze_superasbuh1hhj}ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubjC)}(henum freeze_holder whoh](j )}(hj#h]henum}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h freeze_holderh]h freeze_holder}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.freeze_superasbuh1hhjubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hwhoh]hwho}(hj=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubjC)}(hconst void *freeze_ownerh](j )}(hjh]hconst}(hjVhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubj2)}(h h]h }(hjchhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubjf)}(hvoidh]hvoid}(hjqhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjRubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjI)}(h freeze_ownerh]h freeze_owner}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubeh}(h]h ]h"]h$]h&]j`jauh1j<hj@hhhjRhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj<hhhjRhMubah}(h]j7ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjRhMhj9hhubjw)}(hhh]h)}(h8lock the filesystem and force it into a consistent stateh]h8lock the filesystem and force it into a consistent state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj9hhhjRhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct super_block *sb`` the super to lock ``enum freeze_holder who`` context that wants to freeze ``const void *freeze_owner`` owner of the freeze **Description** Syncs the super to make sure the filesystem is consistent and calls the fs's freeze_fs. Subsequent calls to this without first thawing the fs may return -EBUSY. **who** should be: * ``FREEZE_HOLDER_USERSPACE`` if userspace wants to freeze the fs; * ``FREEZE_HOLDER_KERNEL`` if the kernel wants to freeze the fs. * ``FREEZE_MAY_NEST`` whether nesting freeze and thaw requests is allowed. The **who** argument distinguishes between the kernel and userspace trying to freeze the filesystem. Although there cannot be multiple kernel freezes or multiple userspace freezes in effect at any given time, the kernel and userspace can both hold a filesystem frozen. The filesystem remains frozen until there are no kernel or userspace freezes in effect. A filesystem may hold multiple devices and thus a filesystems may be frozen through the block layer via multiple block devices. In this case the request is marked as being allowed to nest by passing FREEZE_MAY_NEST. The filesystem remains frozen until all block devices are unfrozen. If multiple freezes are attempted without FREEZE_MAY_NEST -EBUSY will be returned. During this function, sb->s_writers.frozen goes through these values: SB_UNFROZEN: File system is normal, all writes progress as usual. SB_FREEZE_WRITE: The file system is in the process of being frozen. New writes should be blocked, though page faults are still allowed. We wait for all writes to complete and then proceed to the next stage. SB_FREEZE_PAGEFAULT: Freezing continues. Now also page faults are blocked but internal fs threads can still modify the filesystem (although they should not dirty new pages or inodes), writeback can run etc. After waiting for all running page faults we sync the filesystem which will clean all dirty pages and inodes (no new dirty pages or inodes can be created when sync is running). SB_FREEZE_FS: The file system is frozen. Now all internal sources of fs modification are blocked (e.g. XFS preallocation truncation on inode reclaim). This is usually implemented by blocking new transactions for filesystems that have them and need this additional guard. After all internal writers are finished we call ->freeze_fs() to finish filesystem freezing. Then we transition to SB_FREEZE_COMPLETE state. This state is mostly auxiliary for filesystems to verify they do not modify frozen fs. sb->s_writers.frozen is protected by sb->s_umount. **Return** If the freeze was successful zero is returned. If the freeze failed a negative error code is returned.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh](j)}(h-``struct super_block *sb`` the super to lock h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(hthe super to lockh]hthe super to lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``enum freeze_holder who`` context that wants to freeze h](j)}(h``enum freeze_holder who``h]j)}(hj>h]henum freeze_holder who}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj8ubj)}(hhh]h)}(hcontext that wants to freezeh]hcontext that wants to freeze}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjubj)}(h1``const void *freeze_owner`` owner of the freeze h](j)}(h``const void *freeze_owner``h]j)}(hjwh]hconst void *freeze_owner}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjqubj)}(hhh]h)}(howner of the freezeh]howner of the freeze}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hSyncs the super to make sure the filesystem is consistent and calls the fs's freeze_fs. Subsequent calls to this without first thawing the fs may return -EBUSY.h]hSyncs the super to make sure the filesystem is consistent and calls the fs’s freeze_fs. Subsequent calls to this without first thawing the fs may return -EBUSY.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(h**who** should be: * ``FREEZE_HOLDER_USERSPACE`` if userspace wants to freeze the fs; * ``FREEZE_HOLDER_KERNEL`` if the kernel wants to freeze the fs. * ``FREEZE_MAY_NEST`` whether nesting freeze and thaw requests is allowed.h](j)}(h**who**h]hwho}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh should be: * }(hjhhhNhNubj)}(h``FREEZE_HOLDER_USERSPACE``h]hFREEZE_HOLDER_USERSPACE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh( if userspace wants to freeze the fs; * }(hjhhhNhNubj)}(h``FREEZE_HOLDER_KERNEL``h]hFREEZE_HOLDER_KERNEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) if the kernel wants to freeze the fs. * }(hjhhhNhNubj)}(h``FREEZE_MAY_NEST``h]hFREEZE_MAY_NEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 whether nesting freeze and thaw requests is allowed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hXfThe **who** argument distinguishes between the kernel and userspace trying to freeze the filesystem. Although there cannot be multiple kernel freezes or multiple userspace freezes in effect at any given time, the kernel and userspace can both hold a filesystem frozen. The filesystem remains frozen until there are no kernel or userspace freezes in effect.h](hThe }(hj*hhhNhNubj)}(h**who**h]hwho}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubhX[ argument distinguishes between the kernel and userspace trying to freeze the filesystem. Although there cannot be multiple kernel freezes or multiple userspace freezes in effect at any given time, the kernel and userspace can both hold a filesystem frozen. The filesystem remains frozen until there are no kernel or userspace freezes in effect.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hXnA filesystem may hold multiple devices and thus a filesystems may be frozen through the block layer via multiple block devices. In this case the request is marked as being allowed to nest by passing FREEZE_MAY_NEST. The filesystem remains frozen until all block devices are unfrozen. If multiple freezes are attempted without FREEZE_MAY_NEST -EBUSY will be returned.h]hXnA filesystem may hold multiple devices and thus a filesystems may be frozen through the block layer via multiple block devices. In this case the request is marked as being allowed to nest by passing FREEZE_MAY_NEST. The filesystem remains frozen until all block devices are unfrozen. If multiple freezes are attempted without FREEZE_MAY_NEST -EBUSY will be returned.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hEDuring this function, sb->s_writers.frozen goes through these values:h]hEDuring this function, sb->s_writers.frozen goes through these values:}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hASB_UNFROZEN: File system is normal, all writes progress as usual.h]hASB_UNFROZEN: File system is normal, all writes progress as usual.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hSB_FREEZE_WRITE: The file system is in the process of being frozen. New writes should be blocked, though page faults are still allowed. We wait for all writes to complete and then proceed to the next stage.h]hSB_FREEZE_WRITE: The file system is in the process of being frozen. New writes should be blocked, though page faults are still allowed. We wait for all writes to complete and then proceed to the next stage.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hXSB_FREEZE_PAGEFAULT: Freezing continues. Now also page faults are blocked but internal fs threads can still modify the filesystem (although they should not dirty new pages or inodes), writeback can run etc. After waiting for all running page faults we sync the filesystem which will clean all dirty pages and inodes (no new dirty pages or inodes can be created when sync is running).h]hXSB_FREEZE_PAGEFAULT: Freezing continues. Now also page faults are blocked but internal fs threads can still modify the filesystem (although they should not dirty new pages or inodes), writeback can run etc. After waiting for all running page faults we sync the filesystem which will clean all dirty pages and inodes (no new dirty pages or inodes can be created when sync is running).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hXSB_FREEZE_FS: The file system is frozen. Now all internal sources of fs modification are blocked (e.g. XFS preallocation truncation on inode reclaim). This is usually implemented by blocking new transactions for filesystems that have them and need this additional guard. After all internal writers are finished we call ->freeze_fs() to finish filesystem freezing. Then we transition to SB_FREEZE_COMPLETE state. This state is mostly auxiliary for filesystems to verify they do not modify frozen fs.h]hXSB_FREEZE_FS: The file system is frozen. Now all internal sources of fs modification are blocked (e.g. XFS preallocation truncation on inode reclaim). This is usually implemented by blocking new transactions for filesystems that have them and need this additional guard. After all internal writers are finished we call ->freeze_fs() to finish filesystem freezing. Then we transition to SB_FREEZE_COMPLETE state. This state is mostly auxiliary for filesystems to verify they do not modify frozen fs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(h2sb->s_writers.frozen is protected by sb->s_umount.h]h2sb->s_writers.frozen is protected by sb->s_umount.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hfIf the freeze was successful zero is returned. If the freeze failed a negative error code is returned.h]hfIf the freeze was successful zero is returned. If the freeze failed a negative error code is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j thaw_super (C function) c.thaw_superhNtauh1hhjhhhNhNubj)}(hhh](j)}(hYint thaw_super (struct super_block *sb, enum freeze_holder who, const void *freeze_owner)h]j)}(hXint thaw_super(struct super_block *sb, enum freeze_holder who, const void *freeze_owner)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMk ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj hMk ubjC)}(h thaw_superh]jI)}(h thaw_superh]h thaw_super}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj hMk ubj=)}(hJ(struct super_block *sb, enum freeze_holder who, const void *freeze_owner)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hj8 hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj4 ubj2)}(h h]h }(hjE hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj4 ubh)}(hhh]jI)}(h super_blockh]h super_block}(hjV hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjS ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjX modnameN classnameNjj )}j ]j)}jj sb c.thaw_superasbuh1hhj4 ubj2)}(h h]h }(hjv hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj4 ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4 ubjI)}(hsbh]hsb}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4 ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj0 ubjC)}(henum freeze_holder whoh](j )}(hj#h]henum}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(h freeze_holderh]h freeze_holder}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]jr  c.thaw_superasbuh1hhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hwhoh]hwho}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj0 ubjC)}(hconst void *freeze_ownerh](j )}(hjh]hconst}(hj !hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj !ubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj !ubjf)}(hvoidh]hvoid}(hj(!hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj !ubj2)}(h h]h }(hj6!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj !ubj)}(hjh]h*}(hjD!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj !ubjI)}(h freeze_ownerh]h freeze_owner}(hjQ!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj !ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj0 ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj hMk ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj hMk ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hMk hjhhubjw)}(hhh]jD)}(hhh]jD)}(hunlock filesystemh]h)}(hj!h]hunlock filesystem}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMk hj~!ubah}(h]h ]h"]h$]h&]uh1jDhj{!hhhj!hNubah}(h]h ]h"]h$]h&]jD-uh1jDhj!hMk hjx!hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj hMk ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!jj!jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` the super to thaw ``enum freeze_holder who`` context that wants to freeze ``const void *freeze_owner`` owner of the freeze **Description** Unlocks the filesystem and marks it writeable again after freeze_super() if there are no remaining freezes on the filesystem. **who** should be: * ``FREEZE_HOLDER_USERSPACE`` if userspace wants to thaw the fs; * ``FREEZE_HOLDER_KERNEL`` if the kernel wants to thaw the fs. * ``FREEZE_MAY_NEST`` whether nesting freeze and thaw requests is allowed A filesystem may hold multiple devices and thus a filesystems may have been frozen through the block layer via multiple block devices. The filesystem remains frozen until all block devices are unfrozen.h](h)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMo hj!ubj)}(hhh](j)}(h-``struct super_block *sb`` the super to thaw h](j)}(h``struct super_block *sb``h]j)}(hj!h]hstruct super_block *sb}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMl hj!ubj)}(hhh]h)}(hthe super to thawh]hthe super to thaw}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMl hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMl hj!ubj)}(h8``enum freeze_holder who`` context that wants to freeze h](j)}(h``enum freeze_holder who``h]j)}(hj"h]henum freeze_holder who}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMm hj"ubj)}(hhh]h)}(hcontext that wants to freezeh]hcontext that wants to freeze}(hj!"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMm hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMm hj!ubj)}(h1``const void *freeze_owner`` owner of the freeze h](j)}(h``const void *freeze_owner``h]j)}(hjA"h]hconst void *freeze_owner}(hjC"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?"ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMn hj;"ubj)}(hhh]h)}(howner of the freezeh]howner of the freeze}(hjZ"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV"hMn hjW"ubah}(h]h ]h"]h$]h&]uh1jhj;"ubeh}(h]h ]h"]h$]h&]uh1jhjV"hMn hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubh)}(h**Description**h]j)}(hj|"h]h Description}(hj~"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz"ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMp hj!ubh)}(h}Unlocks the filesystem and marks it writeable again after freeze_super() if there are no remaining freezes on the filesystem.h]h}Unlocks the filesystem and marks it writeable again after freeze_super() if there are no remaining freezes on the filesystem.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMo hj!ubh)}(h**who** should be: * ``FREEZE_HOLDER_USERSPACE`` if userspace wants to thaw the fs; * ``FREEZE_HOLDER_KERNEL`` if the kernel wants to thaw the fs. * ``FREEZE_MAY_NEST`` whether nesting freeze and thaw requests is allowedh](j)}(h**who**h]hwho}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh should be: * }(hj"hhhNhNubj)}(h``FREEZE_HOLDER_USERSPACE``h]hFREEZE_HOLDER_USERSPACE}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh& if userspace wants to thaw the fs; * }(hj"hhhNhNubj)}(h``FREEZE_HOLDER_KERNEL``h]hFREEZE_HOLDER_KERNEL}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh' if the kernel wants to thaw the fs. * }(hj"hhhNhNubj)}(h``FREEZE_MAY_NEST``h]hFREEZE_MAY_NEST}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh4 whether nesting freeze and thaw requests is allowed}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMr hj!ubh)}(hA filesystem may hold multiple devices and thus a filesystems may have been frozen through the block layer via multiple block devices. The filesystem remains frozen until all block devices are unfrozen.h]hA filesystem may hold multiple devices and thus a filesystems may have been frozen through the block layer via multiple block devices. The filesystem remains frozen until all block devices are unfrozen.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMw hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]registration-and-superblocksah ]h"]registration and superblocksah$]h&]uh1hhhhhhhhK$ubh)}(hhh](h)}(h File Locksh]h File Locks}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhK*ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %locks_owner_has_blockers (C function)c.locks_owner_has_blockershNtauh1hhj#hhhNhNubj)}(hhh](j)}(hQbool locks_owner_has_blockers (struct file_lock_context *flctx, fl_owner_t owner)h]j)}(hPbool locks_owner_has_blockers(struct file_lock_context *flctx, fl_owner_t owner)h](jf)}(hjih]hbool}(hj<#hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj8#hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMMubj2)}(h h]h }(hjJ#hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8#hhhjI#hMMubjC)}(hlocks_owner_has_blockersh]jI)}(hlocks_owner_has_blockersh]hlocks_owner_has_blockers}(hj\#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjX#ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj8#hhhjI#hMMubj=)}(h3(struct file_lock_context *flctx, fl_owner_t owner)h](jC)}(hstruct file_lock_context *flctxh](j )}(hjh]hstruct}(hjx#hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjt#ubj2)}(h h]h }(hj#hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjt#ubh)}(hhh]jI)}(hfile_lock_contexth]hfile_lock_context}(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj )}j ]j)}jj^#sbc.locks_owner_has_blockersasbuh1hhjt#ubj2)}(h h]h }(hj#hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjt#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt#ubjI)}(hflctxh]hflctx}(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjt#ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjp#ubjC)}(hfl_owner_t ownerh](h)}(hhh]jI)}(h fl_owner_th]h fl_owner_t}(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj )}j ]j#c.locks_owner_has_blockersasbuh1hhj#ubj2)}(h h]h }(hj $hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj#ubjI)}(hownerh]howner}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj#ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjp#ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj8#hhhjI#hMMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj4#hhhjI#hMMubah}(h]j/#ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjI#hMMhj1#hhubjw)}(hhh]h)}(h Check for blocking lock requestsh]h Check for blocking lock requests}(hjC$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMMhj@$hhubah}(h]h ]h"]h$]h&]uh1jvhj1#hhhjI#hMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[$jj[$jjjuh1jhhhj#hNhNubj)}(h**Parameters** ``struct file_lock_context *flctx`` file lock context ``fl_owner_t owner`` lock owner **Description** Return values: ``true``: **owner** has at least one blocker ``false``: **owner** has no blockersh](h)}(h**Parameters**h]j)}(hje$h]h Parameters}(hjg$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc$ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMQhj_$ubj)}(hhh](j)}(h6``struct file_lock_context *flctx`` file lock context h](j)}(h#``struct file_lock_context *flctx``h]j)}(hj$h]hstruct file_lock_context *flctx}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMNhj~$ubj)}(hhh]h)}(hfile lock contexth]hfile lock context}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMNhj$ubah}(h]h ]h"]h$]h&]uh1jhj~$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMNhj{$ubj)}(h ``fl_owner_t owner`` lock owner h](j)}(h``fl_owner_t owner``h]j)}(hj$h]hfl_owner_t owner}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMOhj$ubj)}(hhh]h)}(h lock ownerh]h lock owner}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMOhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMOhj{$ubeh}(h]h ]h"]h$]h&]uh1jhj_$ubh)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMQhj_$ubj)}(hhh]j)}(h`Return values: ``true``: **owner** has at least one blocker ``false``: **owner** has no blockersh](j)}(hReturn values:h]hReturn values:}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMQhj%ubj)}(hhh]h)}(hQ``true``: **owner** has at least one blocker ``false``: **owner** has no blockersh](j)}(h``true``h]htrue}(hj+%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubh: }(hj'%hhhNhNubj)}(h **owner**h]howner}(hj=%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubh has at least one blocker }(hj'%hhhNhNubj)}(h ``false``h]hfalse}(hjO%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubh: }hj'%sbj)}(h **owner**h]howner}(hja%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubh has no blockers}(hj'%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#%hMQhj$%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj#%hMQhj%ubah}(h]h ]h"]h$]h&]uh1jhj_$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j locks_delete_block (C function)c.locks_delete_blockhNtauh1hhj#hhhNhNubj)}(hhh](j)}(h1int locks_delete_block (struct file_lock *waiter)h]j)}(h0int locks_delete_block(struct file_lock *waiter)h](jf)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj%hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM>ubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%hhhj%hM>ubjC)}(hlocks_delete_blockh]jI)}(hlocks_delete_blockh]hlocks_delete_block}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj%hhhj%hM>ubj=)}(h(struct file_lock *waiter)h]jC)}(hstruct file_lock *waiterh](j )}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubh)}(hhh]jI)}(h file_lockh]h file_lock}(hj&hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj )}j ]j)}jj%sbc.locks_delete_blockasbuh1hhj%ubj2)}(h h]h }(hj&&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubj)}(hjh]h*}(hj4&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjI)}(hwaiterh]hwaiter}(hjA&hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj%ubah}(h]h ]h"]h$]h&]j`jauh1j<hj%hhhj%hM>ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj%hhhj%hM>ubah}(h]j%ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj%hM>hj%hhubjw)}(hhh]h)}(hstop waiting for a file lockh]hstop waiting for a file lock}(hjk&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM>hjh&hhubah}(h]h ]h"]h$]h&]uh1jvhj%hhhj%hM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhj#hNhNubj)}(h**Parameters** ``struct file_lock *waiter`` the lock which was waiting **Description** lockd/nfsd need to disconnect the lock while working on it.h](h)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMBhj&ubj)}(hhh]j)}(h8``struct file_lock *waiter`` the lock which was waiting h](j)}(h``struct file_lock *waiter``h]j)}(hj&h]hstruct file_lock *waiter}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM?hj&ubj)}(hhh]h)}(hthe lock which was waitingh]hthe lock which was waiting}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hM?hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM?hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMAhj&ubj)}(h;lockd/nfsd need to disconnect the lock while working on it.h]h)}(hj&h]h;lockd/nfsd need to disconnect the lock while working on it.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM@hj&ubah}(h]h ]h"]h$]h&]uh1jhj'hM@hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j posix_lock_file (C function)c.posix_lock_filehNtauh1hhj#hhhNhNubj)}(hhh](j)}(hYint posix_lock_file (struct file *filp, struct file_lock *fl, struct file_lock *conflock)h]j)}(hXint posix_lock_file(struct file *filp, struct file_lock *fl, struct file_lock *conflock)h](jf)}(hinth]hint}(hj5'hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj1'hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj2)}(h h]h }(hjD'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1'hhhjC'hMubjC)}(hposix_lock_fileh]jI)}(hposix_lock_fileh]hposix_lock_file}(hjV'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjR'ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj1'hhhjC'hMubj=)}(hE(struct file *filp, struct file_lock *fl, struct file_lock *conflock)h](jC)}(hstruct file *filph](j )}(hjh]hstruct}(hjr'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjn'ubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjn'ubh)}(hhh]jI)}(hfileh]hfile}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj )}j ]j)}jjX'sbc.posix_lock_fileasbuh1hhjn'ubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjn'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn'ubjI)}(hfilph]hfilp}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjn'ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjj'ubjC)}(hstruct file_lock *flh](j )}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj'ubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'ubh)}(hhh]jI)}(h file_lockh]h file_lock}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj )}j ]j'c.posix_lock_fileasbuh1hhj'ubj2)}(h h]h }(hj (hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'ubj)}(hjh]h*}(hj.(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjI)}(hflh]hfl}(hj;(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjj'ubjC)}(hstruct file_lock *conflockh](j )}(hjh]hstruct}(hjT(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjP(ubj2)}(h h]h }(hja(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjP(ubh)}(hhh]jI)}(h file_lockh]h file_lock}(hjr(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjo(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjt(modnameN classnameNjj )}j ]j'c.posix_lock_fileasbuh1hhjP(ubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjP(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP(ubjI)}(hconflockh]hconflock}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjP(ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjj'ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj1'hhhjC'hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj-'hhhjC'hMubah}(h]j('ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjC'hMhj*'hhubjw)}(hhh]h)}(h"Apply a POSIX-style lock to a fileh]h"Apply a POSIX-style lock to a file}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jvhj*'hhhjC'hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhj#hNhNubj)}(hX **Parameters** ``struct file *filp`` The file to apply the lock to ``struct file_lock *fl`` The lock to be applied ``struct file_lock *conflock`` Place to return a copy of the conflicting lock, if found. **Description** Add a POSIX style lock to a file. We merge adjacent & overlapping locks whenever possible. POSIX locks are sorted by owner task, then by starting address Note that if called with an FL_EXISTS argument, the caller may determine whether or not a lock was successfully freed by testing the return value for -ENOENT.h](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj(ubj)}(hhh](j)}(h4``struct file *filp`` The file to apply the lock to h](j)}(h``struct file *filp``h]j)}(hj)h]hstruct file *filp}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj)ubj)}(hhh]h)}(hThe file to apply the lock toh]hThe file to apply the lock to}(hj/)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+)hMhj,)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj+)hMhj )ubj)}(h0``struct file_lock *fl`` The lock to be applied h](j)}(h``struct file_lock *fl``h]j)}(hjO)h]hstruct file_lock *fl}(hjQ)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM)ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhjI)ubj)}(hhh]h)}(hThe lock to be appliedh]hThe lock to be applied}(hjh)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd)hMhje)ubah}(h]h ]h"]h$]h&]uh1jhjI)ubeh}(h]h ]h"]h$]h&]uh1jhjd)hMhj )ubj)}(hY``struct file_lock *conflock`` Place to return a copy of the conflicting lock, if found. h](j)}(h``struct file_lock *conflock``h]j)}(hj)h]hstruct file_lock *conflock}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj)ubj)}(hhh]h)}(h9Place to return a copy of the conflicting lock, if found.h]h9Place to return a copy of the conflicting lock, if found.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj )ubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj(ubh)}(hAdd a POSIX style lock to a file. We merge adjacent & overlapping locks whenever possible. POSIX locks are sorted by owner task, then by starting addressh]hAdd a POSIX style lock to a file. We merge adjacent & overlapping locks whenever possible. POSIX locks are sorted by owner task, then by starting address}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj(ubh)}(hNote that if called with an FL_EXISTS argument, the caller may determine whether or not a lock was successfully freed by testing the return value for -ENOENT.h]hNote that if called with an FL_EXISTS argument, the caller may determine whether or not a lock was successfully freed by testing the return value for -ENOENT.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $inode_lease_ignore_mask (C function)c.inode_lease_ignore_maskhNtauh1hhj#hhhNhNubj)}(hhh](j)}(h1u32 inode_lease_ignore_mask (struct inode *inode)h]j)}(h0u32 inode_lease_ignore_mask(struct inode *inode)h](h)}(hhh]jI)}(hu32h]hu32}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj )}j ]j)}jinode_lease_ignore_masksbc.inode_lease_ignore_maskasbuh1hhj*hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM4ubj2)}(h h]h }(hj<*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*hhhj;*hM4ubjC)}(hinode_lease_ignore_maskh]jI)}(hj8*h]hinode_lease_ignore_mask}(hjN*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJ*ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj*hhhj;*hM4ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hji*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhje*ubj2)}(h h]h }(hjv*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hje*ubh)}(hhh]jI)}(hinodeh]hinode}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj )}j ]j6*c.inode_lease_ignore_maskasbuh1hhje*ubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hje*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje*ubjI)}(hinodeh]hinode}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhje*ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhja*ubah}(h]h ]h"]h$]h&]j`jauh1j<hj*hhhj;*hM4ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj*hhhj;*hM4ubah}(h]j *ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj;*hM4hj *hhubjw)}(hhh]h)}(h7return union of all ignored inode events for this inodeh]h7return union of all ignored inode events for this inode}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM4hj*hhubah}(h]h ]h"]h$]h&]uh1jvhj *hhhj;*hM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhj#hNhNubj)}(h**Parameters** ``struct inode *inode`` inode of which to get ignore mask **Description** Walk the list of leases, and return the result of all of their FL_IGN_DIR_* bits or'ed together.h](h)}(h**Parameters**h]j)}(hj +h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj +ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM8hj+ubj)}(hhh]j)}(h:``struct inode *inode`` inode of which to get ignore mask h](j)}(h``struct inode *inode``h]j)}(hj++h]hstruct inode *inode}(hj-+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM5hj%+ubj)}(hhh]h)}(h!inode of which to get ignore maskh]h!inode of which to get ignore mask}(hjD+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@+hM5hjA+ubah}(h]h ]h"]h$]h&]uh1jhj%+ubeh}(h]h ]h"]h$]h&]uh1jhj@+hM5hj"+ubah}(h]h ]h"]h$]h&]uh1jhj+ubh)}(h**Description**h]j)}(hjf+h]h Description}(hjh+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd+ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM7hj+ubh)}(h`Walk the list of leases, and return the result of all of their FL_IGN_DIR_* bits or'ed together.h]hbWalk the list of leases, and return the result of all of their FL_IGN_DIR_* bits or’ed together.}(hj|+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM6hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j __break_lease (C function)c.__break_leasehNtauh1hhj#hhhNhNubj)}(hhh](j)}(h;int __break_lease (struct inode *inode, unsigned int flags)h]j)}(h:int __break_lease(struct inode *inode, unsigned int flags)h](jf)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj+hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+hhhj+hMubjC)}(h __break_leaseh]jI)}(h __break_leaseh]h __break_lease}(hj+hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj+ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj+hhhj+hMubj=)}(h)(struct inode *inode, unsigned int flags)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj+ubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+ubh)}(hhh]jI)}(hinodeh]hinode}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj )}j ]j)}jj+sbc.__break_leaseasbuh1hhj+ubj2)}(h h]h }(hj&,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+ubj)}(hjh]h*}(hj4,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjI)}(hinodeh]hinode}(hjA,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj+ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj+ubjC)}(hunsigned int flagsh](jf)}(hunsignedh]hunsigned}(hjZ,hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjV,ubj2)}(h h]h }(hjh,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjV,ubjf)}(hinth]hint}(hjv,hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjV,ubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjV,ubjI)}(hflagsh]hflags}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjV,ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj+ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj+hhhj+hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj+hhhj+hMubah}(h]j+ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj+hMhj+hhubjw)}(hhh]h)}(h%revoke all outstanding leases on fileh]h%revoke all outstanding leases on file}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jvhj+hhhj+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhj#hNhNubj)}(hX^**Parameters** ``struct inode *inode`` the inode of the file to return ``unsigned int flags`` LEASE_BREAK_* flags **Description** break_lease (inlined for speed) has checked there already is at least some kind of lock (maybe a lease) on this file. Leases and Delegations are broken on a call to open() or truncate(). Delegations are also broken on any event that would change the ctime. Directory delegations are broken whenever the directory changes (unless the delegation is set up to ignore the event). This function can block waiting for the lease break unless you specify LEASE_BREAK_NONBLOCK.h](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj,ubj)}(hhh](j)}(h8``struct inode *inode`` the inode of the file to return h](j)}(h``struct inode *inode``h]j)}(hj,h]hstruct inode *inode}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj,ubj)}(hhh]h)}(hthe inode of the file to returnh]hthe inode of the file to return}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj,ubj)}(h+``unsigned int flags`` LEASE_BREAK_* flags h](j)}(h``unsigned int flags``h]j)}(hj6-h]hunsigned int flags}(hj8-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj0-ubj)}(hhh]h)}(hLEASE_BREAK_* flagsh]hLEASE_BREAK_* flags}(hjO-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK-hMhjL-ubah}(h]h ]h"]h$]h&]uh1jhj0-ubeh}(h]h ]h"]h$]h&]uh1jhjK-hMhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hjq-h]h Description}(hjs-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo-ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj,ubh)}(hXbreak_lease (inlined for speed) has checked there already is at least some kind of lock (maybe a lease) on this file. Leases and Delegations are broken on a call to open() or truncate(). Delegations are also broken on any event that would change the ctime. Directory delegations are broken whenever the directory changes (unless the delegation is set up to ignore the event). This function can block waiting for the lease break unless you specify LEASE_BREAK_NONBLOCK.h]hXbreak_lease (inlined for speed) has checked there already is at least some kind of lock (maybe a lease) on this file. Leases and Delegations are broken on a call to open() or truncate(). Delegations are also broken on any event that would change the ctime. Directory delegations are broken whenever the directory changes (unless the delegation is set up to ignore the event). This function can block waiting for the lease break unless you specify LEASE_BREAK_NONBLOCK.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j lease_get_mtime (C function)c.lease_get_mtimehNtauh1hhj#hhhNhNubj)}(hhh](j)}(hCvoid lease_get_mtime (struct inode *inode, struct timespec64 *time)h]j)}(hBvoid lease_get_mtime(struct inode *inode, struct timespec64 *time)h](jf)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj-hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj-hhhj-hMubjC)}(hlease_get_mtimeh]jI)}(hlease_get_mtimeh]hlease_get_mtime}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj-hhhj-hMubj=)}(h.(struct inode *inode, struct timespec64 *time)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj-ubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj-ubh)}(hhh]jI)}(hinodeh]hinode}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj )}j ]j)}jj-sbc.lease_get_mtimeasbuh1hhj-ubj2)}(h h]h }(hj1.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj-ubj)}(hjh]h*}(hj?.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjI)}(hinodeh]hinode}(hjL.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj-ubjC)}(hstruct timespec64 *timeh](j )}(hjh]hstruct}(hje.hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhja.ubj2)}(h h]h }(hjr.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hja.ubh)}(hhh]jI)}(h timespec64h]h timespec64}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj )}j ]j-.c.lease_get_mtimeasbuh1hhja.ubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hja.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja.ubjI)}(htimeh]htime}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhja.ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj-ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj-hhhj-hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj-hhhj-hMubah}(h]j-ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj-hMhj-hhubjw)}(hhh]h)}(h5update modified time of an inode with exclusive leaseh]h5update modified time of an inode with exclusive lease}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jvhj-hhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhj#hNhNubj)}(hXS**Parameters** ``struct inode *inode`` the inode ``struct timespec64 *time`` pointer to a timespec which contains the last modified time **Description** This is to force NFS clients to flush their caches for files with exclusive leases. The justification is that if someone has an exclusive lease, then they could be modifying it.h](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj/ubj)}(hhh](j)}(h"``struct inode *inode`` the inode h](j)}(h``struct inode *inode``h]j)}(hj'/h]hstruct inode *inode}(hj)/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%/ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj!/ubj)}(hhh]h)}(h the inodeh]h the inode}(hj@/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjah"]h$]h&]uh1j1hj/hhhj/hMubjC)}(hgeneric_setleaseh]jI)}(hgeneric_setleaseh]hgeneric_setlease}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj/hhhj/hMubj=)}(hB(struct file *filp, int arg, struct file_lease **flp, void **priv)h](jC)}(hstruct file *filph](j )}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0ubj2)}(h h]h }(hj*0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubh)}(hhh]jI)}(hfileh]hfile}(hj;0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj80ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=0modnameN classnameNjj )}j ]j)}jj0sbc.generic_setleaseasbuh1hhj0ubj2)}(h h]h }(hj[0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubj)}(hjh]h*}(hji0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjI)}(hfilph]hfilp}(hjv0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj0ubjC)}(hint argh](jf)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj0ubj2)}(h h]h }(hj0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubjI)}(hargh]harg}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj0ubjC)}(hstruct file_lease **flph](j )}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0ubj2)}(h h]h }(hj0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubh)}(hhh]jI)}(h file_leaseh]h file_lease}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj )}j ]jW0c.generic_setleaseasbuh1hhj0ubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjI)}(hflph]hflp}(hj(1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj0ubjC)}(h void **privh](jf)}(hvoidh]hvoid}(hjA1hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj=1ubj2)}(h h]h }(hjO1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=1ubj)}(hjh]h*}(hj]1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=1ubj)}(hjh]h*}(hjj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=1ubjI)}(hprivh]hpriv}(hjw1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=1ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj0ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj/hhhj/hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj/hhhj/hMubah}(h]j/ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj/hMhj/hhubjw)}(hhh]h)}(hsets a lease on an open fileh]hsets a lease on an open file}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jvhj/hhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jhhhj#hNhNubj)}(hXs**Parameters** ``struct file *filp`` file pointer ``int arg`` type of lease to obtain ``struct file_lease **flp`` input - file_lock to use, output - file_lock inserted ``void **priv`` private data for lm_setup (may be NULL if lm_setup doesn't require it) **Description** The (input) flp->fl_lmops->lm_break function is required by break_lease().h](h)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj1ubj)}(hhh](j)}(h#``struct file *filp`` file pointer h](j)}(h``struct file *filp``h]j)}(hj1h]hstruct file *filp}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj1ubj)}(hhh]h)}(h file pointerh]h file pointer}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubj)}(h$``int arg`` type of lease to obtain h](j)}(h ``int arg``h]j)}(hj2h]hint arg}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj2ubj)}(hhh]h)}(htype of lease to obtainh]htype of lease to obtain}(hj42hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj02hMhj12ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj02hMhj1ubj)}(hR``struct file_lease **flp`` input - file_lock to use, output - file_lock inserted h](j)}(h``struct file_lease **flp``h]j)}(hjT2h]hstruct file_lease **flp}(hjV2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhjN2ubj)}(hhh]h)}(h5input - file_lock to use, output - file_lock insertedh]h5input - file_lock to use, output - file_lock inserted}(hjm2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji2hMhjj2ubah}(h]h ]h"]h$]h&]uh1jhjN2ubeh}(h]h ]h"]h$]h&]uh1jhji2hMhj1ubj)}(hW``void **priv`` private data for lm_setup (may be NULL if lm_setup doesn't require it) h](j)}(h``void **priv``h]j)}(hj2h]h void **priv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj2ubj)}(hhh]h)}(hFprivate data for lm_setup (may be NULL if lm_setup doesn't require it)h]hHprivate data for lm_setup (may be NULL if lm_setup doesn’t require it)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj1ubj)}(hJThe (input) flp->fl_lmops->lm_break function is required by break_lease().h]h)}(hJThe (input) flp->fl_lmops->lm_break function is required by break_lease().h]hJThe (input) flp->fl_lmops->lm_break function is required by break_lease().}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_setlease (C function)c.vfs_setleasehNtauh1hhj#hhhNhNubj)}(hhh](j)}(hUint vfs_setlease (struct file *filp, int arg, struct file_lease **lease, void **priv)h]j)}(hTint vfs_setlease(struct file *filp, int arg, struct file_lease **lease, void **priv)h](jf)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj3hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMGubj2)}(h h]h }(hj'3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3hhhj&3hMGubjC)}(h vfs_setleaseh]jI)}(h vfs_setleaseh]h vfs_setlease}(hj93hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj53ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj3hhhj&3hMGubj=)}(hD(struct file *filp, int arg, struct file_lease **lease, void **priv)h](jC)}(hstruct file *filph](j )}(hjh]hstruct}(hjU3hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjQ3ubj2)}(h h]h }(hjb3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQ3ubh)}(hhh]jI)}(hfileh]hfile}(hjs3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjp3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetju3modnameN classnameNjj )}j ]j)}jj;3sbc.vfs_setleaseasbuh1hhjQ3ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQ3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ3ubjI)}(hfilph]hfilp}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQ3ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjM3ubjC)}(hint argh](jf)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj3ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubjI)}(hargh]harg}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjM3ubjC)}(hstruct file_lease **leaseh](j )}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj3ubj2)}(h h]h }(hj 4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubh)}(hhh]jI)}(h file_leaseh]h file_lease}(hj4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj )}j ]j3c.vfs_setleaseasbuh1hhj3ubj2)}(h h]h }(hj84hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubj)}(hjh]h*}(hjF4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]h*}(hjS4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjI)}(hleaseh]hlease}(hj`4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjM3ubjC)}(h void **privh](jf)}(hvoidh]hvoid}(hjy4hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehju4ubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hju4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju4ubjI)}(hprivh]hpriv}(hj4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhju4ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjM3ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj3hhhj&3hMGubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj3hhhj&3hMGubah}(h]j 3ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj&3hMGhj 3hhubjw)}(hhh]h)}(hsets a lease on an open fileh]hsets a lease on an open file}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMGhj4hhubah}(h]h ]h"]h$]h&]uh1jvhj 3hhhj&3hMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1jhhhj#hNhNubj)}(hX**Parameters** ``struct file *filp`` file pointer ``int arg`` type of lease to obtain ``struct file_lease **lease`` file_lock to use when adding a lease ``void **priv`` private info for lm_setup when adding a lease (may be NULL if lm_setup doesn't require it) **Description** Call this to establish a lease on the file. The "lease" argument is not used for F_UNLCK requests and may be NULL. For commands that set or alter an existing lease, the ``(*lease)->fl_lmops->lm_break`` operation must be set; if not, this function will return -ENOLCK (and generate a scary-looking stack trace). The "priv" pointer is passed directly to the lm_setup function as-is. It may be NULL if the lm_setup operation doesn't require it.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMKhj4ubj)}(hhh](j)}(h#``struct file *filp`` file pointer h](j)}(h``struct file *filp``h]j)}(hj5h]hstruct file *filp}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMHhj5ubj)}(hhh]h)}(h file pointerh]h file pointer}(hj35hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/5hMHhj05ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj/5hMHhj5ubj)}(h$``int arg`` type of lease to obtain h](j)}(h ``int arg``h]j)}(hjS5h]hint arg}(hjU5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMIhjM5ubj)}(hhh]h)}(htype of lease to obtainh]htype of lease to obtain}(hjl5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh5hMIhji5ubah}(h]h ]h"]h$]h&]uh1jhjM5ubeh}(h]h ]h"]h$]h&]uh1jhjh5hMIhj5ubj)}(hC``struct file_lease **lease`` file_lock to use when adding a lease h](j)}(h``struct file_lease **lease``h]j)}(hj5h]hstruct file_lease **lease}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMJhj5ubj)}(hhh]h)}(h$file_lock to use when adding a leaseh]h$file_lock to use when adding a lease}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMJhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMJhj5ubj)}(hk``void **priv`` private info for lm_setup when adding a lease (may be NULL if lm_setup doesn't require it) h](j)}(h``void **priv``h]j)}(hj5h]h void **priv}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMLhj5ubj)}(hhh]h)}(hZprivate info for lm_setup when adding a lease (may be NULL if lm_setup doesn't require it)h]h\private info for lm_setup when adding a lease (may be NULL if lm_setup doesn’t require it)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMKhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMLhj5ubeh}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMNhj4ubh)}(hX6Call this to establish a lease on the file. The "lease" argument is not used for F_UNLCK requests and may be NULL. For commands that set or alter an existing lease, the ``(*lease)->fl_lmops->lm_break`` operation must be set; if not, this function will return -ENOLCK (and generate a scary-looking stack trace).h](hCall this to establish a lease on the file. The “lease” argument is not used for F_UNLCK requests and may be NULL. For commands that set or alter an existing lease, the }(hj6hhhNhNubj)}(h ``(*lease)->fl_lmops->lm_break``h]h(*lease)->fl_lmops->lm_break}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubhm operation must be set; if not, this function will return -ENOLCK (and generate a scary-looking stack trace).}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMMhj4ubh)}(hThe "priv" pointer is passed directly to the lm_setup function as-is. It may be NULL if the lm_setup operation doesn't require it.h]hThe “priv” pointer is passed directly to the lm_setup function as-is. It may be NULL if the lm_setup operation doesn’t require it.}(hj86hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMShj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "locks_lock_inode_wait (C function)c.locks_lock_inode_waithNtauh1hhj#hhhNhNubj)}(hhh](j)}(hEint locks_lock_inode_wait (struct inode *inode, struct file_lock *fl)h]j)}(hDint locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)h](jf)}(hinth]hint}(hjg6hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjc6hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj2)}(h h]h }(hjv6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjc6hhhju6hMubjC)}(hlocks_lock_inode_waith]jI)}(hlocks_lock_inode_waith]hlocks_lock_inode_wait}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjc6hhhju6hMubj=)}(h+(struct inode *inode, struct file_lock *fl)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj6ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubh)}(hhh]jI)}(hinodeh]hinode}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj )}j ]j)}jj6sbc.locks_lock_inode_waitasbuh1hhj6ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjI)}(hinodeh]hinode}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj6ubjC)}(hstruct file_lock *flh](j )}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj7ubj2)}(h h]h }(hj#7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj7ubh)}(hhh]jI)}(h file_lockh]h file_lock}(hj47hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj17ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj67modnameN classnameNjj )}j ]j6c.locks_lock_inode_waitasbuh1hhj7ubj2)}(h h]h }(hjR7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj7ubj)}(hjh]h*}(hj`7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjI)}(hflh]hfl}(hjm7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj6ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjc6hhhju6hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj_6hhhju6hMubah}(h]jZ6ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhju6hMhj\6hhubjw)}(hhh]h)}(hApply a lock to an inodeh]hApply a lock to an inode}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jvhj\6hhhju6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhj#hNhNubj)}(h**Parameters** ``struct inode *inode`` inode of the file to apply to ``struct file_lock *fl`` The lock to be applied **Description** Apply a POSIX or FLOCK style lock request to an inode.h](h)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj7ubj)}(hhh](j)}(h6``struct inode *inode`` inode of the file to apply to h](j)}(h``struct inode *inode``h]j)}(hj7h]hstruct inode *inode}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj7ubj)}(hhh]h)}(hinode of the file to apply toh]hinode of the file to apply to}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubj)}(h0``struct file_lock *fl`` The lock to be applied h](j)}(h``struct file_lock *fl``h]j)}(hj8h]hstruct file_lock *fl}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj 8ubj)}(hhh]h)}(hThe lock to be appliedh]hThe lock to be applied}(hj*8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&8hMhj'8ubah}(h]h ]h"]h$]h&]uh1jhj 8ubeh}(h]h ]h"]h$]h&]uh1jhj&8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hjL8h]h Description}(hjN8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ8ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj7ubh)}(h6Apply a POSIX or FLOCK style lock request to an inode.h]h6Apply a POSIX or FLOCK style lock request to an inode.}(hjb8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_test_lock (C function)c.vfs_test_lockhNtauh1hhj#hhhNhNubj)}(hhh](j)}(h;int vfs_test_lock (struct file *filp, struct file_lock *fl)h]j)}(h:int vfs_test_lock(struct file *filp, struct file_lock *fl)h](jf)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj8hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM ubj2)}(h h]h }(hj8hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8hhhj8hM ubjC)}(h vfs_test_lockh]jI)}(h vfs_test_lockh]h vfs_test_lock}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj8hhhj8hM ubj=)}(h)(struct file *filp, struct file_lock *fl)h](jC)}(hstruct file *filph](j )}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj8ubj2)}(h h]h }(hj8hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8ubh)}(hhh]jI)}(hfileh]hfile}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj )}j ]j)}jj8sbc.vfs_test_lockasbuh1hhj8ubj2)}(h h]h }(hj 9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjI)}(hfilph]hfilp}(hj'9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj8ubjC)}(hstruct file_lock *flh](j )}(hjh]hstruct}(hj@9hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj<9ubj2)}(h h]h }(hjM9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<9ubh)}(hhh]jI)}(h file_lockh]h file_lock}(hj^9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`9modnameN classnameNjj )}j ]j9c.vfs_test_lockasbuh1hhj<9ubj2)}(h h]h }(hj|9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<9ubjI)}(hflh]hfl}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<9ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj8ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj8hhhj8hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj8hhhj8hM ubah}(h]j8ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj8hM hj8hhubjw)}(hhh]h)}(htest file byte range lockh]htest file byte range lock}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj9hhubah}(h]h ]h"]h$]h&]uh1jvhj8hhhj8hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jhhhj#hNhNubj)}(hX**Parameters** ``struct file *filp`` The file to test lock for ``struct file_lock *fl`` The byte-range in the file to test; also used to hold result **Description** On entry, **fl** does not contain a lock, but identifies a range (fl_start, fl_end) in the file (c.flc_file), and an owner (c.flc_owner) for whom existing locks should be ignored. c.flc_type and c.flc_flags are ignored. Both fl_lmops and fl_ops in **fl** must be NULL. Returns -ERRNO on failure. Indicates presence of conflicting lock by setting fl->fl_type to something other than F_UNLCK. If vfs_test_lock() does find a lock and return it, the caller must use locks_free_lock() or locks_release_private() on the returned lock.h](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj9ubj)}(hhh](j)}(h0``struct file *filp`` The file to test lock for h](j)}(h``struct file *filp``h]j)}(hj:h]hstruct file *filp}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj9ubj)}(hhh]h)}(hThe file to test lock forh]hThe file to test lock for}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM hj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hM hj9ubj)}(hV``struct file_lock *fl`` The byte-range in the file to test; also used to hold result h](j)}(h``struct file_lock *fl``h]j)}(hj;:h]hstruct file_lock *fl}(hj=:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9:ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj5:ubj)}(hhh]h)}(hfl_type to something other than F_UNLCK.h](h On entry, }(hj:hhhNhNubj)}(h**fl**h]hfl}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh does not contain a lock, but identifies a range (fl_start, fl_end) in the file (c.flc_file), and an owner (c.flc_owner) for whom existing locks should be ignored. c.flc_type and c.flc_flags are ignored. Both fl_lmops and fl_ops in }(hj:hhhNhNubj)}(h**fl**h]hfl}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh must be NULL. Returns -ERRNO on failure. Indicates presence of conflicting lock by setting fl->fl_type to something other than F_UNLCK.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj9ubh)}(hIf vfs_test_lock() does find a lock and return it, the caller must use locks_free_lock() or locks_release_private() on the returned lock.h]hIf vfs_test_lock() does find a lock and return it, the caller must use locks_free_lock() or locks_release_private() on the returned lock.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM% hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_lock_file (C function)c.vfs_lock_filehNtauh1hhj#hhhNhNubj)}(hhh](j)}(heint vfs_lock_file (struct file *filp, unsigned int cmd, struct file_lock *fl, struct file_lock *conf)h]j)}(hdint vfs_lock_file(struct file *filp, unsigned int cmd, struct file_lock *fl, struct file_lock *conf)h](jf)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj:hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:hhhj:hM ubjC)}(h vfs_lock_fileh]jI)}(h vfs_lock_fileh]h vfs_lock_file}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ;ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj:hhhj:hM ubj=)}(hS(struct file *filp, unsigned int cmd, struct file_lock *fl, struct file_lock *conf)h](jC)}(hstruct file *filph](j )}(hjh]hstruct}(hj+;hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj';ubj2)}(h h]h }(hj8;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj';ubh)}(hhh]jI)}(hfileh]hfile}(hjI;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjF;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjK;modnameN classnameNjj )}j ]j)}jj;sbc.vfs_lock_fileasbuh1hhj';ubj2)}(h h]h }(hji;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj';ubj)}(hjh]h*}(hjw;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj';ubjI)}(hfilph]hfilp}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj';ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj#;ubjC)}(hunsigned int cmdh](jf)}(hunsignedh]hunsigned}(hj;hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj;ubj2)}(h h]h }(hj;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;ubjf)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj;ubj2)}(h h]h }(hj;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;ubjI)}(hcmdh]hcmd}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj#;ubjC)}(hstruct file_lock *flh](j )}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj;ubj2)}(h h]h }(hj;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;ubh)}(hhh]jI)}(h file_lockh]h file_lock}(hj <hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj <ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj )}j ]je;c.vfs_lock_fileasbuh1hhj;ubj2)}(h h]h }(hj*<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;ubj)}(hjh]h*}(hj8<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjI)}(hflh]hfl}(hjE<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj#;ubjC)}(hstruct file_lock *confh](j )}(hjh]hstruct}(hj^<hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZ<ubj2)}(h h]h }(hjk<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZ<ubh)}(hhh]jI)}(h file_lockh]h file_lock}(hj|<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjy<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~<modnameN classnameNjj )}j ]je;c.vfs_lock_fileasbuh1hhjZ<ubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZ<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ<ubjI)}(hconfh]hconf}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZ<ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj#;ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj:hhhj:hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj:hhhj:hM ubah}(h]j:ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj:hM hj:hhubjw)}(hhh]h)}(hfile byte range lockh]hfile byte range lock}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj<hhubah}(h]h ]h"]h$]h&]uh1jvhj:hhhj:hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhj#hNhNubj)}(hX**Parameters** ``struct file *filp`` The file to apply the lock to ``unsigned int cmd`` type of locking operation (F_SETLK, F_GETLK, etc.) ``struct file_lock *fl`` The lock to be applied ``struct file_lock *conf`` Place to return a copy of the conflicting lock, if found. **Description** A caller that doesn't care about the conflicting lock may pass NULL as the final argument. If the filesystem defines a private ->lock() method, then **conf** will be left unchanged; so a caller that cares should initialize it to some acceptable default. To avoid blocking kernel daemons, such as lockd, that need to acquire POSIX locks, the ->lock() interface may return asynchronously, before the lock has been granted or denied by the underlying filesystem, if (and only if) lm_grant is set. Additionally FOP_ASYNC_LOCK in file_operations fop_flags need to be set. Callers expecting ->lock() to return asynchronously will only use F_SETLK, not F_SETLKW; they will set FL_SLEEP if (and only if) the request is for a blocking lock. When ->lock() does return asynchronously, it must return FILE_LOCK_DEFERRED, and call ->lm_grant() when the lock request completes. If the request is for non-blocking lock the file system should return FILE_LOCK_DEFERRED then try to get the lock and call the callback routine with the result. If the request timed out the callback routine will return a nonzero return code and the file system should release the lock. The file system is also responsible to keep a corresponding posix lock when it grants a lock so the VFS can find out which locks are locally held and do the correct lock cleanup when required. The underlying filesystem must not drop the kernel lock or call ->lm_grant() before returning to the caller with a FILE_LOCK_DEFERRED return code.h](h)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj<ubj)}(hhh](j)}(h4``struct file *filp`` The file to apply the lock to h](j)}(h``struct file *filp``h]j)}(hj =h]hstruct file *filp}(hj"=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj=ubj)}(hhh]h)}(hThe file to apply the lock toh]hThe file to apply the lock to}(hj9=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5=hM hj6=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj5=hM hj=ubj)}(hH``unsigned int cmd`` type of locking operation (F_SETLK, F_GETLK, etc.) h](j)}(h``unsigned int cmd``h]j)}(hjY=h]hunsigned int cmd}(hj[=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hjS=ubj)}(hhh]h)}(h2type of locking operation (F_SETLK, F_GETLK, etc.)h]h2type of locking operation (F_SETLK, F_GETLK, etc.)}(hjr=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn=hM hjo=ubah}(h]h ]h"]h$]h&]uh1jhjS=ubeh}(h]h ]h"]h$]h&]uh1jhjn=hM hj=ubj)}(h0``struct file_lock *fl`` The lock to be applied h](j)}(h``struct file_lock *fl``h]j)}(hj=h]hstruct file_lock *fl}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj=ubj)}(hhh]h)}(hThe lock to be appliedh]hThe lock to be applied}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj=ubj)}(hU``struct file_lock *conf`` Place to return a copy of the conflicting lock, if found. h](j)}(h``struct file_lock *conf``h]j)}(hj=h]hstruct file_lock *conf}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj=ubj)}(hhh]h)}(h9Place to return a copy of the conflicting lock, if found.h]h9Place to return a copy of the conflicting lock, if found.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj=ubeh}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h**Description**h]j)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj<ubh)}(hZA caller that doesn't care about the conflicting lock may pass NULL as the final argument.h]h\A caller that doesn’t care about the conflicting lock may pass NULL as the final argument.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj<ubh)}(hIf the filesystem defines a private ->lock() method, then **conf** will be left unchanged; so a caller that cares should initialize it to some acceptable default.h](h:If the filesystem defines a private ->lock() method, then }(hj+>hhhNhNubj)}(h**conf**h]hconf}(hj3>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+>ubh` will be left unchanged; so a caller that cares should initialize it to some acceptable default.}(hj+>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj<ubh)}(hX8To avoid blocking kernel daemons, such as lockd, that need to acquire POSIX locks, the ->lock() interface may return asynchronously, before the lock has been granted or denied by the underlying filesystem, if (and only if) lm_grant is set. Additionally FOP_ASYNC_LOCK in file_operations fop_flags need to be set.h]hX8To avoid blocking kernel daemons, such as lockd, that need to acquire POSIX locks, the ->lock() interface may return asynchronously, before the lock has been granted or denied by the underlying filesystem, if (and only if) lm_grant is set. Additionally FOP_ASYNC_LOCK in file_operations fop_flags need to be set.}(hjL>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj<ubh)}(hXCallers expecting ->lock() to return asynchronously will only use F_SETLK, not F_SETLKW; they will set FL_SLEEP if (and only if) the request is for a blocking lock. When ->lock() does return asynchronously, it must return FILE_LOCK_DEFERRED, and call ->lm_grant() when the lock request completes. If the request is for non-blocking lock the file system should return FILE_LOCK_DEFERRED then try to get the lock and call the callback routine with the result. If the request timed out the callback routine will return a nonzero return code and the file system should release the lock. The file system is also responsible to keep a corresponding posix lock when it grants a lock so the VFS can find out which locks are locally held and do the correct lock cleanup when required. The underlying filesystem must not drop the kernel lock or call ->lm_grant() before returning to the caller with a FILE_LOCK_DEFERRED return code.h]hXCallers expecting ->lock() to return asynchronously will only use F_SETLK, not F_SETLKW; they will set FL_SLEEP if (and only if) the request is for a blocking lock. When ->lock() does return asynchronously, it must return FILE_LOCK_DEFERRED, and call ->lm_grant() when the lock request completes. If the request is for non-blocking lock the file system should return FILE_LOCK_DEFERRED then try to get the lock and call the callback routine with the result. If the request timed out the callback routine will return a nonzero return code and the file system should release the lock. The file system is also responsible to keep a corresponding posix lock when it grants a lock so the VFS can find out which locks are locally held and do the correct lock cleanup when required. The underlying filesystem must not drop the kernel lock or call ->lm_grant() before returning to the caller with a FILE_LOCK_DEFERRED return code.}(hj[>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_cancel_lock (C function)c.vfs_cancel_lockhNtauh1hhj#hhhNhNubj)}(hhh](j)}(h=int vfs_cancel_lock (struct file *filp, struct file_lock *fl)h]j)}(hhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj>hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM: ubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>hhhj>hM: ubjC)}(hvfs_cancel_lockh]jI)}(hvfs_cancel_lockh]hvfs_cancel_lock}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj>hhhj>hM: ubj=)}(h)(struct file *filp, struct file_lock *fl)h](jC)}(hstruct file *filph](j )}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj>ubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubh)}(hhh]jI)}(hfileh]hfile}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj )}j ]j)}jj>sbc.vfs_cancel_lockasbuh1hhj>ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjI)}(hfilph]hfilp}(hj ?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj>ubjC)}(hstruct file_lock *flh](j )}(hjh]hstruct}(hj9?hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj5?ubj2)}(h h]h }(hjF?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5?ubh)}(hhh]jI)}(h file_lockh]h file_lock}(hjW?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjT?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjY?modnameN classnameNjj )}j ]j?c.vfs_cancel_lockasbuh1hhj5?ubj2)}(h h]h }(hju?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5?ubjI)}(hflh]hfl}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5?ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj>ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj>hhhj>hM: ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj>hhhj>hM: ubah}(h]j}>ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj>hM: hj>hhubjw)}(hhh]h)}(hfile byte range unblock lockh]hfile byte range unblock lock}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM: hj?hhubah}(h]h ]h"]h$]h&]uh1jvhj>hhhj>hM: ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1jhhhj#hNhNubj)}(h**Parameters** ``struct file *filp`` The file to apply the unblock to ``struct file_lock *fl`` The lock to be unblocked **Description** Used by lock managers to cancel blocked requestsh](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM> hj?ubj)}(hhh](j)}(h7``struct file *filp`` The file to apply the unblock to h](j)}(h``struct file *filp``h]j)}(hj?h]hstruct file *filp}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM; hj?ubj)}(hhh]h)}(h The file to apply the unblock toh]h The file to apply the unblock to}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM; hj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hM; hj?ubj)}(h2``struct file_lock *fl`` The lock to be unblocked h](j)}(h``struct file_lock *fl``h]j)}(hj4@h]hstruct file_lock *fl}(hj6@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2@ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM< hj.@ubj)}(hhh]h)}(hThe lock to be unblockedh]hThe lock to be unblocked}(hjM@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI@hM< hjJ@ubah}(h]h ]h"]h$]h&]uh1jhj.@ubeh}(h]h ]h"]h$]h&]uh1jhjI@hM< hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j)}(hjo@h]h Description}(hjq@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm@ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM> hj?ubh)}(h0Used by lock managers to cancel blocked requestsh]h0Used by lock managers to cancel blocked requests}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM= hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  vfs_inode_has_locks (C function)c.vfs_inode_has_lockshNtauh1hhj#hhhNhNubj)}(hhh](j)}(h.bool vfs_inode_has_locks (struct inode *inode)h]j)}(h-bool vfs_inode_has_locks(struct inode *inode)h](jf)}(hjih]hbool}(hj@hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj@hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMJ ubj2)}(h h]h }(hj@hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@hhhj@hMJ ubjC)}(hvfs_inode_has_locksh]jI)}(hvfs_inode_has_locksh]hvfs_inode_has_locks}(hj@hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj@hhhj@hMJ ubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj@ubj2)}(h h]h }(hj@hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@ubh)}(hhh]jI)}(hinodeh]hinode}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj )}j ]j)}jj@sbc.vfs_inode_has_locksasbuh1hhj@ubj2)}(h h]h }(hj.AhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@ubj)}(hjh]h*}(hjah"]h$]h&]uh1j1hjTBhhhjfBhMWubjC)}(hlease_open_conflicth]jI)}(hlease_open_conflicth]hlease_open_conflict}(hjyBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjuBubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjTBhhhjfBhMWubj=)}(h"(struct file *filp, const int arg)h](jC)}(hstruct file *filph](j )}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjBubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubh)}(hhh]jI)}(hfileh]hfile}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj )}j ]j)}jj{Bsbc.lease_open_conflictasbuh1hhjBubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjI)}(hfilph]hfilp}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(h const int argh](j )}(hjh]hconst}(hjChhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjCubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjCubjf)}(hinth]hint}(hj"ChhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjCubj2)}(h h]h }(hj0ChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjCubjI)}(hargh]harg}(hj>ChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubeh}(h]h ]h"]h$]h&]j`jauh1j<hjTBhhhjfBhMWubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjPBhhhjfBhMWubah}(h]jKBah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjfBhMWhjMBhhubjw)}(hhh]h)}(hnsee if the given file points to an inode that has an existing open that would conflict with the desired lease.h]hnsee if the given file points to an inode that has an existing open that would conflict with the desired lease.}(hjhChhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMWhjeChhubah}(h]h ]h"]h$]h&]uh1jvhjMBhhhjfBhMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhj#hNhNubj)}(h**Parameters** ``struct file *filp`` file to check ``const int arg`` type of lease that we're trying to acquire **Description** Check to see if there's an existing open fd on this file that would conflict with the lease we're trying to set.h](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM[hjCubj)}(hhh](j)}(h$``struct file *filp`` file to check h](j)}(h``struct file *filp``h]j)}(hjCh]hstruct file *filp}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMZhjCubj)}(hhh]h)}(h file to checkh]h file to check}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMZhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMZhjCubj)}(h=``const int arg`` type of lease that we're trying to acquire h](j)}(h``const int arg``h]j)}(hjCh]h const int arg}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM[hjCubj)}(hhh]h)}(h*type of lease that we're trying to acquireh]h,type of lease that we’re trying to acquire}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM[hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM[hjCubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM]hjCubh)}(hpCheck to see if there's an existing open fd on this file that would conflict with the lease we're trying to set.h]htCheck to see if there’s an existing open fd on this file that would conflict with the lease we’re trying to set.}(hj3DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM\hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "posix_lock_inode_wait (C function)c.posix_lock_inode_waithNtauh1hhj#hhhNhNubj)}(hhh](j)}(hEint posix_lock_inode_wait (struct inode *inode, struct file_lock *fl)h]j)}(hDint posix_lock_inode_wait(struct inode *inode, struct file_lock *fl)h](jf)}(hinth]hint}(hjbDhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj^DhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj2)}(h h]h }(hjqDhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj^DhhhjpDhMubjC)}(hposix_lock_inode_waith]jI)}(hposix_lock_inode_waith]hposix_lock_inode_wait}(hjDhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj^DhhhjpDhMubj=)}(h+(struct inode *inode, struct file_lock *fl)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjDubj2)}(h h]h }(hjDhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubh)}(hhh]jI)}(hinodeh]hinode}(hjDhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj )}j ]j)}jjDsbc.posix_lock_inode_waitasbuh1hhjDubj2)}(h h]h }(hjDhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjI)}(hinodeh]hinode}(hjDhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjDubjC)}(hstruct file_lock *flh](j )}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj Eubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Eubh)}(hhh]jI)}(h file_lockh]h file_lock}(hj/EhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,Eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1EmodnameN classnameNjj )}j ]jDc.posix_lock_inode_waitasbuh1hhj Eubj2)}(h h]h }(hjMEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Eubj)}(hjh]h*}(hj[EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj EubjI)}(hflh]hfl}(hjhEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Eubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjDubeh}(h]h ]h"]h$]h&]j`jauh1j<hj^DhhhjpDhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjZDhhhjpDhMubah}(h]jUDah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjpDhMhjWDhhubjw)}(hhh]h)}(h"Apply a POSIX-style lock to a fileh]h"Apply a POSIX-style lock to a file}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jvhjWDhhhjpDhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jhhhj#hNhNubj)}(h**Parameters** ``struct inode *inode`` inode of file to which lock request should be applied ``struct file_lock *fl`` The lock to be applied **Description** Apply a POSIX style lock request to an inode.h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjEubj)}(hhh](j)}(hN``struct inode *inode`` inode of file to which lock request should be applied h](j)}(h``struct inode *inode``h]j)}(hjEh]hstruct inode *inode}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjEubj)}(hhh]h)}(h5inode of file to which lock request should be appliedh]h5inode of file to which lock request should be applied}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjEubj)}(h0``struct file_lock *fl`` The lock to be applied h](j)}(h``struct file_lock *fl``h]j)}(hj Fh]hstruct file_lock *fl}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Fubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjFubj)}(hhh]h)}(hThe lock to be appliedh]hThe lock to be applied}(hj%FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!FhMhj"Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj!FhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjGFh]h Description}(hjIFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEFubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjEubh)}(h-Apply a POSIX style lock request to an inode.h]h-Apply a POSIX style lock request to an inode.}(hj]FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j __fcntl_getlease (C function)c.__fcntl_getleasehNtauh1hhj#hhhNhNubj)}(hhh](j)}(h=int __fcntl_getlease (struct file *filp, unsigned int flavor)h]j)}(hah"]h$]h&]uh1j1hjFhhhjFhM!ubjC)}(h__fcntl_getleaseh]jI)}(h__fcntl_getleaseh]h__fcntl_getlease}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjFhhhjFhM!ubj=)}(h((struct file *filp, unsigned int flavor)h](jC)}(hstruct file *filph](j )}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubh)}(hhh]jI)}(hfileh]hfile}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj )}j ]j)}jjFsbc.__fcntl_getleaseasbuh1hhjFubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjI)}(hfilph]hfilp}(hj"GhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(hunsigned int flavorh](jf)}(hunsignedh]hunsigned}(hj;GhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj7Gubj2)}(h h]h }(hjIGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj7Gubjf)}(hinth]hint}(hjWGhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj7Gubj2)}(h h]h }(hjeGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj7GubjI)}(hflavorh]hflavor}(hjsGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7Gubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubeh}(h]h ]h"]h$]h&]j`jauh1j<hjFhhhjFhM!ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjFhhhjFhM!ubah}(h]jFah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjFhM!hjFhhubjw)}(hhh]h)}(h&Enquire what lease is currently activeh]h&Enquire what lease is currently active}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM!hjGhhubah}(h]h ]h"]h$]h&]uh1jvhjFhhhjFhM!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1jhhhj#hNhNubj)}(hX**Parameters** ``struct file *filp`` the file ``unsigned int flavor`` type of lease flags to check **Description** The value returned by this function will be one of (if no lease break is pending): ``F_RDLCK`` to indicate a shared lease is held. ``F_WRLCK`` to indicate an exclusive lease is held. ``F_UNLCK`` to indicate no lease is held. (if a lease break is pending): ``F_RDLCK`` to indicate an exclusive lease needs to be changed to a shared lease (or removed). ``F_UNLCK`` to indicate the lease needs to be removed. XXX: sfr & willy disagree over whether F_INPROGRESS should be returned to userspace.h](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM%hjGubj)}(hhh](j)}(h``struct file *filp`` the file h](j)}(h``struct file *filp``h]j)}(hjGh]hstruct file *filp}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM"hjGubj)}(hhh]h)}(hthe fileh]hthe file}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM"hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM"hjGubj)}(h5``unsigned int flavor`` type of lease flags to check h](j)}(h``unsigned int flavor``h]j)}(hjHh]hunsigned int flavor}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM#hjHubj)}(hhh]h)}(htype of lease flags to checkh]htype of lease flags to check}(hj0HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,HhM#hj-Hubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhj,HhM#hjGubeh}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjRHh]h Description}(hjTHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPHubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM%hjGubj)}(hXThe value returned by this function will be one of (if no lease break is pending): ``F_RDLCK`` to indicate a shared lease is held. ``F_WRLCK`` to indicate an exclusive lease is held. ``F_UNLCK`` to indicate no lease is held. (if a lease break is pending): ``F_RDLCK`` to indicate an exclusive lease needs to be changed to a shared lease (or removed). ``F_UNLCK`` to indicate the lease needs to be removed. XXX: sfr & willy disagree over whether F_INPROGRESS should be returned to userspace.h](h)}(hRThe value returned by this function will be one of (if no lease break is pending):h]hRThe value returned by this function will be one of (if no lease break is pending):}(hjlHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM$hjhHubh)}(h/``F_RDLCK`` to indicate a shared lease is held.h](j)}(h ``F_RDLCK``h]hF_RDLCK}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Hubh$ to indicate a shared lease is held.}(hj{HhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM'hjhHubh)}(h3``F_WRLCK`` to indicate an exclusive lease is held.h](j)}(h ``F_WRLCK``h]hF_WRLCK}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh( to indicate an exclusive lease is held.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM)hjhHubh)}(h)``F_UNLCK`` to indicate no lease is held.h](j)}(h ``F_UNLCK``h]hF_UNLCK}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh to indicate no lease is held.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM+hjhHubh)}(h(if a lease break is pending):h]h(if a lease break is pending):}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM-hjhHubj)}(hhh]j)}(h_``F_RDLCK`` to indicate an exclusive lease needs to be changed to a shared lease (or removed). h](j)}(h6``F_RDLCK`` to indicate an exclusive lease needs to beh](j)}(h ``F_RDLCK``h]hF_RDLCK}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh+ to indicate an exclusive lease needs to be}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM0hjHubj)}(hhh]h)}(h'changed to a shared lease (or removed).h]h'changed to a shared lease (or removed).}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM0hjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjIhM0hjHubah}(h]h ]h"]h$]h&]uh1jhjhHubh)}(h6``F_UNLCK`` to indicate the lease needs to be removed.h](j)}(h ``F_UNLCK``h]hF_UNLCK}(hj,IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Iubh+ to indicate the lease needs to be removed.}(hj(IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM2hjhHubh)}(hTXXX: sfr & willy disagree over whether F_INPROGRESS should be returned to userspace.h]hTXXX: sfr & willy disagree over whether F_INPROGRESS should be returned to userspace.}(hjEIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM4hjhHubeh}(h]h ]h"]h$]h&]uh1jhjzHhM$hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j fcntl_setlease (C function)c.fcntl_setleasehNtauh1hhj#hhhNhNubj)}(hhh](j)}(h@int fcntl_setlease (unsigned int fd, struct file *filp, int arg)h]j)}(h?int fcntl_setlease(unsigned int fd, struct file *filp, int arg)h](jf)}(hinth]hint}(hjzIhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjvIhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvIhhhjIhMubjC)}(hfcntl_setleaseh]jI)}(hfcntl_setleaseh]hfcntl_setlease}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjvIhhhjIhMubj=)}(h-(unsigned int fd, struct file *filp, int arg)h](jC)}(hunsigned int fdh](jf)}(hunsignedh]hunsigned}(hjIhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjIubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjIubjf)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjIubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjIubjI)}(hfdh]hfd}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjIubjC)}(hstruct file *filph](j )}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(hfileh]hfile}(hj&JhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj#Jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(JmodnameN classnameNjj )}j ]j)}jjIsbc.fcntl_setleaseasbuh1hhjJubj2)}(h h]h }(hjFJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjTJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(hfilph]hfilp}(hjaJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjIubjC)}(hint argh](jf)}(hinth]hint}(hjzJhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjvJubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvJubjI)}(hargh]harg}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjIubeh}(h]h ]h"]h$]h&]j`jauh1j<hjvIhhhjIhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjrIhhhjIhMubah}(h]jmIah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjIhMhjoIhhubjw)}(hhh]h)}(hsets a lease on an open fileh]hsets a lease on an open file}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjJhhubah}(h]h ]h"]h$]h&]uh1jvhjoIhhhjIhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhj#hNhNubj)}(hX5**Parameters** ``unsigned int fd`` open file descriptor ``struct file *filp`` file pointer ``int arg`` type of lease to obtain **Description** Call this fcntl to establish a lease on the file. Note that you also need to call ``F_SETSIG`` to receive a signal when the lease is broken.h](h)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjJubj)}(hhh](j)}(h)``unsigned int fd`` open file descriptor h](j)}(h``unsigned int fd``h]j)}(hjKh]hunsigned int fd}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjJubj)}(hhh]h)}(hopen file descriptorh]hopen file descriptor}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjJubj)}(h#``struct file *filp`` file pointer h](j)}(h``struct file *filp``h]j)}(hj:Kh]hstruct file *filp}(hjah"]h$]h&]uh1j1hj LhhhjLhMubjC)}(hfcntl_setdelegh]jI)}(hfcntl_setdelegh]hfcntl_setdeleg}(hj0LhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,Lubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj LhhhjLhMubj=)}(h>(unsigned int fd, struct file *filp, struct delegation *deleg)h](jC)}(hunsigned int fdh](jf)}(hunsignedh]hunsigned}(hjLLhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjHLubj2)}(h h]h }(hjZLhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHLubjf)}(hinth]hint}(hjhLhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjHLubj2)}(h h]h }(hjvLhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHLubjI)}(hfdh]hfd}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHLubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjDLubjC)}(hstruct file *filph](j )}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjLubj2)}(h h]h }(hjLhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjLubh)}(hhh]jI)}(hfileh]hfile}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj )}j ]j)}jj2Lsbc.fcntl_setdelegasbuh1hhjLubj2)}(h h]h }(hjLhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubjI)}(hfilph]hfilp}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjDLubjC)}(hstruct delegation *delegh](j )}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj Mubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Mubh)}(hhh]jI)}(h delegationh]h delegation}(hj-MhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*Mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/MmodnameN classnameNjj )}j ]jLc.fcntl_setdelegasbuh1hhj Mubj2)}(h h]h }(hjKMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Mubj)}(hjh]h*}(hjYMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj MubjI)}(hdelegh]hdeleg}(hjfMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Mubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjDLubeh}(h]h ]h"]h$]h&]j`jauh1j<hj LhhhjLhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjLhhhjLhMubah}(h]jLah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjLhMhjLhhubjw)}(hhh]h)}(h!sets a delegation on an open fileh]h!sets a delegation on an open file}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjMhhubah}(h]h ]h"]h$]h&]uh1jvhjLhhhjLhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jhhhj#hNhNubj)}(hXT**Parameters** ``unsigned int fd`` open file descriptor ``struct file *filp`` file pointer ``struct delegation *deleg`` delegation request from userland **Description** Call this fcntl to establish a delegation on the file. Note that you also need to call ``F_SETSIG`` to receive a signal when the lease is broken.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjMubj)}(hhh](j)}(h)``unsigned int fd`` open file descriptor h](j)}(h``unsigned int fd``h]j)}(hjMh]hunsigned int fd}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjMubj)}(hhh]h)}(hopen file descriptorh]hopen file descriptor}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjMubj)}(h#``struct file *filp`` file pointer h](j)}(h``struct file *filp``h]j)}(hj Nh]hstruct file *filp}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjNubj)}(hhh]h)}(h file pointerh]h file pointer}(hj#NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhj Nubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjMubj)}(h>``struct delegation *deleg`` delegation request from userland h](j)}(h``struct delegation *deleg``h]j)}(hjCNh]hstruct delegation *deleg}(hjENhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjANubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj=Nubj)}(hhh]h)}(h delegation request from userlandh]h delegation request from userland}(hj\NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXNhMhjYNubah}(h]h ]h"]h$]h&]uh1jhj=Nubeh}(h]h ]h"]h$]h&]uh1jhjXNhMhjMubeh}(h]h ]h"]h$]h&]uh1jhjMubh)}(h**Description**h]j)}(hj~Nh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Nubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjMubj)}(hCall this fcntl to establish a delegation on the file. Note that you also need to call ``F_SETSIG`` to receive a signal when the lease is broken.h]h)}(hCall this fcntl to establish a delegation on the file. Note that you also need to call ``F_SETSIG`` to receive a signal when the lease is broken.h](hWCall this fcntl to establish a delegation on the file. Note that you also need to call }(hjNhhhNhNubj)}(h ``F_SETSIG``h]hF_SETSIG}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh. to receive a signal when the lease is broken.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjNubah}(h]h ]h"]h$]h&]uh1jhjNhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "flock_lock_inode_wait (C function)c.flock_lock_inode_waithNtauh1hhj#hhhNhNubj)}(hhh](j)}(hEint flock_lock_inode_wait (struct inode *inode, struct file_lock *fl)h]j)}(hDint flock_lock_inode_wait(struct inode *inode, struct file_lock *fl)h](jf)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjNhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj2)}(h h]h }(hjNhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjNhhhjNhMubjC)}(hflock_lock_inode_waith]jI)}(hflock_lock_inode_waith]hflock_lock_inode_wait}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjNubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjNhhhjNhMubj=)}(h+(struct inode *inode, struct file_lock *fl)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOubj2)}(h h]h }(hj)OhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubh)}(hhh]jI)}(hinodeh]hinode}(hj:OhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7Oubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjah"]h$]h&]uh1j1hjOubj)}(hjh]h*}(hjhOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjI)}(hinodeh]hinode}(hjuOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubjC)}(hstruct file_lock *flh](j )}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubh)}(hhh]jI)}(h file_lockh]h file_lock}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj )}j ]jVOc.flock_lock_inode_waitasbuh1hhjOubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjI)}(hflh]hfl}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubeh}(h]h ]h"]h$]h&]j`jauh1j<hjNhhhjNhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjNhhhjNhMubah}(h]jNah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjNhMhjNhhubjw)}(hhh]h)}(h"Apply a FLOCK-style lock to a fileh]h"Apply a FLOCK-style lock to a file}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj Phhubah}(h]h ]h"]h$]h&]uh1jvhjNhhhjNhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'Pjj'Pjjjuh1jhhhj#hNhNubj)}(h**Parameters** ``struct inode *inode`` inode of the file to apply to ``struct file_lock *fl`` The lock to be applied **Description** Apply a FLOCK style lock request to an inode.h](h)}(h**Parameters**h]j)}(hj1Ph]h Parameters}(hj3PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Pubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj+Pubj)}(hhh](j)}(h6``struct inode *inode`` inode of the file to apply to h](j)}(h``struct inode *inode``h]j)}(hjPPh]hstruct inode *inode}(hjRPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNPubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjJPubj)}(hhh]h)}(hinode of the file to apply toh]hinode of the file to apply to}(hjiPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjePhMhjfPubah}(h]h ]h"]h$]h&]uh1jhjJPubeh}(h]h ]h"]h$]h&]uh1jhjePhMhjGPubj)}(h0``struct file_lock *fl`` The lock to be applied h](j)}(h``struct file_lock *fl``h]j)}(hjPh]hstruct file_lock *fl}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjPubj)}(hhh]h)}(hThe lock to be appliedh]hThe lock to be applied}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjGPubeh}(h]h ]h"]h$]h&]uh1jhj+Pubh)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj+Pubh)}(h-Apply a FLOCK style lock request to an inode.h]h-Apply a FLOCK style lock request to an inode.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj+Pubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j sys_flock (C function) c.sys_flockhNtauh1hhj#hhhNhNubj)}(hhh](j)}(h2long sys_flock (unsigned int fd, unsigned int cmd)h]j)}(h1long sys_flock(unsigned int fd, unsigned int cmd)h](jf)}(hlongh]hlong}(hj QhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjQhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj2)}(h h]h }(hjQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQhhhjQhMubjC)}(h sys_flockh]jI)}(h sys_flockh]h sys_flock}(hj*QhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&Qubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjQhhhjQhMubj=)}(h#(unsigned int fd, unsigned int cmd)h](jC)}(hunsigned int fdh](jf)}(hunsignedh]hunsigned}(hjFQhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjBQubj2)}(h h]h }(hjTQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBQubjf)}(hinth]hint}(hjbQhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjBQubj2)}(h h]h }(hjpQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBQubjI)}(hfdh]hfd}(hj~QhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBQubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj>QubjC)}(hunsigned int cmdh](jf)}(hunsignedh]hunsigned}(hjQhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjQubj2)}(h h]h }(hjQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQubjf)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjQubj2)}(h h]h }(hjQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQubjI)}(hcmdh]hcmd}(hjQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj>Qubeh}(h]h ]h"]h$]h&]j`jauh1j<hjQhhhjQhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjQhhhjQhMubah}(h]jPah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjQhMhjPhhubjw)}(hhh]jD)}(hhh]jD)}(hflock() system call.h]h)}(hjQh]hflock() system call.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjQubah}(h]h ]h"]h$]h&]uh1jDhjQhhhj RhNubah}(h]h ]h"]h$]h&]jDj!uh1jDhj RhMhjQhhubah}(h]h ]h"]h$]h&]uh1jvhjPhhhjQhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#Rjj#Rjjjuh1jhhhj#hNhNubj)}(hX**Parameters** ``unsigned int fd`` the file descriptor to lock. ``unsigned int cmd`` the type of lock to apply. **Description** Apply a ``FL_FLOCK`` style lock to an open file descriptor. The **cmd** can be one of: - ``LOCK_SH`` -- a shared lock. - ``LOCK_EX`` -- an exclusive lock. - ``LOCK_UN`` -- remove an existing lock. - ``LOCK_MAND`` -- a 'mandatory' flock. (DEPRECATED) ``LOCK_MAND`` support has been removed from the kernel.h](h)}(h**Parameters**h]j)}(hj-Rh]h Parameters}(hj/RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Rubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj'Rubj)}(hhh](j)}(h1``unsigned int fd`` the file descriptor to lock. h](j)}(h``unsigned int fd``h]j)}(hjLRh]hunsigned int fd}(hjNRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJRubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjFRubj)}(hhh]h)}(hthe file descriptor to lock.h]hthe file descriptor to lock.}(hjeRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaRhMhjbRubah}(h]h ]h"]h$]h&]uh1jhjFRubeh}(h]h ]h"]h$]h&]uh1jhjaRhMhjCRubj)}(h0``unsigned int cmd`` the type of lock to apply. h](j)}(h``unsigned int cmd``h]j)}(hjRh]hunsigned int cmd}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjRubj)}(hhh]h)}(hthe type of lock to apply.h]hthe type of lock to apply.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjCRubeh}(h]h ]h"]h$]h&]uh1jhj'Rubh)}(h**Description**h]j)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj'Rubj)}(hX3Apply a ``FL_FLOCK`` style lock to an open file descriptor. The **cmd** can be one of: - ``LOCK_SH`` -- a shared lock. - ``LOCK_EX`` -- an exclusive lock. - ``LOCK_UN`` -- remove an existing lock. - ``LOCK_MAND`` -- a 'mandatory' flock. (DEPRECATED) ``LOCK_MAND`` support has been removed from the kernel.h](h)}(hVApply a ``FL_FLOCK`` style lock to an open file descriptor. The **cmd** can be one of:h](hApply a }(hjRhhhNhNubj)}(h ``FL_FLOCK``h]hFL_FLOCK}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh, style lock to an open file descriptor. The }(hjRhhhNhNubj)}(h**cmd**h]hcmd}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh can be one of:}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjRubjD)}(hhh](jD)}(h``LOCK_SH`` -- a shared lock.h]h)}(hjSh](j)}(h ``LOCK_SH``h]hLOCK_SH}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh -- a shared lock.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjSubah}(h]h ]h"]h$]h&]uh1jDhj SubjD)}(h!``LOCK_EX`` -- an exclusive lock.h]h)}(hj8Sh](j)}(h ``LOCK_EX``h]hLOCK_EX}(hj=ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Subh -- an exclusive lock.}(hj:ShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj6Subah}(h]h ]h"]h$]h&]uh1jDhj SubjD)}(h'``LOCK_UN`` -- remove an existing lock.h]h)}(hj^Sh](j)}(h ``LOCK_UN``h]hLOCK_UN}(hjcShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Subh -- remove an existing lock.}(hj`ShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj\Subah}(h]h ]h"]h$]h&]uh1jDhj SubjD)}(h3``LOCK_MAND`` -- a 'mandatory' flock. (DEPRECATED) h]h)}(h2``LOCK_MAND`` -- a 'mandatory' flock. (DEPRECATED)h](j)}(h ``LOCK_MAND``h]h LOCK_MAND}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh) -- a ‘mandatory’ flock. (DEPRECATED)}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjSubah}(h]h ]h"]h$]h&]uh1jDhj Subeh}(h]h ]h"]h$]h&]jDj!uh1jDhj/ShMhjRubh)}(h7``LOCK_MAND`` support has been removed from the kernel.h](j)}(h ``LOCK_MAND``h]h LOCK_MAND}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh* support has been removed from the kernel.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjRubeh}(h]h ]h"]h$]h&]uh1jhj ShMhj'Rubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  locks_translate_pid (C function)c.locks_translate_pidhNtauh1hhj#hhhNhNubj)}(hhh](j)}(hOpid_t locks_translate_pid (struct file_lock_core *fl, struct pid_namespace *ns)h]j)}(hNpid_t locks_translate_pid(struct file_lock_core *fl, struct pid_namespace *ns)h](h)}(hhh]jI)}(hpid_th]hpid_t}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj )}j ]j)}jlocks_translate_pidsbc.locks_translate_pidasbuh1hhjShhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM@ ubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjShhhjThM@ ubjC)}(hlocks_translate_pidh]jI)}(hjTh]hlocks_translate_pid}(hj)ThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%Tubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjShhhjThM@ ubj=)}(h5(struct file_lock_core *fl, struct pid_namespace *ns)h](jC)}(hstruct file_lock_core *flh](j )}(hjh]hstruct}(hjDThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj@Tubj2)}(h h]h }(hjQThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@Tubh)}(hhh]jI)}(hfile_lock_coreh]hfile_lock_core}(hjbThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_Tubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdTmodnameN classnameNjj )}j ]jTc.locks_translate_pidasbuh1hhj@Tubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@Tubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@TubjI)}(hflh]hfl}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@Tubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjah"]h$]h&]uh1j1hjTubh)}(hhh]jI)}(h pid_namespaceh]h pid_namespace}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj )}j ]jTc.locks_translate_pidasbuh1hhjTubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjI)}(hnsh]hns}(hj UhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjUsed to translate a fl_pid into a namespace virtual pid numberh]h>Used to translate a fl_pid into a namespace virtual pid number}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMC hjQUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubeh}(h] file-locksah ]h"] file locksah$]h&]uh1hhhhhhhhK*ubh)}(hhh](h)}(hOther Functionsh]hOther Functions}(hj!VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhhhhhK3ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j mpage_readahead (C function)c.mpage_readaheadhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hKvoid mpage_readahead (struct readahead_control *rac, get_block_t get_block)h]j)}(hJvoid mpage_readahead(struct readahead_control *rac, get_block_t get_block)h](jf)}(hvoidh]hvoid}(hjHVhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjDVhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chM@ubj2)}(h h]h }(hjWVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDVhhhjVVhM@ubjC)}(hmpage_readaheadh]jI)}(hmpage_readaheadh]hmpage_readahead}(hjiVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeVubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjDVhhhjVVhM@ubj=)}(h6(struct readahead_control *rac, get_block_t get_block)h](jC)}(hstruct readahead_control *rach](j )}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjVubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubh)}(hhh]jI)}(hreadahead_controlh]hreadahead_control}(hjVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj )}j ]j)}jjkVsbc.mpage_readaheadasbuh1hhjVubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjI)}(hrach]hrac}(hjVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj}VubjC)}(hget_block_t get_blockh](h)}(hhh]jI)}(h get_block_th]h get_block_t}(hjVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj )}j ]jVc.mpage_readaheadasbuh1hhjVubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubjI)}(h get_blockh]h get_block}(hj&WhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj}Vubeh}(h]h ]h"]h$]h&]j`jauh1j<hjDVhhhjVVhM@ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj@VhhhjVVhM@ubah}(h]j;Vah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjVVhM@hj=Vhhubjw)}(hhh]h)}(hstart reads against pagesh]hstart reads against pages}(hjPWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chM@hjMWhhubah}(h]h ]h"]h$]h&]uh1jvhj=VhhhjVVhM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhWjjhWjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct readahead_control *rac`` Describes which pages to read. ``get_block_t get_block`` The filesystem's block mapper function. **Description** This function walks the pages and the blocks within each page, building and emitting large BIOs. If anything unusual happens, such as: - encountering a page which has buffers - encountering a page which has a non-hole after a hole - encountering a page with non-contiguous blocks then this code just gives up and calls the buffer_head-based read function. It does handle a page which has holes at the end - that is a common case: the end-of-file on blocksize < PAGE_SIZE setups. BH_Boundary explanation: There is a problem. The mpage read code assembles several pages, gets all their disk mappings, and then submits them all. That's fine, but obtaining the disk mappings may require I/O. Reads of indirect blocks, for example. So an mpage read of the first 16 blocks of an ext2 file will cause I/O to be submitted in the following order: 12 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 because the indirect block has to be read to get the mappings of blocks 13,14,15,16. Obviously, this impacts performance. So what we do it to allow the filesystem's get_block() function to set BH_Boundary when it maps block 11. BH_Boundary says: mapping of the block after this one will require I/O against a block which is probably close to this one. So you should push what I/O you have currently accumulated. This all causes the disk requests to be issued in the correct order.h](h)}(h**Parameters**h]j)}(hjrWh]h Parameters}(hjtWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpWubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMDhjlWubj)}(hhh](j)}(hA``struct readahead_control *rac`` Describes which pages to read. h](j)}(h!``struct readahead_control *rac``h]j)}(hjWh]hstruct readahead_control *rac}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMAhjWubj)}(hhh]h)}(hDescribes which pages to read.h]hDescribes which pages to read.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMAhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMAhjWubj)}(hB``get_block_t get_block`` The filesystem's block mapper function. h](j)}(h``get_block_t get_block``h]j)}(hjWh]hget_block_t get_block}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMBhjWubj)}(hhh]h)}(h'The filesystem's block mapper function.h]h)The filesystem’s block mapper function.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMBhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMBhjWubeh}(h]h ]h"]h$]h&]uh1jhjlWubh)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMDhjlWubh)}(h`This function walks the pages and the blocks within each page, building and emitting large BIOs.h]h`This function walks the pages and the blocks within each page, building and emitting large BIOs.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMChjlWubh)}(h%If anything unusual happens, such as:h]h%If anything unusual happens, such as:}(hj*XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMFhjlWubjD)}(hhh](jD)}(h%encountering a page which has buffersh]h)}(hj>Xh]h%encountering a page which has buffers}(hj@XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMHhjah"]h$]h&]uh1j1hj)Yhhhj;YhMubjC)}(h__mpage_writepagesh]jI)}(h__mpage_writepagesh]h__mpage_writepages}(hjNYhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJYubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj)Yhhhj;YhMubj=)}(h(struct address_space *mapping, struct writeback_control *wbc, get_block_t get_block, int (*write_folio)(struct folio *folio, struct writeback_control *wbc))h](jC)}(hstruct address_space *mappingh](j )}(hjh]hstruct}(hjjYhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjfYubj2)}(h h]h }(hjwYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfYubh)}(hhh]jI)}(h address_spaceh]h address_space}(hjYhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj )}j ]j)}jjPYsbc.__mpage_writepagesasbuh1hhjfYubj2)}(h h]h }(hjYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfYubjI)}(hmappingh]hmapping}(hjYhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfYubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbYubjC)}(hstruct writeback_control *wbch](j )}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjYubj2)}(h h]h }(hjYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjYubh)}(hhh]jI)}(hwriteback_controlh]hwriteback_control}(hjYhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj )}j ]jYc.__mpage_writepagesasbuh1hhjYubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjYubj)}(hjh]h*}(hj&ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjI)}(hwbch]hwbc}(hj3ZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbYubjC)}(hget_block_t get_blockh](h)}(hhh]jI)}(h get_block_th]h get_block_t}(hjOZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQZmodnameN classnameNjj )}j ]jYc.__mpage_writepagesasbuh1hhjHZubj2)}(h h]h }(hjmZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHZubjI)}(h get_blockh]h get_block}(hj{ZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHZubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbYubjC)}(hFint (*write_folio)(struct folio *folio, struct writeback_control *wbc)h](jf)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjZubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubj)}(hjh]h(}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjI)}(h write_folioh]h write_folio}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubj)}(hjϙh]h)}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]h(}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj )}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubh)}(hhh]jI)}(hfolioh]hfolio}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj [ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj )}j ]jYc.__mpage_writepagesasbuh1hhjZubj2)}(h h]h }(hj.[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubj)}(hjh]h*}(hj<[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjI)}(hfolioh]hfolio}(hjI[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubj)}(hj3h]h,}(hjW[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj2)}(h h]h }(hjd[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubj )}(hjh]hstruct}(hjr[hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubh)}(hhh]jI)}(hwriteback_controlh]hwriteback_control}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj )}j ]jYc.__mpage_writepagesasbuh1hhjZubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjI)}(hwbch]hwbc}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubj)}(hjϙh]h)}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbYubeh}(h]h ]h"]h$]h&]j`jauh1j<hj)Yhhhj;YhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj%Yhhhj;YhMubah}(h]j Yah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj;YhMhj"Yhhubjw)}(hhh]h)}(hQwalk the list of dirty pages of the given address space & writepage() all of themh]hQwalk the list of dirty pages of the given address space & writepage() all of them}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jvhj"Yhhhj;YhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\jj\jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct address_space *mapping`` address space structure to write ``struct writeback_control *wbc`` subtract the number of written pages from ***wbc->nr_to_write** ``get_block_t get_block`` the filesystem's block mapper function. ``int (*write_folio)(struct folio *folio, struct writeback_control *wbc)`` handler to call for each folio before calling mpage_write_folio() **Description** This is a library function, which implements the writepages() address_space_operation. It calls **write_folio** handler for each folio. If the handler returns value > 0, it calls mpage_write_folio() to do the folio writeback.h](h)}(h**Parameters**h]j)}(hj"\h]h Parameters}(hj$\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj \ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj\ubj)}(hhh](j)}(hC``struct address_space *mapping`` address space structure to write h](j)}(h!``struct address_space *mapping``h]j)}(hjA\h]hstruct address_space *mapping}(hjC\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?\ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj;\ubj)}(hhh]h)}(h address space structure to writeh]h address space structure to write}(hjZ\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV\hMhjW\ubah}(h]h ]h"]h$]h&]uh1jhj;\ubeh}(h]h ]h"]h$]h&]uh1jhjV\hMhj8\ubj)}(hb``struct writeback_control *wbc`` subtract the number of written pages from ***wbc->nr_to_write** h](j)}(h!``struct writeback_control *wbc``h]j)}(hjz\h]hstruct writeback_control *wbc}(hj|\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx\ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhjt\ubj)}(hhh]h)}(h?subtract the number of written pages from ***wbc->nr_to_write**h](h*subtract the number of written pages from }(hj\hhhNhNubj)}(h***wbc->nr_to_write**h]h*wbc->nr_to_write}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhjt\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj8\ubj)}(hB``get_block_t get_block`` the filesystem's block mapper function. h](j)}(h``get_block_t get_block``h]j)}(hj\h]hget_block_t get_block}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj\ubj)}(hhh]h)}(h'the filesystem's block mapper function.h]h)the filesystem’s block mapper function.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj8\ubj)}(h``int (*write_folio)(struct folio *folio, struct writeback_control *wbc)`` handler to call for each folio before calling mpage_write_folio() h](j)}(hJ``int (*write_folio)(struct folio *folio, struct writeback_control *wbc)``h]j)}(hj\h]hFint (*write_folio)(struct folio *folio, struct writeback_control *wbc)}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj\ubj)}(hhh]h)}(hAhandler to call for each folio before calling mpage_write_folio()h]hAhandler to call for each folio before calling mpage_write_folio()}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj]ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj8\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubh)}(h**Description**h]j)}(hj6]h]h Description}(hj8]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4]ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj\ubh)}(hThis is a library function, which implements the writepages() address_space_operation. It calls **write_folio** handler for each folio. If the handler returns value > 0, it calls mpage_write_folio() to do the folio writeback.h](h`This is a library function, which implements the writepages() address_space_operation. It calls }(hjL]hhhNhNubj)}(h**write_folio**h]h write_folio}(hjT]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL]ubhr handler for each folio. If the handler returns value > 0, it calls mpage_write_folio() to do the folio writeback.}(hjL]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j generic_permission (C function)c.generic_permissionhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hOint generic_permission (struct mnt_idmap *idmap, struct inode *inode, int mask)h]j)}(hNint generic_permission(struct mnt_idmap *idmap, struct inode *inode, int mask)h](jf)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj]hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hj]hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]hhhj]hMubjC)}(hgeneric_permissionh]jI)}(hgeneric_permissionh]hgeneric_permission}(hj]hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj]hhhj]hMubj=)}(h8(struct mnt_idmap *idmap, struct inode *inode, int mask)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj]ubj2)}(h h]h }(hj]hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]ubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj]hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj )}j ]j)}jj]sbc.generic_permissionasbuh1hhj]ubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjI)}(hidmaph]hidmap}(hj#^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj]ubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj<^hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj8^ubj2)}(h h]h }(hjI^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8^ubh)}(hhh]jI)}(hinodeh]hinode}(hjZ^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjW^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\^modnameN classnameNjj )}j ]j^c.generic_permissionasbuh1hhj8^ubj2)}(h h]h }(hjx^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8^ubjI)}(hinodeh]hinode}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8^ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj]ubjC)}(hint maskh](jf)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj^ubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj^ubjI)}(hmaskh]hmask}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj]ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj]hhhj]hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj]hhhj]hMubah}(h]j]ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj]hMhj]hhubjw)}(hhh]h)}(h2check for access rights on a Posix-like filesystemh]h2check for access rights on a Posix-like filesystem}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jvhj]hhhj]hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj _jj _jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct inode *inode`` inode to check access rights for ``int mask`` right to check for (``MAY_READ``, ``MAY_WRITE``, ``MAY_EXEC``, ``MAY_NOT_BLOCK`` ...) **Description** Used to check for read/write/execute permissions on a file. We use "fsuid" for this, letting us set arbitrary permissions for filesystem access without changing the "normal" uids which are used for other things. generic_permission is rcu-walk aware. It returns -ECHILD in case an rcu-walk request cannot be satisfied (eg. requires blocking or too much complexity). It would then be called again in ref-walk mode. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj_ubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj3_h]hstruct mnt_idmap *idmap}(hj5_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1_ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj-_ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjL_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH_hMhjI_ubah}(h]h ]h"]h$]h&]uh1jhj-_ubeh}(h]h ]h"]h$]h&]uh1jhjH_hMhj*_ubj)}(h9``struct inode *inode`` inode to check access rights for h](j)}(h``struct inode *inode``h]j)}(hjl_h]hstruct inode *inode}(hjn_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj_ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjf_ubj)}(hhh]h)}(h inode to check access rights forh]h inode to check access rights for}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjf_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj*_ubj)}(hc``int mask`` right to check for (``MAY_READ``, ``MAY_WRITE``, ``MAY_EXEC``, ``MAY_NOT_BLOCK`` ...) h](j)}(h ``int mask``h]j)}(hj_h]hint mask}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj_ubj)}(hhh]h)}(hUright to check for (``MAY_READ``, ``MAY_WRITE``, ``MAY_EXEC``, ``MAY_NOT_BLOCK`` ...)h](hright to check for (}(hj_hhhNhNubj)}(h ``MAY_READ``h]hMAY_READ}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh, }(hj_hhhNhNubj)}(h ``MAY_WRITE``h]h MAY_WRITE}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh, }hj_sbj)}(h ``MAY_EXEC``h]hMAY_EXEC}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh, }(hj_hhhNhNubj)}(h``MAY_NOT_BLOCK``h]h MAY_NOT_BLOCK}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh ...)}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj*_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubh)}(h**Description**h]j)}(hj)`h]h Description}(hj+`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'`ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj_ubh)}(hUsed to check for read/write/execute permissions on a file. We use "fsuid" for this, letting us set arbitrary permissions for filesystem access without changing the "normal" uids which are used for other things.h]hUsed to check for read/write/execute permissions on a file. We use “fsuid” for this, letting us set arbitrary permissions for filesystem access without changing the “normal” uids which are used for other things.}(hj?`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj_ubh)}(hgeneric_permission is rcu-walk aware. It returns -ECHILD in case an rcu-walk request cannot be satisfied (eg. requires blocking or too much complexity). It would then be called again in ref-walk mode.h]hgeneric_permission is rcu-walk aware. It returns -ECHILD in case an rcu-walk request cannot be satisfied (eg. requires blocking or too much complexity). It would then be called again in ref-walk mode.}(hjN`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj_ubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hj]`hhhNhNubj)}(h **idmap**h]hidmap}(hje`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]`ubhB. This function will then take care to map the inode according to }(hj]`hhhNhNubj)}(h **idmap**h]hidmap}(hjw`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]`ubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hj]`hhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]`ubh.}(hj]`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_permission (C function)c.inode_permissionhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hMint inode_permission (struct mnt_idmap *idmap, struct inode *inode, int mask)h]j)}(hLint inode_permission(struct mnt_idmap *idmap, struct inode *inode, int mask)h](jf)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj`hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMiubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`hhhj`hMiubjC)}(hinode_permissionh]jI)}(hinode_permissionh]hinode_permission}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj`hhhj`hMiubj=)}(h8(struct mnt_idmap *idmap, struct inode *inode, int mask)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj`ubj2)}(h h]h }(hj ahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`ubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj )}j ]j)}jj`sbc.inode_permissionasbuh1hhj`ubj2)}(h h]h }(hj=ahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`ubj)}(hjh]h*}(hjKahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjI)}(hidmaph]hidmap}(hjXahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjqahhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjmaubj2)}(h h]h }(hj~ahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmaubh)}(hhh]jI)}(hinodeh]hinode}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj )}j ]j9ac.inode_permissionasbuh1hhjmaubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmaubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmaubjI)}(hinodeh]hinode}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmaubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubjC)}(hint maskh](jf)}(hinth]hint}(hjahhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjaubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubjI)}(hmaskh]hmask}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj`hhhj`hMiubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj`hhhj`hMiubah}(h]j`ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj`hMihj`hhubjw)}(hhh]h)}(h(Check for access rights to a given inodeh]h(Check for access rights to a given inode}(hj'bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMihj$bhhubah}(h]h ]h"]h$]h&]uh1jvhj`hhhj`hMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?bjj?bjjjuh1jhhhjVhNhNubj)}(hX **Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct inode *inode`` Inode to check permission on ``int mask`` Right to check for (``MAY_READ``, ``MAY_WRITE``, ``MAY_EXEC``) **Description** Check for read/write/execute permissions on an inode. We use fs[ug]id for this, letting us set arbitrary permissions for filesystem access without changing the "normal" UIDs which are used for other things. When checking for MAY_APPEND, MAY_WRITE must also be set in **mask**.h](h)}(h**Parameters**h]j)}(hjIbh]h Parameters}(hjKbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGbubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMmhjCbubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjhbh]hstruct mnt_idmap *idmap}(hjjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfbubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMjhjbbubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}bhMjhj~bubah}(h]h ]h"]h$]h&]uh1jhjbbubeh}(h]h ]h"]h$]h&]uh1jhj}bhMjhj_bubj)}(h5``struct inode *inode`` Inode to check permission on h](j)}(h``struct inode *inode``h]j)}(hjbh]hstruct inode *inode}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMkhjbubj)}(hhh]h)}(hInode to check permission onh]hInode to check permission on}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMkhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMkhj_bubj)}(hL``int mask`` Right to check for (``MAY_READ``, ``MAY_WRITE``, ``MAY_EXEC``) h](j)}(h ``int mask``h]j)}(hjbh]hint mask}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMlhjbubj)}(hhh]h)}(h>Right to check for (``MAY_READ``, ``MAY_WRITE``, ``MAY_EXEC``)h](hRight to check for (}(hjbhhhNhNubj)}(h ``MAY_READ``h]hMAY_READ}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh, }(hjbhhhNhNubj)}(h ``MAY_WRITE``h]h MAY_WRITE}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh, }hjbsbj)}(h ``MAY_EXEC``h]hMAY_EXEC}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh)}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjbhMlhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMlhj_bubeh}(h]h ]h"]h$]h&]uh1jhjCbubh)}(h**Description**h]j)}(hjKch]h Description}(hjMchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIcubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMnhjCbubh)}(hCheck for read/write/execute permissions on an inode. We use fs[ug]id for this, letting us set arbitrary permissions for filesystem access without changing the "normal" UIDs which are used for other things.h]hCheck for read/write/execute permissions on an inode. We use fs[ug]id for this, letting us set arbitrary permissions for filesystem access without changing the “normal” UIDs which are used for other things.}(hjachhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMmhjCbubh)}(hEWhen checking for MAY_APPEND, MAY_WRITE must also be set in **mask**.h](hah"]h$]h&]uh1j1hjchhhjchMubjC)}(hpath_geth]jI)}(hpath_geth]hpath_get}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjchhhjchMubj=)}(h(const struct path *path)h]jC)}(hconst struct path *pathh](j )}(hjh]hconst}(hjchhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj2)}(h h]h }(hjchhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcubj )}(hjh]hstruct}(hj dhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcubh)}(hhh]jI)}(hpathh]hpath}(hj'dhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$dubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)dmodnameN classnameNjj )}j ]j)}jjcsb c.path_getasbuh1hhjcubj2)}(h h]h }(hjGdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcubj)}(hjh]h*}(hjUdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjI)}(hpathh]hpath}(hjbdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjcubah}(h]h ]h"]h$]h&]j`jauh1j<hjchhhjchMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjchhhjchMubah}(h]jcah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjchMhjchhubjw)}(hhh]h)}(hget a reference to a pathh]hget a reference to a path}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjdhhubah}(h]h ]h"]h$]h&]uh1jvhjchhhjchMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``const struct path *path`` path to get the reference to **Description** Given a path increment the reference count to the dentry and the vfsmount.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjdubj)}(hhh]j)}(h9``const struct path *path`` path to get the reference to h](j)}(h``const struct path *path``h]j)}(hjdh]hconst struct path *path}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjdubj)}(hhh]h)}(hpath to get the reference toh]hpath to get the reference to}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j)}(hjeh]h Description}(hj ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjdubh)}(hJGiven a path increment the reference count to the dentry and the vfsmount.h]hJGiven a path increment the reference count to the dentry and the vfsmount.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j path_put (C function) c.path_puthNtauh1hhjVhhhNhNubj)}(hhh](j)}(h'void path_put (const struct path *path)h]j)}(h&void path_put(const struct path *path)h](jf)}(hvoidh]hvoid}(hjMehhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjIehhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hj\ehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjIehhhj[ehMubjC)}(hpath_puth]jI)}(hpath_puth]hpath_put}(hjnehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjeubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjIehhhj[ehMubj=)}(h(const struct path *path)h]jC)}(hconst struct path *pathh](j )}(hjh]hconst}(hjehhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj )}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubh)}(hhh]jI)}(hpathh]hpath}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj )}j ]j)}jjpesb c.path_putasbuh1hhjeubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjI)}(hpathh]hpath}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubah}(h]h ]h"]h$]h&]j`jauh1j<hjIehhhj[ehMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjEehhhj[ehMubah}(h]j@eah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj[ehMhjBehhubjw)}(hhh]h)}(hput a reference to a pathh]hput a reference to a path}(hj(fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj%fhhubah}(h]h ]h"]h$]h&]uh1jvhjBehhhj[ehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@fjj@fjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``const struct path *path`` path to put the reference to **Description** Given a path decrement the reference count to the dentry and the vfsmount.h](h)}(h**Parameters**h]j)}(hjJfh]h Parameters}(hjLfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHfubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjDfubj)}(hhh]j)}(h9``const struct path *path`` path to put the reference to h](j)}(h``const struct path *path``h]j)}(hjifh]hconst struct path *path}(hjkfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgfubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjcfubj)}(hhh]h)}(hpath to put the reference toh]hpath to put the reference to}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~fhMhjfubah}(h]h ]h"]h$]h&]uh1jhjcfubeh}(h]h ]h"]h$]h&]uh1jhj~fhMhj`fubah}(h]h ]h"]h$]h&]uh1jhjDfubh)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjDfubh)}(hJGiven a path decrement the reference count to the dentry and the vfsmount.h]hJGiven a path decrement the reference count to the dentry and the vfsmount.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjDfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j end_dirop (C function) c.end_dirophNtauh1hhjVhhhNhNubj)}(hhh](j)}(h"void end_dirop (struct dentry *de)h]j)}(h!void end_dirop(struct dentry *de)h](jf)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjfhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfhhhjfhM ubjC)}(h end_diroph]jI)}(h end_diroph]h end_dirop}(hj ghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjfhhhjfhM ubj=)}(h(struct dentry *de)h]jC)}(hstruct dentry *deh](j )}(hjh]hstruct}(hj&ghhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj"gubj2)}(h h]h }(hj3ghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj"gubh)}(hhh]jI)}(hdentryh]hdentry}(hjDghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFgmodnameN classnameNjj )}j ]j)}jj gsb c.end_diropasbuh1hhj"gubj2)}(h h]h }(hjdghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj"gubj)}(hjh]h*}(hjrghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"gubjI)}(hdeh]hde}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"gubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjgubah}(h]h ]h"]h$]h&]j`jauh1j<hjfhhhjfhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjfhhhjfhM ubah}(h]jfah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjfhM hjfhhubjw)}(hhh]h)}(hsignal completion of a diroph]hsignal completion of a dirop}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjghhubah}(h]h ]h"]h$]h&]uh1jvhjfhhhjfhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct dentry *de`` the dentry which was returned by start_dirop or similar. **Description** If the de is an error, nothing happens. Otherwise any lock taken to protect the dentry is dropped and the dentry itself is release (dput()).h](h)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjgubj)}(hhh]j)}(hO``struct dentry *de`` the dentry which was returned by start_dirop or similar. h](j)}(h``struct dentry *de``h]j)}(hjgh]hstruct dentry *de}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjgubj)}(hhh]h)}(h8the dentry which was returned by start_dirop or similar.h]h8the dentry which was returned by start_dirop or similar.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM hjhubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghM hjgubah}(h]h ]h"]h$]h&]uh1jhjgubh)}(h**Description**h]j)}(hj%hh]h Description}(hj'hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#hubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjgubh)}(hIf the de is an error, nothing happens. Otherwise any lock taken to protect the dentry is dropped and the dentry itself is release (dput()).h]hIf the de is an error, nothing happens. Otherwise any lock taken to protect the dentry is dropped and the dentry itself is release (dput()).}(hj;hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #vfs_path_parent_lookup (C function)c.vfs_path_parent_lookuphNtauh1hhjVhhhNhNubj)}(hhh](j)}(hint vfs_path_parent_lookup (struct filename *filename, unsigned int flags, struct path *parent, struct qstr *last, const struct path *root)h]j)}(hint vfs_path_parent_lookup(struct filename *filename, unsigned int flags, struct path *parent, struct qstr *last, const struct path *root)h](jf)}(hinth]hint}(hjjhhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjfhhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjyhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfhhhhjxhhM ubjC)}(hvfs_path_parent_lookuph]jI)}(hvfs_path_parent_lookuph]hvfs_path_parent_lookup}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjfhhhhjxhhM ubj=)}(hp(struct filename *filename, unsigned int flags, struct path *parent, struct qstr *last, const struct path *root)h](jC)}(hstruct filename *filenameh](j )}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubh)}(hhh]jI)}(hfilenameh]hfilename}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj )}j ]j)}jjhsbc.vfs_path_parent_lookupasbuh1hhjhubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjI)}(hfilenameh]hfilename}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjhubjC)}(hunsigned int flagsh](jf)}(hunsignedh]hunsigned}(hjihhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjiubj2)}(h h]h }(hj'ihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubjf)}(hinth]hint}(hj5ihhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjiubj2)}(h h]h }(hjCihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubjI)}(hflagsh]hflags}(hjQihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjhubjC)}(hstruct path *parenth](j )}(hjh]hstruct}(hjjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjfiubj2)}(h h]h }(hjwihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfiubh)}(hhh]jI)}(hpathh]hpath}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj )}j ]jhc.vfs_path_parent_lookupasbuh1hhjfiubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfiubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfiubjI)}(hparenth]hparent}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfiubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjhubjC)}(hstruct qstr *lasth](j )}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjiubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubh)}(hhh]jI)}(hqstrh]hqstr}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj )}j ]jhc.vfs_path_parent_lookupasbuh1hhjiubj2)}(h h]h }(hjjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubj)}(hjh]h*}(hj$jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjI)}(hlasth]hlast}(hj1jhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjhubjC)}(hconst struct path *rooth](j )}(hjh]hconst}(hjJjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFjubj2)}(h h]h }(hjWjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFjubj )}(hjh]hstruct}(hjejhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFjubj2)}(h h]h }(hjrjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFjubh)}(hhh]jI)}(hpathh]hpath}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj )}j ]jhc.vfs_path_parent_lookupasbuh1hhjFjubj2)}(h h]h }(hjjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFjubjI)}(hrooth]hroot}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjhubeh}(h]h ]h"]h$]h&]j`jauh1j<hjfhhhhjxhhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjbhhhhjxhhM ubah}(h]j]hah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjxhhM hj_hhhubjw)}(hhh]h)}(h7lookup a parent path relative to a dentry-vfsmount pairh]h7lookup a parent path relative to a dentry-vfsmount pair}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjjhhubah}(h]h ]h"]h$]h&]uh1jvhj_hhhhjxhhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct filename *filename`` filename structure ``unsigned int flags`` lookup flags ``struct path *parent`` pointer to struct path to fill ``struct qstr *last`` last component ``const struct path *root`` pointer to struct path of the base directoryh](h)}(h**Parameters**h]j)}(hjkh]h Parameters}(hj khhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjkubj)}(hhh](j)}(h1``struct filename *filename`` filename structure h](j)}(h``struct filename *filename``h]j)}(hj'kh]hstruct filename *filename}(hj)khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%kubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj!kubj)}(hhh]h)}(hfilename structureh]hfilename structure}(hj@khhhNhNubah}(h]h ]h"]h$]h&]uh1hhjah"]h$]h&]uh1j1hjalhhhjslhM ubjC)}(hvfs_path_lookuph]jI)}(hvfs_path_lookuph]hvfs_path_lookup}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjalhhhjslhM ubj=)}(hf(struct dentry *dentry, struct vfsmount *mnt, const char *name, unsigned int flags, struct path *path)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjlubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjlubh)}(hhh]jI)}(hdentryh]hdentry}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj )}j ]j)}jjlsbc.vfs_path_lookupasbuh1hhjlubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjlubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjI)}(hdentryh]hdentry}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjlubjC)}(hstruct vfsmount *mnth](j )}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjmubj2)}(h h]h }(hj!mhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hj2mhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4mmodnameN classnameNjj )}j ]jlc.vfs_path_lookupasbuh1hhjmubj2)}(h h]h }(hjPmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubj)}(hjh]h*}(hj^mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjI)}(hmnth]hmnt}(hjkmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjlubjC)}(hconst char *nameh](j )}(hjh]hconst}(hjmhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjmubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubjf)}(hcharh]hchar}(hjmhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjmubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjI)}(hnameh]hname}(hjmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjlubjC)}(hunsigned int flagsh](jf)}(hunsignedh]hunsigned}(hjmhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjmubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubjf)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjmubj2)}(h h]h }(hj nhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubjI)}(hflagsh]hflags}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjlubjC)}(hstruct path *pathh](j )}(hjh]hstruct}(hj2nhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj.nubj2)}(h h]h }(hj?nhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.nubh)}(hhh]jI)}(hpathh]hpath}(hjPnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRnmodnameN classnameNjj )}j ]jlc.vfs_path_lookupasbuh1hhj.nubj2)}(h h]h }(hjnnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.nubj)}(hjh]h*}(hj|nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.nubjI)}(hpathh]hpath}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.nubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjlubeh}(h]h ]h"]h$]h&]j`jauh1j<hjalhhhjslhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj]lhhhjslhM ubah}(h]jXlah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjslhM hjZlhhubjw)}(hhh]h)}(h5lookup a file path relative to a dentry-vfsmount pairh]h5lookup a file path relative to a dentry-vfsmount pair}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjnhhubah}(h]h ]h"]h$]h&]uh1jvhjZlhhhjslhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1jhhhjVhNhNubj)}(hX&**Parameters** ``struct dentry *dentry`` pointer to dentry of the base directory ``struct vfsmount *mnt`` pointer to vfs mount of the base directory ``const char *name`` pointer to file name ``unsigned int flags`` lookup flags ``struct path *path`` pointer to struct path to fillh](h)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjnubj)}(hhh](j)}(hB``struct dentry *dentry`` pointer to dentry of the base directory h](j)}(h``struct dentry *dentry``h]j)}(hjnh]hstruct dentry *dentry}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjnubj)}(hhh]h)}(h'pointer to dentry of the base directoryh]h'pointer to dentry of the base directory}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ohM hj oubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhj ohM hjnubj)}(hD``struct vfsmount *mnt`` pointer to vfs mount of the base directory h](j)}(h``struct vfsmount *mnt``h]j)}(hj-oh]hstruct vfsmount *mnt}(hj/ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+oubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj'oubj)}(hhh]h)}(h*pointer to vfs mount of the base directoryh]h*pointer to vfs mount of the base directory}(hjFohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBohM hjCoubah}(h]h ]h"]h$]h&]uh1jhj'oubeh}(h]h ]h"]h$]h&]uh1jhjBohM hjnubj)}(h*``const char *name`` pointer to file name h](j)}(h``const char *name``h]j)}(hjfoh]hconst char *name}(hjhohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdoubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj`oubj)}(hhh]h)}(hpointer to file nameh]hpointer to file name}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ohM hj|oubah}(h]h ]h"]h$]h&]uh1jhj`oubeh}(h]h ]h"]h$]h&]uh1jhj{ohM hjnubj)}(h$``unsigned int flags`` lookup flags h](j)}(h``unsigned int flags``h]j)}(hjoh]hunsigned int flags}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjoubj)}(hhh]h)}(h lookup flagsh]h lookup flags}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM hjnubj)}(h4``struct path *path`` pointer to struct path to fillh](j)}(h``struct path *path``h]j)}(hjoh]hstruct path *path}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjoubj)}(hhh]h)}(hpointer to struct path to fillh]hpointer to struct path to fill}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM hjnubeh}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j try_lookup_noperm (C function)c.try_lookup_nopermhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hJstruct dentry * try_lookup_noperm (struct qstr *name, struct dentry *base)h]j)}(hHstruct dentry *try_lookup_noperm(struct qstr *name, struct dentry *base)h](j )}(hjh]hstruct}(hj2phhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj.phhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM5 ubj2)}(h h]h }(hj@phhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.phhhj?phM5 ubh)}(hhh]jI)}(hdentryh]hdentry}(hjQphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjNpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSpmodnameN classnameNjj )}j ]j)}jtry_lookup_nopermsbc.try_lookup_nopermasbuh1hhj.phhhj?phM5 ubj2)}(h h]h }(hjrphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.phhhj?phM5 ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.phhhj?phM5 ubjC)}(htry_lookup_nopermh]jI)}(hjoph]htry_lookup_noperm}(hjphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj.phhhj?phM5 ubj=)}(h((struct qstr *name, struct dentry *base)h](jC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjphhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjpubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubh)}(hhh]jI)}(hqstrh]hqstr}(hjphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj )}j ]jmpc.try_lookup_nopermasbuh1hhjpubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjI)}(hnameh]hname}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjpubjC)}(hstruct dentry *baseh](j )}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjqubj2)}(h h]h }(hj)qhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqubh)}(hhh]jI)}(hdentryh]hdentry}(hj:qhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7qubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjah"]h$]h&]uh1j1hjqubj)}(hjh]h*}(hjfqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjI)}(hbaseh]hbase}(hjsqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjqubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjpubeh}(h]h ]h"]h$]h&]j`jauh1j<hj.phhhj?phM5 ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj*phhhj?phM5 ubah}(h]j%pah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj?phM5 hj'phhubjw)}(hhh]h)}(h5filesystem helper to lookup single pathname componenth]h5filesystem helper to lookup single pathname component}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM5 hjqhhubah}(h]h ]h"]h$]h&]uh1jvhj'phhhj?phM5 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjVhNhNubj)}(hX?**Parameters** ``struct qstr *name`` qstr storing pathname component to lookup ``struct dentry *base`` base directory to lookup from **Description** Look up a dentry by name in the dcache, returning NULL if it does not currently exist or an error if there is a problem with the name. The function does not try to create a dentry and if one is found it doesn't try to revalidate it. Note that this routine is purely a helper for filesystem usage and should not be called by generic code. It does no permission checking. No locks need be held - only a counted reference to **base** is needed. **Return** - ref-counted dentry on success, or - ``NULL`` if name could not be found, or - ERR_PTR(-EACCES) if name is dot or dotdot or contains a slash or nul, or - ERR_PTR() if fs provide ->d_hash, and this returned an error.h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM9 hjqubj)}(hhh](j)}(h@``struct qstr *name`` qstr storing pathname component to lookup h](j)}(h``struct qstr *name``h]j)}(hjqh]hstruct qstr *name}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM6 hjqubj)}(hhh]h)}(h)qstr storing pathname component to lookuph]h)qstr storing pathname component to lookup}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM6 hjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhM6 hjqubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hjrh]hstruct dentry *base}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM7 hjrubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hj0rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,rhM7 hj-rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhj,rhM7 hjqubeh}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hjRrh]h Description}(hjTrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPrubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM9 hjqubh)}(hLook up a dentry by name in the dcache, returning NULL if it does not currently exist or an error if there is a problem with the name. The function does not try to create a dentry and if one is found it doesn't try to revalidate it.h]hLook up a dentry by name in the dcache, returning NULL if it does not currently exist or an error if there is a problem with the name. The function does not try to create a dentry and if one is found it doesn’t try to revalidate it.}(hjhrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM8 hjqubh)}(hNote that this routine is purely a helper for filesystem usage and should not be called by generic code. It does no permission checking.h]hNote that this routine is purely a helper for filesystem usage and should not be called by generic code. It does no permission checking.}(hjwrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM= hjqubh)}(hGNo locks need be held - only a counted reference to **base** is needed.h](h4No locks need be held - only a counted reference to }(hjrhhhNhNubj)}(h**base**h]hbase}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh is needed.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM@ hjqubh)}(h **Return**h]j)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMB hjqubjD)}(hhh](jD)}(h!ref-counted dentry on success, orh]h)}(hjrh]h!ref-counted dentry on success, or}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMC hjrubah}(h]h ]h"]h$]h&]uh1jDhjrubjD)}(h'``NULL`` if name could not be found, orh]h)}(hjrh](j)}(h``NULL``h]hNULL}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh if name could not be found, or}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMD hjrubah}(h]h ]h"]h$]h&]uh1jDhjrubjD)}(hHERR_PTR(-EACCES) if name is dot or dotdot or contains a slash or nul, orh]h)}(hjsh]hHERR_PTR(-EACCES) if name is dot or dotdot or contains a slash or nul, or}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chME hjsubah}(h]h ]h"]h$]h&]uh1jDhjrubjD)}(h=ERR_PTR() if fs provide ->d_hash, and this returned an error.h]h)}(hjsh]h=ERR_PTR() if fs provide ->d_hash, and this returned an error.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMF hjsubah}(h]h ]h"]h$]h&]uh1jDhjrubeh}(h]h ]h"]h$]h&]jDj!uh1jDhjrhMC hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j lookup_noperm (C function)c.lookup_nopermhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hFstruct dentry * lookup_noperm (struct qstr *name, struct dentry *base)h]j)}(hDstruct dentry *lookup_noperm(struct qstr *name, struct dentry *base)h](j )}(hjh]hstruct}(hjVshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRshhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMV ubj2)}(h h]h }(hjdshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRshhhjcshMV ubh)}(hhh]jI)}(hdentryh]hdentry}(hjushhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwsmodnameN classnameNjj )}j ]j)}j lookup_nopermsbc.lookup_nopermasbuh1hhjRshhhjcshMV ubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRshhhjcshMV ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRshhhjcshMV ubjC)}(h lookup_nopermh]jI)}(hjsh]h lookup_noperm}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjRshhhjcshMV ubj=)}(h((struct qstr *name, struct dentry *base)h](jC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjsubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubh)}(hhh]jI)}(hqstrh]hqstr}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj )}j ]jsc.lookup_nopermasbuh1hhjsubj2)}(h h]h }(hj thhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjI)}(hnameh]hname}(hj'thhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjsubjC)}(hstruct dentry *baseh](j )}(hjh]hstruct}(hj@thhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjah"]h$]h&]uh1j1hjah"]h$]h&]uh1j1hji_rwsem.h](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMZ hjtubj)}(hhh](j)}(h@``struct qstr *name`` qstr storing pathname component to lookup h](j)}(h``struct qstr *name``h]j)}(hjuh]hstruct qstr *name}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMW hjtubj)}(hhh]h)}(h)qstr storing pathname component to lookuph]h)qstr storing pathname component to lookup}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMW hjuubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjuhMW hjtubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hj;uh]hstruct dentry *base}(hj=uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9uubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMX hj5uubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hjTuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPuhMX hjQuubah}(h]h ]h"]h$]h&]uh1jhj5uubeh}(h]h ]h"]h$]h&]uh1jhjPuhMX hjtubeh}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j)}(hjvuh]h Description}(hjxuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtuubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMZ hjtubh)}(hNote that this routine is purely a helper for filesystem usage and should not be called by generic code. It does no permission checking.h]hNote that this routine is purely a helper for filesystem usage and should not be called by generic code. It does no permission checking.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMY hjtubh)}(h#The caller must hold base->i_rwsem.h]h#The caller must hold base->i_rwsem.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM\ hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j lookup_one (C function) c.lookup_onehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h\struct dentry * lookup_one (struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h]j)}(hZstruct dentry *lookup_one(struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h](j )}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjuhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMp ubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjuhhhjuhMp ubh)}(hhh]jI)}(hdentryh]hdentry}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj )}j ]j)}j lookup_onesb c.lookup_oneasbuh1hhjuhhhjuhMp ubj2)}(h h]h }(hj vhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjuhhhjuhMp ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjuhMp ubjC)}(h lookup_oneh]jI)}(hjvh]h lookup_one}(hj)vhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%vubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjuhhhjuhMp ubj=)}(hA(struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjDvhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj@vubj2)}(h h]h }(hjQvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@vubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjbvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdvmodnameN classnameNjj )}j ]jv c.lookup_oneasbuh1hhj@vubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@vubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@vubjI)}(hidmaph]hidmap}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@vubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjah"]h$]h&]uh1j1hjvubh)}(hhh]jI)}(hqstrh]hqstr}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj )}j ]jv c.lookup_oneasbuh1hhjvubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjI)}(hnameh]hname}(hj whhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjah"]h$]h&]uh1j1hj wubh)}(hhh]jI)}(hdentryh]hdentry}(hjBwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDwmodnameN classnameNjj )}j ]jv c.lookup_oneasbuh1hhj wubj2)}(h h]h }(hj`whhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj wubj)}(hjh]h*}(hjnwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj wubjI)}(hbaseh]hbase}(hj{whhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj wubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhji_rwsem.h](h)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMt hjwubj)}(hhh](j)}(hL``struct mnt_idmap *idmap`` idmap of the mount the lookup is performed from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjwh]hstruct mnt_idmap *idmap}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMq hjwubj)}(hhh]h)}(h/idmap of the mount the lookup is performed fromh]h/idmap of the mount the lookup is performed from}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMq hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMq hjwubj)}(h@``struct qstr *name`` qstr holding pathname component to lookup h](j)}(h``struct qstr *name``h]j)}(hjxh]hstruct qstr *name}(hj!xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMr hjxubj)}(hhh]h)}(h)qstr holding pathname component to lookuph]h)qstr holding pathname component to lookup}(hj8xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4xhMr hj5xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj4xhMr hjwubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hjXxh]hstruct dentry *base}(hjZxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVxubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMs hjRxubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hjqxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmxhMs hjnxubah}(h]h ]h"]h$]h&]uh1jhjRxubeh}(h]h ]h"]h$]h&]uh1jhjmxhMs hjwubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMu hjwubh)}(hGThis can be used for in-kernel filesystem clients such as file servers.h]hGThis can be used for in-kernel filesystem clients such as file servers.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMt hjwubh)}(h#The caller must hold base->i_rwsem.h]h#The caller must hold base->i_rwsem.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMv hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  lookup_one_unlocked (C function)c.lookup_one_unlockedhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hestruct dentry * lookup_one_unlocked (struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h]j)}(hcstruct dentry *lookup_one_unlocked(struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h](j )}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjxhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxhhhjxhM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj )}j ]j)}jlookup_one_unlockedsbc.lookup_one_unlockedasbuh1hhjxhhhjxhM ubj2)}(h h]h }(hj'yhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxhhhjxhM ubj)}(hjh]h*}(hj5yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjxhM ubjC)}(hlookup_one_unlockedh]jI)}(hj$yh]hlookup_one_unlocked}(hjFyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjByubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjxhhhjxhM ubj=)}(hA(struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjayhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj]yubj2)}(h h]h }(hjnyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]yubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|yubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj )}j ]j"yc.lookup_one_unlockedasbuh1hhj]yubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]yubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]yubjI)}(hidmaph]hidmap}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]yubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjYyubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjyubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyubh)}(hhh]jI)}(hqstrh]hqstr}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj )}j ]j"yc.lookup_one_unlockedasbuh1hhjyubj2)}(h h]h }(hj zhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjI)}(hnameh]hname}(hj(zhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjYyubjC)}(hstruct dentry *baseh](j )}(hjh]hstruct}(hjAzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj=zubj2)}(h h]h }(hjNzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=zubh)}(hhh]jI)}(hdentryh]hdentry}(hj_zhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\zubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjazmodnameN classnameNjj )}j ]j"yc.lookup_one_unlockedasbuh1hhj=zubj2)}(h h]h }(hj}zhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=zubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=zubjI)}(hbaseh]hbase}(hjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=zubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjYyubeh}(h]h ]h"]h$]h&]j`jauh1j<hjxhhhjxhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjxhhhjxhM ubah}(h]jxah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjxhM hjxhhubjw)}(hhh]h)}(h lookup single pathname componenth]h lookup single pathname component}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjzhhubah}(h]h ]h"]h$]h&]uh1jvhjxhhhjxhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhjVhNhNubj)}(hXm**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the lookup is performed from ``struct qstr *name`` qstr olding pathname component to lookup ``struct dentry *base`` base directory to lookup from **Description** This can be used for in-kernel filesystem clients such as file servers. Unlike lookup_one, it should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary. **Return** - A dentry, possibly negative, or - same errors as try_lookup_noperm() or - ERR_PTR(-ENOENT) if parent has been removed, or - ERR_PTR(-EACCES) if parent directory is not searchable.h](h)}(h**Parameters**h]j)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjzubj)}(hhh](j)}(hL``struct mnt_idmap *idmap`` idmap of the mount the lookup is performed from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj{h]hstruct mnt_idmap *idmap}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjzubj)}(hhh]h)}(h/idmap of the mount the lookup is performed fromh]h/idmap of the mount the lookup is performed from}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hM hj{ubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj{hM hjzubj)}(h?``struct qstr *name`` qstr olding pathname component to lookup h](j)}(h``struct qstr *name``h]j)}(hj<{h]hstruct qstr *name}(hj>{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:{ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj6{ubj)}(hhh]h)}(h(qstr olding pathname component to lookuph]h(qstr olding pathname component to lookup}(hjU{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ{hM hjR{ubah}(h]h ]h"]h$]h&]uh1jhj6{ubeh}(h]h ]h"]h$]h&]uh1jhjQ{hM hjzubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hju{h]hstruct dentry *base}(hjw{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs{ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjo{ubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hM hj{ubah}(h]h ]h"]h$]h&]uh1jhjo{ubeh}(h]h ]h"]h$]h&]uh1jhj{hM hjzubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjzubh)}(hGThis can be used for in-kernel filesystem clients such as file servers.h]hGThis can be used for in-kernel filesystem clients such as file servers.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjzubh)}(hvUnlike lookup_one, it should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary.h]hvUnlike lookup_one, it should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjzubh)}(h **Return**h]j)}(hj{h]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjzubjD)}(hhh](jD)}(hA dentry, possibly negative, orh]h)}(hj|h]hA dentry, possibly negative, or}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj{ubah}(h]h ]h"]h$]h&]uh1jDhj{ubjD)}(h%same errors as try_lookup_noperm() orh]h)}(hj|h]h%same errors as try_lookup_noperm() or}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|ubah}(h]h ]h"]h$]h&]uh1jDhj{ubjD)}(h/ERR_PTR(-ENOENT) if parent has been removed, orh]h)}(hj1|h]h/ERR_PTR(-ENOENT) if parent has been removed, or}(hj3|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj/|ubah}(h]h ]h"]h$]h&]uh1jDhj{ubjD)}(h7ERR_PTR(-EACCES) if parent directory is not searchable.h]h)}(hjI|h]h7ERR_PTR(-EACCES) if parent directory is not searchable.}(hjK|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjG|ubah}(h]h ]h"]h$]h&]uh1jDhj{ubeh}(h]h ]h"]h$]h&]jDj!uh1jDhj|hM hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j )lookup_one_positive_killable (C function)c.lookup_one_positive_killablehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hnstruct dentry * lookup_one_positive_killable (struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h]j)}(hlstruct dentry *lookup_one_positive_killable(struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h](j )}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hj|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|hhhj|hM ubh)}(hhh]jI)}(hdentryh]hdentry}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj )}j ]j)}jlookup_one_positive_killablesbc.lookup_one_positive_killableasbuh1hhj|hhhj|hM ubj2)}(h h]h }(hj|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|hhhj|hM ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj|hM ubjC)}(hlookup_one_positive_killableh]jI)}(hj|h]hlookup_one_positive_killable}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj|hhhj|hM ubj=)}(hA(struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|ubj2)}(h h]h }(hj }hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|ubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj )}j ]j|c.lookup_one_positive_killableasbuh1hhj|ubj2)}(h h]h }(hj;}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|ubj)}(hjh]h*}(hjI}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjI)}(hidmaph]hidmap}(hjV}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj|ubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjo}hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjk}ubj2)}(h h]h }(hj|}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjk}ubh)}(hhh]jI)}(hqstrh]hqstr}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj )}j ]j|c.lookup_one_positive_killableasbuh1hhjk}ubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjk}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk}ubjI)}(hnameh]hname}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjk}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj|ubjC)}(hstruct dentry *baseh](j )}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubh)}(hhh]jI)}(hdentryh]hdentry}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj )}j ]j|c.lookup_one_positive_killableasbuh1hhj}ubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubj)}(hjh]h*}(hj)~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjI)}(hbaseh]hbase}(hj6~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj|ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj|hhhj|hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj}|hhhj|hM ubah}(h]jx|ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj|hM hjz|hhubjw)}(hhh]h)}(h lookup single pathname componenth]h lookup single pathname component}(hj`~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj]~hhubah}(h]h ]h"]h$]h&]uh1jvhjz|hhhj|hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjx~jjx~jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the lookup is performed from ``struct qstr *name`` qstr olding pathname component to lookup ``struct dentry *base`` base directory to lookup from **Description** This helper will yield ERR_PTR(-ENOENT) on negatives. The helper returns known positive or ERR_PTR(). This is what most of the users want. Note that pinned negative with unlocked parent _can_ become positive at any time, so callers of lookup_one_unlocked() need to be very careful; pinned positives have >d_inode stable, so this one avoids such problems. This can be used for in-kernel filesystem clients such as file servers. It should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary. If a fatal signal is pending or delivered, it will return ``-EINTR`` if the lock is needed. **Return** A dentry, possibly negative, or - same errors as lookup_one_unlocked() or - ERR_PTR(-EINTR) if a fatal signal is pending.h](h)}(h**Parameters**h]j)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|~ubj)}(hhh](j)}(hL``struct mnt_idmap *idmap`` idmap of the mount the lookup is performed from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj~h]hstruct mnt_idmap *idmap}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj~ubj)}(hhh]h)}(h/idmap of the mount the lookup is performed fromh]h/idmap of the mount the lookup is performed from}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM hj~ubj)}(h?``struct qstr *name`` qstr olding pathname component to lookup h](j)}(h``struct qstr *name``h]j)}(hj~h]hstruct qstr *name}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj~ubj)}(hhh]h)}(h(qstr olding pathname component to lookuph]h(qstr olding pathname component to lookup}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM hj~ubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hjh]hstruct dentry *base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj ubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM hj~ubeh}(h]h ]h"]h$]h&]uh1jhj|~ubh)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|~ubh)}(hThis helper will yield ERR_PTR(-ENOENT) on negatives. The helper returns known positive or ERR_PTR(). This is what most of the users want.h]hThis helper will yield ERR_PTR(-ENOENT) on negatives. The helper returns known positive or ERR_PTR(). This is what most of the users want.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|~ubh)}(hNote that pinned negative with unlocked parent _can_ become positive at any time, so callers of lookup_one_unlocked() need to be very careful; pinned positives have >d_inode stable, so this one avoids such problems.h]hNote that pinned negative with unlocked parent _can_ become positive at any time, so callers of lookup_one_unlocked() need to be very careful; pinned positives have >d_inode stable, so this one avoids such problems.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|~ubh)}(hGThis can be used for in-kernel filesystem clients such as file servers.h]hGThis can be used for in-kernel filesystem clients such as file servers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|~ubh)}(hIt should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary. If a fatal signal is pending or delivered, it will return ``-EINTR`` if the lock is needed.h](hIt should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary. If a fatal signal is pending or delivered, it will return }(hjhhhNhNubj)}(h ``-EINTR``h]h-EINTR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the lock is needed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|~ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|~ubh)}(hyA dentry, possibly negative, or - same errors as lookup_one_unlocked() or - ERR_PTR(-EINTR) if a fatal signal is pending.h]hyA dentry, possibly negative, or - same errors as lookup_one_unlocked() or - ERR_PTR(-EINTR) if a fatal signal is pending.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj|~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j )lookup_one_positive_unlocked (C function)c.lookup_one_positive_unlockedhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hnstruct dentry * lookup_one_positive_unlocked (struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h]j)}(hlstruct dentry *lookup_one_positive_unlocked(struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jlookup_one_positive_unlockedsbc.lookup_one_positive_unlockedasbuh1hhjhhhjhM ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubjC)}(hlookup_one_positive_unlockedh]jI)}(hj6h]hlookup_one_positive_unlocked}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(hA(struct mnt_idmap *idmap, struct qstr *name, struct dentry *base)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjoubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjoubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j4c.lookup_one_positive_unlockedasbuh1hhjoubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjI)}(hidmaph]hidmap}(hjʀhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjoubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjkubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj߀ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj߀ubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j4c.lookup_one_positive_unlockedasbuh1hhj߀ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj߀ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߀ubjI)}(hnameh]hname}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj߀ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjkubjC)}(hstruct dentry *baseh](j )}(hjh]hstruct}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubh)}(hhh]jI)}(hdentryh]hdentry}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj )}j ]j4c.lookup_one_positive_unlockedasbuh1hhjOubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjI)}(hbaseh]hbase}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjkubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(h lookup single pathname componenth]h lookup single pathname component}(hjԁhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjсhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXL**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the lookup is performed from ``struct qstr *name`` qstr holding pathname component to lookup ``struct dentry *base`` base directory to lookup from **Description** This helper will yield ERR_PTR(-ENOENT) on negatives. The helper returns known positive or ERR_PTR(). This is what most of the users want. Note that pinned negative with unlocked parent _can_ become positive at any time, so callers of lookup_one_unlocked() need to be very careful; pinned positives have >d_inode stable, so this one avoids such problems. This can be used for in-kernel filesystem clients such as file servers. The helper should be called without i_rwsem held. **Return** A positive dentry, or - ERR_PTR(-ENOENT) if the name could not be found, or - same errors as lookup_one_unlocked().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh](j)}(hL``struct mnt_idmap *idmap`` idmap of the mount the lookup is performed from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(h/idmap of the mount the lookup is performed fromh]h/idmap of the mount the lookup is performed from}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM hj ubj)}(h@``struct qstr *name`` qstr holding pathname component to lookup h](j)}(h``struct qstr *name``h]j)}(hjNh]hstruct qstr *name}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjHubj)}(hhh]h)}(h)qstr holding pathname component to lookuph]h)qstr holding pathname component to lookup}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchM hj ubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hjh]hstruct dentry *base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj‚h]h Description}(hjĂhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(hThis helper will yield ERR_PTR(-ENOENT) on negatives. The helper returns known positive or ERR_PTR(). This is what most of the users want.h]hThis helper will yield ERR_PTR(-ENOENT) on negatives. The helper returns known positive or ERR_PTR(). This is what most of the users want.}(hj؂hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(hNote that pinned negative with unlocked parent _can_ become positive at any time, so callers of lookup_one_unlocked() need to be very careful; pinned positives have >d_inode stable, so this one avoids such problems.h]hNote that pinned negative with unlocked parent _can_ become positive at any time, so callers of lookup_one_unlocked() need to be very careful; pinned positives have >d_inode stable, so this one avoids such problems.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(hGThis can be used for in-kernel filesystem clients such as file servers.h]hGThis can be used for in-kernel filesystem clients such as file servers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(h1The helper should be called without i_rwsem held.h]h1The helper should be called without i_rwsem held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(hsA positive dentry, or - ERR_PTR(-ENOENT) if the name could not be found, or - same errors as lookup_one_unlocked().h]hsA positive dentry, or - ERR_PTR(-ENOENT) if the name could not be found, or - same errors as lookup_one_unlocked().}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #lookup_noperm_unlocked (C function)c.lookup_noperm_unlockedhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hOstruct dentry * lookup_noperm_unlocked (struct qstr *name, struct dentry *base)h]j)}(hMstruct dentry *lookup_noperm_unlocked(struct qstr *name, struct dentry *base)h](j )}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjWhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWhhhjhhM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj )}j ]j)}jlookup_noperm_unlockedsbc.lookup_noperm_unlockedasbuh1hhjWhhhjhhM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWhhhjhhM ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjhhM ubjC)}(hlookup_noperm_unlockedh]jI)}(hjh]hlookup_noperm_unlocked}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjWhhhjhhM ubj=)}(h((struct qstr *name, struct dentry *base)h](jC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjՃhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjуubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjуubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.lookup_noperm_unlockedasbuh1hhjуubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjуubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjуubjI)}(hnameh]hname}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjуubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj̓ubjC)}(hstruct dentry *baseh](j )}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjAubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubh)}(hhh]jI)}(hdentryh]hdentry}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj )}j ]jc.lookup_noperm_unlockedasbuh1hhjAubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjI)}(hbaseh]hbase}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj̓ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjWhhhjhhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjShhhjhhM ubah}(h]jNah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhhM hjPhhubjw)}(hhh]h)}(h5filesystem helper to lookup single pathname componenth]h5filesystem helper to lookup single pathname component}(hjƄhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjÄhhubah}(h]h ]h"]h$]h&]uh1jvhjPhhhjhhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjބjjބjjjuh1jhhhjVhNhNubj)}(hXl**Parameters** ``struct qstr *name`` pathname component to lookup ``struct dentry *base`` base directory to lookup from **Description** Note that this routine is purely a helper for filesystem usage and should not be called by generic code. It does no permission checking. Unlike lookup_noperm(), it should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary. Unlike try_lookup_noperm() it *does* revalidate the dentry if it already existed. **Return** A dentry, possibly negative, or - ERR_PTR(-ENOENT) if parent has been removed, or - same errors as try_lookup_noperm()h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh](j)}(h3``struct qstr *name`` pathname component to lookup h](j)}(h``struct qstr *name``h]j)}(hjh]hstruct qstr *name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(hpathname component to lookuph]hpathname component to lookup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hj@h]hstruct dentry *base}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj:ubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(hNote that this routine is purely a helper for filesystem usage and should not be called by generic code. It does no permission checking.h]hNote that this routine is purely a helper for filesystem usage and should not be called by generic code. It does no permission checking.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(h{Unlike lookup_noperm(), it should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary.h]h{Unlike lookup_noperm(), it should be called without the parent i_rwsem held, and will take the i_rwsem itself if necessary.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(hQUnlike try_lookup_noperm() it *does* revalidate the dentry if it already existed.h](hUnlike try_lookup_noperm() it }(hjhhhNhNubj )}(h*does*h]hdoes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~ hjubh- revalidate the dentry if it already existed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(h **Return**h]j)}(hj҅h]hReturn}(hjԅhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЅubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubh)}(hvA dentry, possibly negative, or - ERR_PTR(-ENOENT) if parent has been removed, or - same errors as try_lookup_noperm()h]hvA dentry, possibly negative, or - ERR_PTR(-ENOENT) if parent has been removed, or - same errors as try_lookup_noperm()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j start_creating (C function)c.start_creatinghNtauh1hhjVhhhNhNubj)}(hhh](j)}(hbstruct dentry * start_creating (struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h]j)}(h`struct dentry *start_creating(struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM8 ubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj$hM8 ubh)}(hhh]jI)}(hdentryh]hdentry}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj )}j ]j)}jstart_creatingsbc.start_creatingasbuh1hhjhhhj$hM8 ubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj$hM8 ubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj$hM8 ubjC)}(hstart_creatingh]jI)}(hjTh]hstart_creating}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj$hM8 ubj=)}(hC(struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jRc.start_creatingasbuh1hhjubj2)}(h h]h }(hj͆hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjۆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj )}j ]jRc.start_creatingasbuh1hhjubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjmubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jRc.start_creatingasbuh1hhjmubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjI)}(hnameh]hname}(hjȇhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj$hM8 ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj$hM8 ubah}(h]j ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj$hM8 hj hhubjw)}(hhh]h)}(h7prepare to create a given name with permission checkingh]h7prepare to create a given name with permission checking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM8 hjhhubah}(h]h ]h"]h$]h&]uh1jvhj hhhj$hM8 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjVhNhNubj)}(hX/**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *parent`` directory in which to prepare to create the name ``struct qstr *name`` the name to be created **Description** Locks are taken and a lookup is performed prior to creating an object in a directory. Permission checking (MAY_EXEC) is performed against **idmap**. If the name already exists, a positive dentry is returned, so behaviour is similar to O_CREAT without O_EXCL, which doesn't fail with -EEXIST. **Return** a negative or positive dentry, or an error.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM< hjubj)}(hhh](j)}(h/``struct mnt_idmap *idmap`` idmap of the mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj3h]hstruct mnt_idmap *idmap}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM9 hj-ubj)}(hhh]h)}(hidmap of the mounth]hidmap of the mount}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM9 hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhM9 hj*ubj)}(hK``struct dentry *parent`` directory in which to prepare to create the name h](j)}(h``struct dentry *parent``h]j)}(hjlh]hstruct dentry *parent}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM: hjfubj)}(hhh]h)}(h0directory in which to prepare to create the nameh]h0directory in which to prepare to create the name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM: hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM: hj*ubj)}(h-``struct qstr *name`` the name to be created h](j)}(h``struct qstr *name``h]j)}(hjh]hstruct qstr *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM; hjubj)}(hhh]h)}(hthe name to be createdh]hthe name to be created}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM; hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM; hj*ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjވubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM= hjubh)}(hLocks are taken and a lookup is performed prior to creating an object in a directory. Permission checking (MAY_EXEC) is performed against **idmap**.h](hLocks are taken and a lookup is performed prior to creating an object in a directory. Permission checking (MAY_EXEC) is performed against }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM< hjubh)}(hIf the name already exists, a positive dentry is returned, so behaviour is similar to O_CREAT without O_EXCL, which doesn't fail with -EEXIST.h]hIf the name already exists, a positive dentry is returned, so behaviour is similar to O_CREAT without O_EXCL, which doesn’t fail with -EEXIST.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM@ hjubh)}(h **Return**h]j)}(hj(h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMD hjubh)}(h+a negative or positive dentry, or an error.h]h+a negative or positive dentry, or an error.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chME hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j start_removing (C function)c.start_removinghNtauh1hhjVhhhNhNubj)}(hhh](j)}(hbstruct dentry * start_removing (struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h]j)}(h`struct dentry *start_removing(struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h](j )}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjihhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMS ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjihhhjzhMS ubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jstart_removingsbc.start_removingasbuh1hhjihhhjzhMS ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjihhhjzhMS ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjzhMS ubjC)}(hstart_removingh]jI)}(hjh]hstart_removing}(hj̉hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjȉubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjihhhjzhMS ubj=)}(hC(struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.start_removingasbuh1hhjubj2)}(h h]h }(hj#hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj߉ubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjSubh)}(hhh]jI)}(hdentryh]hdentry}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj )}j ]jc.start_removingasbuh1hhjSubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj߉ubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjNJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjÊubj2)}(h h]h }(hjԊhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjÊubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.start_removingasbuh1hhjÊubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjÊubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÊubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjÊubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj߉ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjihhhjzhMS ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjehhhjzhMS ubah}(h]j`ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjzhMS hjbhhubjw)}(hhh]h)}(h7prepare to remove a given name with permission checkingh]h7prepare to remove a given name with permission checking}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMS hjEhhubah}(h]h ]h"]h$]h&]uh1jvhjbhhhjzhMS ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *parent`` directory in which to find the name ``struct qstr *name`` the name to be removed **Description** Locks are taken and a lookup in performed prior to removing an object from a directory. Permission checking (MAY_EXEC) is performed against **idmap**. If the name doesn't exist, an error is returned. end_removing() should be called when removal is complete, or aborted. **Return** a positive dentry, or an error.h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMW hjdubj)}(hhh](j)}(h/``struct mnt_idmap *idmap`` idmap of the mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMT hjubj)}(hhh]h)}(hidmap of the mounth]hidmap of the mount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMT hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMT hjubj)}(h>``struct dentry *parent`` directory in which to find the name h](j)}(h``struct dentry *parent``h]j)}(hj‹h]hstruct dentry *parent}(hjċhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMU hjubj)}(hhh]h)}(h#directory in which to find the nameh]h#directory in which to find the name}(hjۋhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj׋hMU hj؋ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj׋hMU hjubj)}(h-``struct qstr *name`` the name to be removed h](j)}(h``struct qstr *name``h]j)}(hjh]hstruct qstr *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMV hjubj)}(hhh]h)}(hthe name to be removedh]hthe name to be removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMV hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMV hjubeh}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMX hjdubh)}(hLocks are taken and a lookup in performed prior to removing an object from a directory. Permission checking (MAY_EXEC) is performed against **idmap**.h](hLocks are taken and a lookup in performed prior to removing an object from a directory. Permission checking (MAY_EXEC) is performed against }(hjLhhhNhNubj)}(h **idmap**h]hidmap}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMW hjdubh)}(h0If the name doesn't exist, an error is returned.h]h2If the name doesn’t exist, an error is returned.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM[ hjdubh)}(hEend_removing() should be called when removal is complete, or aborted.h]hEend_removing() should be called when removal is complete, or aborted.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM] hjdubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM_ hjdubh)}(ha positive dentry, or an error.h]ha positive dentry, or an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM` hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $start_creating_killable (C function)c.start_creating_killablehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hkstruct dentry * start_creating_killable (struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h]j)}(histruct dentry *start_creating_killable(struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h](j )}(hjh]hstruct}(hjҌhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjΌhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMn ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjΌhhhjߌhMn ubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jstart_creating_killablesbc.start_creating_killableasbuh1hhjΌhhhjߌhMn ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjΌhhhjߌhMn ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΌhhhjߌhMn ubjC)}(hstart_creating_killableh]jI)}(hjh]hstart_creating_killable}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjΌhhhjߌhMn ubj=)}(hC(struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjHubj2)}(h h]h }(hjYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj )}j ]j c.start_creating_killableasbuh1hhjHubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjDubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjɍhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjڍhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj׍ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj܍modnameN classnameNjj )}j ]j c.start_creating_killableasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjDubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubh)}(hhh]jI)}(hqstrh]hqstr}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj )}j ]j c.start_creating_killableasbuh1hhj(ubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjDubeh}(h]h ]h"]h$]h&]j`jauh1j<hjΌhhhjߌhMn ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjʌhhhjߌhMn ubah}(h]jŌah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjߌhMn hjnjhhubjw)}(hhh]h)}(h7prepare to create a given name with permission checkingh]h7prepare to create a given name with permission checking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMn hjhhubah}(h]h ]h"]h$]h&]uh1jvhjnjhhhjߌhMn ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjŎjjŎjjjuh1jhhhjVhNhNubj)}(hX-**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *parent`` directory in which to prepare to create the name ``struct qstr *name`` the name to be created **Description** Locks are taken and a lookup in performed prior to creating an object in a directory. Permission checking (MAY_EXEC) is performed against **idmap**. If the name already exists, a positive dentry is returned. If a signal is received or was already pending, the function aborts with -EINTR; **Return** a negative or positive dentry, or an error.h](h)}(h**Parameters**h]j)}(hjώh]h Parameters}(hjюhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͎ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMr hjɎubj)}(hhh](j)}(h/``struct mnt_idmap *idmap`` idmap of the mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMo hjubj)}(hhh]h)}(hidmap of the mounth]hidmap of the mount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMo hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMo hjubj)}(hK``struct dentry *parent`` directory in which to prepare to create the name h](j)}(h``struct dentry *parent``h]j)}(hj'h]hstruct dentry *parent}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMp hj!ubj)}(hhh]h)}(h0directory in which to prepare to create the nameh]h0directory in which to prepare to create the name}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMp hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMp hjubj)}(h-``struct qstr *name`` the name to be created h](j)}(h``struct qstr *name``h]j)}(hj`h]hstruct qstr *name}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMq hjZubj)}(hhh]h)}(hthe name to be createdh]hthe name to be created}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMq hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMq hjubeh}(h]h ]h"]h$]h&]uh1jhjɎubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMs hjɎubh)}(hLocks are taken and a lookup in performed prior to creating an object in a directory. Permission checking (MAY_EXEC) is performed against **idmap**.h](hLocks are taken and a lookup in performed prior to creating an object in a directory. Permission checking (MAY_EXEC) is performed against }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMr hjɎubh)}(h:If the name already exists, a positive dentry is returned.h]h:If the name already exists, a positive dentry is returned.}(hjҏhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMv hjɎubh)}(hPIf a signal is received or was already pending, the function aborts with -EINTR;h]hPIf a signal is received or was already pending, the function aborts with -EINTR;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMx hjɎubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM{ hjɎubh)}(h+a negative or positive dentry, or an error.h]h+a negative or positive dentry, or an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM| hjɎubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $start_removing_killable (C function)c.start_removing_killablehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hkstruct dentry * start_removing_killable (struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h]j)}(histruct dentry *start_removing_killable(struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h](j )}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj3hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3hhhjDhM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj )}j ]j)}jstart_removing_killablesbc.start_removing_killableasbuh1hhj3hhhjDhM ubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3hhhjDhM ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjDhM ubjC)}(hstart_removing_killableh]jI)}(hjth]hstart_removing_killable}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj3hhhjDhM ubj=)}(hC(struct mnt_idmap *idmap, struct dentry *parent, struct qstr *name)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjϐhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj̐ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjѐmodnameN classnameNjj )}j ]jrc.start_removing_killableasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj )}j ]jrc.start_removing_killableasbuh1hhjubj2)}(h h]h }(hj]hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjxhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jrc.start_removing_killableasbuh1hhjubj2)}(h h]h }(hj͑hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjۑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj3hhhjDhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj/hhhjDhM ubah}(h]j*ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjDhM hj,hhubjw)}(hhh]h)}(h7prepare to remove a given name with permission checkingh]h7prepare to remove a given name with permission checking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhj,hhhjDhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jhhhjVhNhNubj)}(hXS**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *parent`` directory in which to find the name ``struct qstr *name`` the name to be removed **Description** Locks are taken and a lookup in performed prior to removing an object from a directory. Permission checking (MAY_EXEC) is performed against **idmap**. If the name doesn't exist, an error is returned. end_removing() should be called when removal is complete, or aborted. If a signal is received or was already pending, the function aborts with -EINTR; **Return** a positive dentry, or an error.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj.ubj)}(hhh](j)}(h/``struct mnt_idmap *idmap`` idmap of the mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjSh]hstruct mnt_idmap *idmap}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjMubj)}(hhh]h)}(hidmap of the mounth]hidmap of the mount}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM hjJubj)}(h>``struct dentry *parent`` directory in which to find the name h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(h#directory in which to find the nameh]h#directory in which to find the name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjJubj)}(h-``struct qstr *name`` the name to be removed h](j)}(h``struct qstr *name``h]j)}(hjŒh]hstruct qstr *name}(hjǒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÒubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(hthe name to be removedh]hthe name to be removed}(hjޒhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjڒhM hjےubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڒhM hjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj.ubh)}(hLocks are taken and a lookup in performed prior to removing an object from a directory. Permission checking (MAY_EXEC) is performed against **idmap**.h](hLocks are taken and a lookup in performed prior to removing an object from a directory. Permission checking (MAY_EXEC) is performed against }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj.ubh)}(h0If the name doesn't exist, an error is returned.h]h2If the name doesn’t exist, an error is returned.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj.ubh)}(hEend_removing() should be called when removal is complete, or aborted.h]hEend_removing() should be called when removal is complete, or aborted.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj.ubh)}(hPIf a signal is received or was already pending, the function aborts with -EINTR;h]hPIf a signal is received or was already pending, the function aborts with -EINTR;}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj.ubh)}(h **Return**h]j)}(hjfh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj.ubh)}(ha positive dentry, or an error.h]ha positive dentry, or an error.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "start_creating_noperm (C function)c.start_creating_nopermhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hPstruct dentry * start_creating_noperm (struct dentry *parent, struct qstr *name)h]j)}(hNstruct dentry *start_creating_noperm(struct dentry *parent, struct qstr *name)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjʓhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjǓubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj̓modnameN classnameNjj )}j ]j)}jstart_creating_nopermsbc.start_creating_nopermasbuh1hhjhhhjhM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubjC)}(hstart_creating_nopermh]jI)}(hjh]hstart_creating_noperm}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(h*(struct dentry *parent, struct qstr *name)h](jC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubh)}(hhh]jI)}(hdentryh]hdentry}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj )}j ]jc.start_creating_nopermasbuh1hhj!ubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjI)}(hparenth]hparent}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.start_creating_nopermasbuh1hhjubj2)}(h h]h }(hjєhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjߔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(h:prepare to create a given name without permission checkingh]h:prepare to create a given name without permission checking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhjVhNhNubj)}(hXi**Parameters** ``struct dentry *parent`` directory in which to prepare to create the name ``struct qstr *name`` the name to be created **Description** Locks are taken and a lookup in performed prior to creating an object in a directory. If the name already exists, a positive dentry is returned. **Return** a negative or positive dentry, or an error.h](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj2ubj)}(hhh](j)}(hK``struct dentry *parent`` directory in which to prepare to create the name h](j)}(h``struct dentry *parent``h]j)}(hjWh]hstruct dentry *parent}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjQubj)}(hhh]h)}(h0directory in which to prepare to create the nameh]h0directory in which to prepare to create the name}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjNubj)}(h-``struct qstr *name`` the name to be created h](j)}(h``struct qstr *name``h]j)}(hjh]hstruct qstr *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(hthe name to be createdh]hthe name to be created}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjNubeh}(h]h ]h"]h$]h&]uh1jhj2ubh)}(h**Description**h]j)}(hj˕h]h Description}(hj͕hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɕubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj2ubh)}(hULocks are taken and a lookup in performed prior to creating an object in a directory.h]hULocks are taken and a lookup in performed prior to creating an object in a directory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj2ubh)}(h:If the name already exists, a positive dentry is returned.h]h:If the name already exists, a positive dentry is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj2ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj2ubh)}(h+a negative or positive dentry, or an error.h]h+a negative or positive dentry, or an error.}(hjhhhNhNubah}(h]h ]_h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "start_removing_noperm (C function)c.start_removing_nopermhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hPstruct dentry * start_removing_noperm (struct dentry *parent, struct qstr *name)h]j)}(hNstruct dentry *start_removing_noperm(struct dentry *parent, struct qstr *name)h](j )}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjBhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBhhhjShM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj )}j ]j)}jstart_removing_nopermsbc.start_removing_nopermasbuh1hhjBhhhjShM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBhhhjShM ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjShM ubjC)}(hstart_removing_nopermh]jI)}(hjh]hstart_removing_noperm}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjBhhhjShM ubj=)}(h*(struct dentry *parent, struct qstr *name)h](jC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj͖hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjޖhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjۖubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.start_removing_nopermasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct qstr *nameh](j )}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj,ubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubh)}(hhh]jI)}(hqstrh]hqstr}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj )}j ]jc.start_removing_nopermasbuh1hhj,ubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjBhhhjShM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj>hhhjShM ubah}(h]j9ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjShM hj;hhubjw)}(hhh]h)}(h:prepare to remove a given name without permission checkingh]h:prepare to remove a given name without permission checking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhj;hhhjShM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjɗjjɗjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct dentry *parent`` directory in which to find the name ``struct qstr *name`` the name to be removed **Description** Locks are taken and a lookup in performed prior to removing an object from a directory. If the name doesn't exist, an error is returned. end_removing() should be called when removal is complete, or aborted. **Return** a positive dentry, or an error.h](h)}(h**Parameters**h]j)}(hjӗh]h Parameters}(hj՗hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjїubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj͗ubj)}(hhh](j)}(h>``struct dentry *parent`` directory in which to find the name h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(h#directory in which to find the nameh]h#directory in which to find the name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h-``struct qstr *name`` the name to be removed h](j)}(h``struct qstr *name``h]j)}(hj+h]hstruct qstr *name}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj%ubj)}(hhh]h)}(hthe name to be removedh]hthe name to be removed}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hjubeh}(h]h ]h"]h$]h&]uh1jhj͗ubh)}(h**Description**h]j)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj͗ubh)}(hWLocks are taken and a lookup in performed prior to removing an object from a directory.h]hWLocks are taken and a lookup in performed prior to removing an object from a directory.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj͗ubh)}(h0If the name doesn't exist, an error is returned.h]h2If the name doesn’t exist, an error is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj͗ubh)}(hEend_removing() should be called when removal is complete, or aborted.h]hEend_removing() should be called when removal is complete, or aborted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj͗ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj͗ubh)}(ha positive dentry, or an error.h]ha positive dentry, or an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj͗ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "start_creating_dentry (C function)c.start_creating_dentryhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hSstruct dentry * start_creating_dentry (struct dentry *parent, struct dentry *child)h]j)}(hQstruct dentry *start_creating_dentry(struct dentry *parent, struct dentry *child)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jstart_creating_dentrysbc.start_creating_dentryasbuh1hhjhhhjhM ubj2)}(h h]h }(hj0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubjC)}(hstart_creating_dentryh]jI)}(hj-h]hstart_creating_dentry}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(h-(struct dentry *parent, struct dentry *child)h](jC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjfubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j+c.start_creating_dentryasbuh1hhjfubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbubjC)}(hstruct dentry *childh](j )}(hjh]hstruct}(hjڙhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj֙ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj֙ubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j+c.start_creating_dentryasbuh1hhj֙ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj֙ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֙ubjI)}(hchildh]hchild}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj֙ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(h prepare to create a given dentryh]h prepare to create a given dentry}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjXhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct dentry *parent`` directory from which dentry should be removed ``struct dentry *child`` the dentry to be removed **Description** A lock is taken to protect the dentry again other dirops and the validity of the dentry is checked: correct parent and still hashed. If the dentry is valid and negative a reference is taken and returned. If not an error is returned. end_creating() should be called when creation is complete, or aborted. **Return** the valid dentry, or an error.h](h)}(h**Parameters**h]j)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjwubj)}(hhh](j)}(hH``struct dentry *parent`` directory from which dentry should be removed h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(h-directory from which dentry should be removedh]h-directory from which dentry should be removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h2``struct dentry *child`` the dentry to be removed h](j)}(h``struct dentry *child``h]j)}(hj՚h]hstruct dentry *child}(hjךhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӚubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjϚubj)}(hhh]h)}(hthe dentry to be removedh]hthe dentry to be removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjϚubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjwubh)}(hA lock is taken to protect the dentry again other dirops and the validity of the dentry is checked: correct parent and still hashed.h]hA lock is taken to protect the dentry again other dirops and the validity of the dentry is checked: correct parent and still hashed.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjwubh)}(hdIf the dentry is valid and negative a reference is taken and returned. If not an error is returned.h]hdIf the dentry is valid and negative a reference is taken and returned. If not an error is returned.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjwubh)}(hFend_creating() should be called when creation is complete, or aborted.h]hFend_creating() should be called when creation is complete, or aborted.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjwubh)}(h **Return**h]j)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjwubh)}(hthe valid dentry, or an error.h]hthe valid dentry, or an error.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "start_removing_dentry (C function)c.start_removing_dentryhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hSstruct dentry * start_removing_dentry (struct dentry *parent, struct dentry *child)h]j)}(hQstruct dentry *start_removing_dentry(struct dentry *parent, struct dentry *child)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jstart_removing_dentrysbc.start_removing_dentryasbuh1hhjhhhjhM ubj2)}(h h]h }(hjڛhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubjC)}(hstart_removing_dentryh]jI)}(hjכh]hstart_removing_dentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(h-(struct dentry *parent, struct dentry *child)h](jC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj )}j ]j՛c.start_removing_dentryasbuh1hhjubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hstruct dentry *childh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j՛c.start_removing_dentryasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjΜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hchildh]hchild}(hjۜhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(h prepare to remove a given dentryh]h prepare to remove a given dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct dentry *parent`` directory from which dentry should be removed ``struct dentry *child`` the dentry to be removed **Description** A lock is taken to protect the dentry again other dirops and the validity of the dentry is checked: correct parent and still hashed. If the dentry is valid and positive, a reference is taken and returned. If not an error is returned. end_removing() should be called when removal is complete, or aborted. **Return** the valid dentry, or an error.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj!ubj)}(hhh](j)}(hH``struct dentry *parent`` directory from which dentry should be removed h](j)}(h``struct dentry *parent``h]j)}(hjFh]hstruct dentry *parent}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj@ubj)}(hhh]h)}(h-directory from which dentry should be removedh]h-directory from which dentry should be removed}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hM hj=ubj)}(h2``struct dentry *child`` the dentry to be removed h](j)}(h``struct dentry *child``h]j)}(hjh]hstruct dentry *child}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjyubj)}(hhh]h)}(hthe dentry to be removedh]hthe dentry to be removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM hj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj!ubh)}(hA lock is taken to protect the dentry again other dirops and the validity of the dentry is checked: correct parent and still hashed.h]hA lock is taken to protect the dentry again other dirops and the validity of the dentry is checked: correct parent and still hashed.}(hjНhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj!ubh)}(heIf the dentry is valid and positive, a reference is taken and returned. If not an error is returned.h]heIf the dentry is valid and positive, a reference is taken and returned. If not an error is returned.}(hjߝhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(hEend_removing() should be called when removal is complete, or aborted.h]hEend_removing() should be called when removal is complete, or aborted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(hthe valid dentry, or an error.h]hthe valid dentry, or an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j start_renaming (C function)c.start_renaminghNtauh1hhjVhhhNhNubj)}(hhh](j)}(hjint start_renaming (struct renamedata *rd, int lookup_flags, struct qstr *old_last, struct qstr *new_last)h]j)}(hiint start_renaming(struct renamedata *rd, int lookup_flags, struct qstr *old_last, struct qstr *new_last)h](jf)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj@hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMTubj2)}(h h]h }(hjShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@hhhjRhMTubjC)}(hstart_renamingh]jI)}(hstart_renamingh]hstart_renaming}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj@hhhjRhMTubj=)}(hW(struct renamedata *rd, int lookup_flags, struct qstr *old_last, struct qstr *new_last)h](jC)}(hstruct renamedata *rdh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubh)}(hhh]jI)}(h renamedatah]h renamedata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjgsbc.start_renamingasbuh1hhj}ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubj)}(hjh]h*}(hj͞hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjI)}(hrdh]hrd}(hjڞhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubjC)}(hint lookup_flagsh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(h lookup_flagsh]h lookup_flags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubjC)}(hstruct qstr *old_lasth](j )}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj$ubj2)}(h h]h }(hj5hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubh)}(hhh]jI)}(hqstrh]hqstr}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj )}j ]jc.start_renamingasbuh1hhj$ubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjI)}(hold_lasth]hold_last}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubjC)}(hstruct qstr *new_lasth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.start_renamingasbuh1hhjubj2)}(h h]h }(hjԟhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnew_lasth]hnew_last}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjyubeh}(h]h ]h"]h$]h&]j`jauh1j<hj@hhhjRhMTubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj<hhhjRhMTubah}(h]j7ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjRhMThj9hhubjw)}(hhh]h)}(h9lookup and lock names for rename with permission checkingh]h9lookup and lock names for rename with permission checking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMThjhhubah}(h]h ]h"]h$]h&]uh1jvhj9hhhjRhMTubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct renamedata *rd`` rename data containing parents and flags, and for receiving found dentries ``int lookup_flags`` extra flags to pass to ->lookup (e.g. LOOKUP_REVAL, LOOKUP_NO_SYMLINKS etc). ``struct qstr *old_last`` name of object in **rd.old_parent** ``struct qstr *new_last`` name of object in **rd.new_parent** **Description** Look up two names and ensure locks are in place for rename. On success the found dentries are stored in **rd.old_dentry**, **rd.new_dentry**. Also the refcount on **rd->old_parent** is increased. These references and the lock are dropped by end_renaming(). The passed in qstrs need not have the hash calculated, and basic eXecute permission checking is performed against **rd.mnt_idmap**. **Return** zero or an error.h](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMXhj5ubj)}(hhh](j)}(he``struct renamedata *rd`` rename data containing parents and flags, and for receiving found dentries h](j)}(h``struct renamedata *rd``h]j)}(hjZh]hstruct renamedata *rd}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMVhjTubj)}(hhh]h)}(hJrename data containing parents and flags, and for receiving found dentriesh]hJrename data containing parents and flags, and for receiving found dentries}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMUhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMVhjQubj)}(hb``int lookup_flags`` extra flags to pass to ->lookup (e.g. LOOKUP_REVAL, LOOKUP_NO_SYMLINKS etc). h](j)}(h``int lookup_flags``h]j)}(hjh]hint lookup_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMXhjubj)}(hhh]h)}(hLextra flags to pass to ->lookup (e.g. LOOKUP_REVAL, LOOKUP_NO_SYMLINKS etc).h]hLextra flags to pass to ->lookup (e.g. LOOKUP_REVAL, LOOKUP_NO_SYMLINKS etc).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjQubj)}(h>``struct qstr *old_last`` name of object in **rd.old_parent** h](j)}(h``struct qstr *old_last``h]j)}(hjΠh]hstruct qstr *old_last}(hjРhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̠ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMYhjȠubj)}(hhh]h)}(h#name of object in **rd.old_parent**h](hname of object in }(hjhhhNhNubj)}(h**rd.old_parent**h]h rd.old_parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjȠubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjQubj)}(h>``struct qstr *new_last`` name of object in **rd.new_parent** h](j)}(h``struct qstr *new_last``h]j)}(hjh]hstruct qstr *new_last}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMZhjubj)}(hhh]h)}(h#name of object in **rd.new_parent**h](hname of object in }(hj.hhhNhNubj)}(h**rd.new_parent**h]h rd.new_parent}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1hhj*hMZhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMZhjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubh)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM\hj5ubh)}(h;Look up two names and ensure locks are in place for rename.h]h;Look up two names and ensure locks are in place for rename.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM[hj5ubh)}(hOn success the found dentries are stored in **rd.old_dentry**, **rd.new_dentry**. Also the refcount on **rd->old_parent** is increased. These references and the lock are dropped by end_renaming().h](h,On success the found dentries are stored in }(hjhhhNhNubj)}(h**rd.old_dentry**h]h rd.old_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**rd.new_dentry**h]h rd.new_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. Also the refcount on }(hjhhhNhNubj)}(h**rd->old_parent**h]hrd->old_parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhK is increased. These references and the lock are dropped by end_renaming().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM^hj5ubh)}(hThe passed in qstrs need not have the hash calculated, and basic eXecute permission checking is performed against **rd.mnt_idmap**.h](hrThe passed in qstrs need not have the hash calculated, and basic eXecute permission checking is performed against }(hjȡhhhNhNubj)}(h**rd.mnt_idmap**h]h rd.mnt_idmap}(hjСhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȡubh.}(hjȡhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMbhj5ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMehj5ubh)}(hzero or an error.h]hzero or an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMfhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "start_renaming_dentry (C function)c.start_renaming_dentryhNtauh1hhjVhhhNhNubj)}(hhh](j)}(huint start_renaming_dentry (struct renamedata *rd, int lookup_flags, struct dentry *old_dentry, struct qstr *new_last)h]j)}(htint start_renaming_dentry(struct renamedata *rd, int lookup_flags, struct dentry *old_dentry, struct qstr *new_last)h](jf)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj,hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,hhhj>hMubjC)}(hstart_renaming_dentryh]jI)}(hstart_renaming_dentryh]hstart_renaming_dentry}(hjQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj,hhhj>hMubj=)}(h[(struct renamedata *rd, int lookup_flags, struct dentry *old_dentry, struct qstr *new_last)h](jC)}(hstruct renamedata *rdh](j )}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjiubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubh)}(hhh]jI)}(h renamedatah]h renamedata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjSsbc.start_renaming_dentryasbuh1hhjiubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjI)}(hrdh]hrd}(hjƢhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubjC)}(hint lookup_flagsh](jf)}(hinth]hint}(hjߢhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjۢubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjۢubjI)}(h lookup_flagsh]h lookup_flags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjۢubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubjC)}(hstruct dentry *old_dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj )}j ]jc.start_renaming_dentryasbuh1hhjubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h old_dentryh]h old_dentry}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubjC)}(hstruct qstr *new_lasth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.start_renaming_dentryasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjΣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnew_lasth]hnew_last}(hjۣhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjeubeh}(h]h ]h"]h$]h&]j`jauh1j<hj,hhhj>hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj(hhhj>hMubah}(h]j#ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj>hMhj%hhubjw)}(hhh]h)}(h8lookup and lock name for rename with permission checkingh]h8lookup and lock name for rename with permission checking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj%hhhj>hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct renamedata *rd`` rename data containing parents and flags, and for receiving found dentries ``int lookup_flags`` extra flags to pass to ->lookup (e.g. LOOKUP_REVAL, LOOKUP_NO_SYMLINKS etc). ``struct dentry *old_dentry`` dentry of name to move ``struct qstr *new_last`` name of target in **rd.new_parent** **Description** Look up target name and ensure locks are in place for rename. On success the found dentry is stored in **rd.new_dentry** and **rd.old_parent** is confirmed to be the parent of **old_dentry**. If it was originally ``NULL``, it is set. In either case a reference is taken so that end_renaming() can have a stable reference to unlock. References and the lock can be dropped with end_renaming() The passed in qstr need not have the hash calculated, and basic eXecute permission checking is performed against **rd.mnt_idmap**. **Return** zero or an error.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubj)}(hhh](j)}(he``struct renamedata *rd`` rename data containing parents and flags, and for receiving found dentries h](j)}(h``struct renamedata *rd``h]j)}(hjFh]hstruct renamedata *rd}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj@ubj)}(hhh]h)}(hJrename data containing parents and flags, and for receiving found dentriesh]hJrename data containing parents and flags, and for receiving found dentries}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubj)}(hb``int lookup_flags`` extra flags to pass to ->lookup (e.g. LOOKUP_REVAL, LOOKUP_NO_SYMLINKS etc). h](j)}(h``int lookup_flags``h]j)}(hjh]hint lookup_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjzubj)}(hhh]h)}(hLextra flags to pass to ->lookup (e.g. LOOKUP_REVAL, LOOKUP_NO_SYMLINKS etc).h]hLextra flags to pass to ->lookup (e.g. LOOKUP_REVAL, LOOKUP_NO_SYMLINKS etc).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h5``struct dentry *old_dentry`` dentry of name to move h](j)}(h``struct dentry *old_dentry``h]j)}(hjh]hstruct dentry *old_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(hdentry of name to moveh]hdentry of name to move}(hjӤhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϤhMhjФubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjϤhMhj=ubj)}(h>``struct qstr *new_last`` name of target in **rd.new_parent** h](j)}(h``struct qstr *new_last``h]j)}(hjh]hstruct qstr *new_last}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h#name of target in **rd.new_parent**h](hname of target in }(hj hhhNhNubj)}(h**rd.new_parent**h]h rd.new_parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubh)}(h**Description**h]j)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(h=Look up target name and ensure locks are in place for rename.h]h=Look up target name and ensure locks are in place for rename.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(hXOn success the found dentry is stored in **rd.new_dentry** and **rd.old_parent** is confirmed to be the parent of **old_dentry**. If it was originally ``NULL``, it is set. In either case a reference is taken so that end_renaming() can have a stable reference to unlock.h](h)On success the found dentry is stored in }(hjahhhNhNubj)}(h**rd.new_dentry**h]h rd.new_dentry}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh and }(hjahhhNhNubj)}(h**rd.old_parent**h]h rd.old_parent}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh" is confirmed to be the parent of }(hjahhhNhNubj)}(h**old_dentry**h]h old_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh. If it was originally }(hjahhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubho, it is set. In either case a reference is taken so that end_renaming() can have a stable reference to unlock.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(h:References and the lock can be dropped with end_renaming()h]h:References and the lock can be dropped with end_renaming()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(hThe passed in qstr need not have the hash calculated, and basic eXecute permission checking is performed against **rd.mnt_idmap**.h](hqThe passed in qstr need not have the hash calculated, and basic eXecute permission checking is performed against }(hjǥhhhNhNubj)}(h**rd.mnt_idmap**h]h rd.mnt_idmap}(hjϥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǥubh.}(hjǥhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubh)}(hzero or an error.h]hzero or an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j (start_renaming_two_dentries (C function)c.start_renaming_two_dentrieshNtauh1hhjVhhhNhNubj)}(hhh](j)}(hmint start_renaming_two_dentries (struct renamedata *rd, struct dentry *old_dentry, struct dentry *new_dentry)h]j)}(hlint start_renaming_two_dentries(struct renamedata *rd, struct dentry *old_dentry, struct dentry *new_dentry)h](jf)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj+hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+hhhj=hMubjC)}(hstart_renaming_two_dentriesh]jI)}(hstart_renaming_two_dentriesh]hstart_renaming_two_dentries}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj+hhhj=hMubj=)}(hM(struct renamedata *rd, struct dentry *old_dentry, struct dentry *new_dentry)h](jC)}(hstruct renamedata *rdh](j )}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubh)}(hhh]jI)}(h renamedatah]h renamedata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjRsbc.start_renaming_two_dentriesasbuh1hhjhubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjI)}(hrdh]hrd}(hjŦhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(hstruct dentry *old_dentryh](j )}(hjh]hstruct}(hjަhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjڦubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjڦubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.start_renaming_two_dentriesasbuh1hhjڦubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjڦubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڦubjI)}(h old_dentryh]h old_dentry}(hj5hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjڦubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(hstruct dentry *new_dentryh](j )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(hdentryh]hdentry}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]jc.start_renaming_two_dentriesasbuh1hhjJubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(h new_dentryh]h new_dentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubeh}(h]h ]h"]h$]h&]j`jauh1j<hj+hhhj=hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj'hhhj=hMubah}(h]j"ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj=hMhj$hhubjw)}(hhh]h)}(h,Lock to dentries in given parents for renameh]h,Lock to dentries in given parents for rename}(hjϧhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj̧hhubah}(h]h ]h"]h$]h&]uh1jvhj$hhhj=hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct renamedata *rd`` rename data containing parent ``struct dentry *old_dentry`` dentry of name to move ``struct dentry *new_dentry`` dentry to move to **Description** Ensure locks are in place for rename and check parentage is still correct. On success the two dentries are stored in **rd.old_dentry** and **rd.new_dentry** and **rd.old_parent** and **rd.new_parent** are confirmed to be the parents of the dentries. References and the lock can be dropped with end_renaming() **Return** zero or an error.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh](j)}(h8``struct renamedata *rd`` rename data containing parent h](j)}(h``struct renamedata *rd``h]j)}(hjh]hstruct renamedata *rd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj ubj)}(hhh]h)}(hrename data containing parenth]hrename data containing parent}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(h5``struct dentry *old_dentry`` dentry of name to move h](j)}(h``struct dentry *old_dentry``h]j)}(hjIh]hstruct dentry *old_dentry}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjCubj)}(hhh]h)}(hdentry of name to moveh]hdentry of name to move}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjubj)}(h0``struct dentry *new_dentry`` dentry to move to h](j)}(h``struct dentry *new_dentry``h]j)}(hjh]hstruct dentry *new_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj|ubj)}(hhh]h)}(hdentry to move toh]hdentry to move to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hJEnsure locks are in place for rename and check parentage is still correct.h]hJEnsure locks are in place for rename and check parentage is still correct.}(hjӨhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hOn success the two dentries are stored in **rd.old_dentry** and **rd.new_dentry** and **rd.old_parent** and **rd.new_parent** are confirmed to be the parents of the dentries.h](h*On success the two dentries are stored in }(hjhhhNhNubj)}(h**rd.old_dentry**h]h rd.old_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**rd.new_dentry**h]h rd.new_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**rd.old_parent**h]h rd.old_parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }hjsbj)}(h**rd.new_parent**h]h rd.new_parent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh1 are confirmed to be the parents of the dentries.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(h:References and the lock can be dropped with end_renaming()h]h:References and the lock can be dropped with end_renaming()}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(h **Return**h]j)}(hjJh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hzero or an error.h]hzero or an error.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_create (C function) c.vfs_createhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hiint vfs_create (struct mnt_idmap *idmap, struct dentry *dentry, umode_t mode, struct delegated_inode *di)h]j)}(hhint vfs_create(struct mnt_idmap *idmap, struct dentry *dentry, umode_t mode, struct delegated_inode *di)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMCubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMCubjC)}(h vfs_createh]jI)}(h vfs_createh]h vfs_create}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMCubj=)}(hZ(struct mnt_idmap *idmap, struct dentry *dentry, umode_t mode, struct delegated_inode *di)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj̩hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjȩubj2)}(h h]h }(hj٩hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjȩubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.vfs_createasbuh1hhjȩubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjȩubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȩubjI)}(hidmaph]hidmap}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjȩubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjĩubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj:ubj2)}(h h]h }(hjKhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubh)}(hhh]jI)}(hdentryh]hdentry}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj )}j ]j c.vfs_createasbuh1hhj:ubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjĩubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.vfs_createasbuh1hhjubj2)}(h h]h }(hjϪhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hjݪhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjĩubjC)}(hstruct delegated_inode *dih](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.vfs_createasbuh1hhjubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdih]hdi}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjĩubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMCubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMCubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMChjhhubjw)}(hhh]h)}(hcreate new fileh]hcreate new file}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMChjthhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct dentry *dentry`` dentry of the child file ``umode_t mode`` mode of the child file ``struct delegated_inode *di`` returns parent inode, if the inode is delegated. **Description** Create a new file. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMGhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMDhjubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjѫhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjͫhMDhjΫubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjͫhMDhjubj)}(h3``struct dentry *dentry`` dentry of the child file h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMEhjubj)}(hhh]h)}(hdentry of the child fileh]hdentry of the child file}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjubj)}(h(``umode_t mode`` mode of the child file h](j)}(h``umode_t mode``h]j)}(hj*h]h umode_t mode}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMFhj$ubj)}(hhh]h)}(hmode of the child fileh]hmode of the child file}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMFhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMFhjubj)}(hP``struct delegated_inode *di`` returns parent inode, if the inode is delegated. h](j)}(h``struct delegated_inode *di``h]j)}(hjch]hstruct delegated_inode *di}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMGhj]ubj)}(hhh]h)}(h0returns parent inode, if the inode is delegated.h]h0returns parent inode, if the inode is delegated.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMGhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMGhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMIhjubh)}(hCreate a new file.h]hCreate a new file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMHhjubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjìhhhNhNubj)}(h **idmap**h]hidmap}(hjˬhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjìubhB. This function will then take care to map the inode according to }(hjìhhhNhNubj)}(h **idmap**h]hidmap}(hjݬhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjìubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjìhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjìubh.}(hjìhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  kernel_tmpfile_open (C function)c.kernel_tmpfile_openhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hstruct file * kernel_tmpfile_open (struct mnt_idmap *idmap, const struct path *parentpath, umode_t mode, int open_flag, const struct cred *cred)h]j)}(hstruct file *kernel_tmpfile_open(struct mnt_idmap *idmap, const struct path *parentpath, umode_t mode, int open_flag, const struct cred *cred)h](j )}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj$hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM1ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$hhhj5hM1ubh)}(hhh]jI)}(hfileh]hfile}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj )}j ]j)}jkernel_tmpfile_opensbc.kernel_tmpfile_openasbuh1hhj$hhhj5hM1ubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$hhhj5hM1ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj5hM1ubjC)}(hkernel_tmpfile_openh]jI)}(hjeh]hkernel_tmpfile_open}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj$hhhj5hM1ubj=)}(hn(struct mnt_idmap *idmap, const struct path *parentpath, umode_t mode, int open_flag, const struct cred *cred)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj­modnameN classnameNjj )}j ]jcc.kernel_tmpfile_openasbuh1hhjubj2)}(h h]h }(hjޭhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct path *parentpathh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hpathh]hpath}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj )}j ]jcc.kernel_tmpfile_openasbuh1hhjubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h parentpathh]h parentpath}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jcc.kernel_tmpfile_openasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hj̮hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int open_flagh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(h open_flagh]h open_flag}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct cred *credh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hcredh]hcred}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj )}j ]jcc.kernel_tmpfile_openasbuh1hhjubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hcredh]hcred}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj$hhhj5hM1ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhj5hM1ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj5hM1hjhhubjw)}(hhh]h)}(h&open a tmpfile for kernel internal useh]h&open a tmpfile for kernel internal use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM1hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj5hM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjίjjίjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``const struct path *parentpath`` path of the base directory ``umode_t mode`` mode of the new tmpfile ``int open_flag`` flags ``const struct cred *cred`` credentials for open **Description** Create and open a temporary file. The file is not accounted in nr_files, hence this is only for kernel internal use, and must not be installed into file tables or such.h](h)}(h**Parameters**h]j)}(hjدh]h Parameters}(hjگhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֯ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM5hjүubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM2hjubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM2hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM2hjubj)}(h=``const struct path *parentpath`` path of the base directory h](j)}(h!``const struct path *parentpath``h]j)}(hj0h]hconst struct path *parentpath}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM3hj*ubj)}(hhh]h)}(hpath of the base directoryh]hpath of the base directory}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM3hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM3hjubj)}(h)``umode_t mode`` mode of the new tmpfile h](j)}(h``umode_t mode``h]j)}(hjih]h umode_t mode}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM4hjcubj)}(hhh]h)}(hmode of the new tmpfileh]hmode of the new tmpfile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM4hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM4hjubj)}(h``int open_flag`` flags h](j)}(h``int open_flag``h]j)}(hjh]h int open_flag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM5hjubj)}(hhh]h)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubj)}(h1``const struct cred *cred`` credentials for open h](j)}(h``const struct cred *cred``h]j)}(hj۰h]hconst struct cred *cred}(hjݰhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٰubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM6hjհubj)}(hhh]h)}(hcredentials for openh]hcredentials for open}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjհubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubeh}(h]h ]h"]h$]h&]uh1jhjүubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM8hjүubh)}(hCreate and open a temporary file. The file is not accounted in nr_files, hence this is only for kernel internal use, and must not be installed into file tables or such.h]hCreate and open a temporary file. The file is not accounted in nr_files, hence this is only for kernel internal use, and must not be installed into file tables or such.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM7hjүubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j end_creating_path (C function)c.end_creating_pathhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hGvoid end_creating_path (const struct path *path, struct dentry *dentry)h]j)}(hFvoid end_creating_path(const struct path *path, struct dentry *dentry)h](jf)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjWhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hjjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWhhhjihMubjC)}(hend_creating_pathh]jI)}(hend_creating_pathh]hend_creating_path}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjxubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjWhhhjihMubj=)}(h0(const struct path *path, struct dentry *dentry)h](jC)}(hconst struct path *pathh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hpathh]hpath}(hjѱhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjαubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjӱmodnameN classnameNjj )}j ]j)}jj~sbc.end_creating_pathasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hpathh]hpath}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubh)}(hhh]jI)}(hdentryh]hdentry}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj )}j ]jc.end_creating_pathasbuh1hhj!ubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjI)}(hdentryh]hdentry}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjWhhhjihMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjShhhjihMubah}(h]jNah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjihMhjPhhubjw)}(hhh]h)}(h6finish a code section started by start_creating_path()h]h6finish a code section started by start_creating_path()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjPhhhjihMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``const struct path *path`` the path instantiated by start_creating_path() ``struct dentry *dentry`` the dentry returned by start_creating_path() **Description** end_creating_path() will unlock and locks taken by start_creating_path() and drop an references that were taken. It should only be called if start_creating_path() returned a non-error. If vfs_mkdir() was called and it returned an error, that error *should* be passed to end_creating_path() together with the path.h](h)}(h**Parameters**h]j)}(hjȲh]h Parameters}(hjʲhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƲubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj²ubj)}(hhh](j)}(hK``const struct path *path`` the path instantiated by start_creating_path() h](j)}(h``const struct path *path``h]j)}(hjh]hconst struct path *path}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h.the path instantiated by start_creating_path()h]h.the path instantiated by start_creating_path()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj޲ubj)}(hG``struct dentry *dentry`` the dentry returned by start_creating_path() h](j)}(h``struct dentry *dentry``h]j)}(hj h]hstruct dentry *dentry}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h,the dentry returned by start_creating_path()h]h,the dentry returned by start_creating_path()}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj޲ubeh}(h]h ]h"]h$]h&]uh1jhj²ubh)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj²ubh)}(hX:end_creating_path() will unlock and locks taken by start_creating_path() and drop an references that were taken. It should only be called if start_creating_path() returned a non-error. If vfs_mkdir() was called and it returned an error, that error *should* be passed to end_creating_path() together with the path.h](hend_creating_path() will unlock and locks taken by start_creating_path() and drop an references that were taken. It should only be called if start_creating_path() returned a non-error. If vfs_mkdir() was called and it returned an error, that error }(hjqhhhNhNubj )}(h*should*h]hshould}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j~ hjqubh9 be passed to end_creating_path() together with the path.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj²ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j dentry_create (C function)c.dentry_createhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hastruct file * dentry_create (struct path *path, int flags, umode_t mode, const struct cred *cred)h]j)}(h_struct file *dentry_create(struct path *path, int flags, umode_t mode, const struct cred *cred)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hfileh]hfile}(hjѳhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjγubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjӳmodnameN classnameNjj )}j ]j)}j dentry_createsbc.dentry_createasbuh1hhjhhhjhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(h dentry_createh]jI)}(hjh]h dentry_create}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hE(struct path *path, int flags, umode_t mode, const struct cred *cred)h](jC)}(hstruct path *pathh](j )}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubh)}(hhh]jI)}(hpathh]hpath}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj )}j ]jc.dentry_createasbuh1hhj(ubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjI)}(hpathh]hpath}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubjC)}(h int flagsh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjԴhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjѴubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjִmodnameN classnameNjj )}j ]jc.dentry_createasbuh1hhjʹubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjʹubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjʹubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubjC)}(hconst struct cred *credh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hcredh]hcred}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj )}j ]jc.dentry_createasbuh1hhjubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hcredh]hcred}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hCreate and open a fileh]hCreate and open a file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj͵jj͵jjjuh1jhhhjVhNhNubj)}(hXI**Parameters** ``struct path *path`` path to create ``int flags`` O\_ flags ``umode_t mode`` mode bits for new file ``const struct cred *cred`` credentials to use **Description** Caller must hold the parent directory's lock, and have prepared a negative dentry, placed in **path->dentry**, for the new file. Caller sets **path->mnt** to the vfsmount of the filesystem where the new file is to be created. The parent directory and the negative dentry must reside on the same filesystem instance. On success, returns a ``struct file *``. Otherwise an ERR_PTR is returned.h](h)}(h**Parameters**h]j)}(hj׵h]h Parameters}(hjٵhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjյubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjѵubj)}(hhh](j)}(h%``struct path *path`` path to create h](j)}(h``struct path *path``h]j)}(hjh]hstruct path *path}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(hpath to createh]hpath to create}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h``int flags`` O\_ flags h](j)}(h ``int flags``h]j)}(hj/h]h int flags}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj)ubj)}(hhh]h)}(h O\_ flagsh]h O_ flags}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubj)}(h(``umode_t mode`` mode bits for new file h](j)}(h``umode_t mode``h]j)}(hjhh]h umode_t mode}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjbubj)}(hhh]h)}(hmode bits for new fileh]hmode bits for new file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjubj)}(h/``const struct cred *cred`` credentials to use h](j)}(h``const struct cred *cred``h]j)}(hjh]hconst struct cred *cred}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(hcredentials to useh]hcredentials to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjѵubh)}(h**Description**h]j)}(hjܶh]h Description}(hj޶hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڶubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM"hjѵubh)}(hCaller must hold the parent directory's lock, and have prepared a negative dentry, placed in **path->dentry**, for the new file.h](h_Caller must hold the parent directory’s lock, and have prepared a negative dentry, placed in }(hjhhhNhNubj)}(h**path->dentry**h]h path->dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, for the new file.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM!hjѵubh)}(hCaller sets **path->mnt** to the vfsmount of the filesystem where the new file is to be created. The parent directory and the negative dentry must reside on the same filesystem instance.h](h Caller sets }(hjhhhNhNubj)}(h **path->mnt**h]h path->mnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to the vfsmount of the filesystem where the new file is to be created. The parent directory and the negative dentry must reside on the same filesystem instance.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM$hjѵubh)}(hJOn success, returns a ``struct file *``. Otherwise an ERR_PTR is returned.h](hOn success, returns a }(hj4hhhNhNubj)}(h``struct file *``h]h struct file *}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh#. Otherwise an ERR_PTR is returned.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM(hjѵubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_mknod (C function) c.vfs_mknodhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hint vfs_mknod (struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev, struct delegated_inode *delegated_inode)h]j)}(hint vfs_mknod(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev, struct delegated_inode *delegated_inode)h](jf)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjqhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMgubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqhhhjhMgubjC)}(h vfs_mknodh]jI)}(h vfs_mknodh]h vfs_mknod}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjqhhhjhMgubj=)}(h(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev, struct delegated_inode *delegated_inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjзhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjͷubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjҷmodnameN classnameNjj )}j ]j)}jjsb c.vfs_mknodasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *dirh](j )}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hinodeh]hinode}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj )}j ]j c.vfs_mknodasbuh1hhj ubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hdirh]hdir}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.vfs_mknodasbuh1hhjubj2)}(h h]h }(hjиhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj޸hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j c.vfs_mknodasbuh1hhjubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h dev_t devh](h)}(hhh]jI)}(hdev_th]hdev_t}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj )}j ]j c.vfs_mknodasbuh1hhjHubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHubjI)}(hdevh]hdev}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.vfs_mknodasbuh1hhjubj2)}(h h]h }(hjйhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj޹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjqhhhjhMgubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjmhhhjhMgubah}(h]jhah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMghjjhhubjw)}(hhh]h)}(hcreate device node or fileh]hcreate device node or file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMghjhhubah}(h]h ]h"]h$]h&]uh1jvhjjhhhjhMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct inode *dir`` inode of the parent directory ``struct dentry *dentry`` dentry of the child device node ``umode_t mode`` mode of the child device node ``dev_t dev`` device number of device to create ``struct delegated_inode *delegated_inode`` returns parent inode, if the inode is delegated. **Description** Create a device node or file. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMkhj1ubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjVh]hstruct mnt_idmap *idmap}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhhjPubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhhjMubj)}(h4``struct inode *dir`` inode of the parent directory h](j)}(h``struct inode *dir``h]j)}(hjh]hstruct inode *dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMihjubj)}(hhh]h)}(hinode of the parent directoryh]hinode of the parent directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjMubj)}(h:``struct dentry *dentry`` dentry of the child device node h](j)}(h``struct dentry *dentry``h]j)}(hjȺh]hstruct dentry *dentry}(hjʺhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƺubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMjhjºubj)}(hhh]h)}(hdentry of the child device nodeh]hdentry of the child device node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjݺhMjhj޺ubah}(h]h ]h"]h$]h&]uh1jhjºubeh}(h]h ]h"]h$]h&]uh1jhjݺhMjhjMubj)}(h/``umode_t mode`` mode of the child device node h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMkhjubj)}(hhh]h)}(hmode of the child device nodeh]hmode of the child device node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjMubj)}(h0``dev_t dev`` device number of device to create h](j)}(h ``dev_t dev``h]j)}(hj:h]h dev_t dev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMlhj4ubj)}(hhh]h)}(h!device number of device to createh]h!device number of device to create}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMlhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMlhjMubj)}(h]``struct delegated_inode *delegated_inode`` returns parent inode, if the inode is delegated. h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hjsh]h'struct delegated_inode *delegated_inode}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMmhjmubj)}(hhh]h)}(h0returns parent inode, if the inode is delegated.h]h0returns parent inode, if the inode is delegated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMohj1ubh)}(hCreate a device node or file.h]hCreate a device node or file.}(hjĻhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMnhj1ubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjӻhhhNhNubj)}(h **idmap**h]hidmap}(hjۻhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӻubhB. This function will then take care to map the inode according to }(hjӻhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӻubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjӻhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӻubh.}(hjӻhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMphj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_mkdir (C function) c.vfs_mkdirhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hstruct dentry * vfs_mkdir (struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, umode_t mode, struct delegated_inode *delegated_inode)h]j)}(hstruct dentry *vfs_mkdir(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, umode_t mode, struct delegated_inode *delegated_inode)h](j )}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj4hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj4hhhjEhMubh)}(hhh]jI)}(hdentryh]hdentry}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj )}j ]j)}j vfs_mkdirsb c.vfs_mkdirasbuh1hhj4hhhjEhMubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj4hhhjEhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhMubjC)}(h vfs_mkdirh]jI)}(hjuh]h vfs_mkdir}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj4hhhjEhMubj=)}(hz(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, umode_t mode, struct delegated_inode *delegated_inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjмhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjͼubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjҼmodnameN classnameNjj )}j ]js c.vfs_mkdirasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *dirh](j )}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj@hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj )}j ]js c.vfs_mkdirasbuh1hhjubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdirh]hdir}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]js c.vfs_mkdirasbuh1hhjubj2)}(h h]h }(hjνhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjܽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]js c.vfs_mkdirasbuh1hhjubj2)}(h h]h }(hj#hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj )}j ]js c.vfs_mkdirasbuh1hhjFubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj4hhhjEhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj0hhhjEhMubah}(h]j+ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjEhMhj-hhubjw)}(hhh]h)}(h5create directory returning correct dentry if possibleh]h5create directory returning correct dentry if possible}(hj˾hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjȾhhubah}(h]h ]h"]h$]h&]uh1jvhj-hhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct inode *dir`` inode of the parent directory ``struct dentry *dentry`` dentry of the child directory ``umode_t mode`` mode of the child directory ``struct delegated_inode *delegated_inode`` returns parent inode, if the inode is delegated. **Description** Create a directory. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**. In the event that the filesystem does not use the ***dentry** but leaves it negative or unhashes it and possibly splices a different one returning it, the original dentry is dput() and the alternate is returned. In case of an error the dentry is dput() and an ERR_PTR() is returned.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj h]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubj)}(h4``struct inode *dir`` inode of the parent directory h](j)}(h``struct inode *dir``h]j)}(hjEh]hstruct inode *dir}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj?ubj)}(hhh]h)}(hinode of the parent directoryh]hinode of the parent directory}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjubj)}(h8``struct dentry *dentry`` dentry of the child directory h](j)}(h``struct dentry *dentry``h]j)}(hj~h]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjxubj)}(hhh]h)}(hdentry of the child directoryh]hdentry of the child directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``umode_t mode`` mode of the child directory h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(hmode of the child directoryh]hmode of the child directory}(hjпhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̿hMhjͿubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̿hMhjubj)}(h]``struct delegated_inode *delegated_inode`` returns parent inode, if the inode is delegated. h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hjh]h'struct delegated_inode *delegated_inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h0returns parent inode, if the inode is delegated.h]h0returns parent inode, if the inode is delegated.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hCreate a directory.h]hCreate a directory.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjPhhhNhNubj)}(h **idmap**h]hidmap}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubhB. This function will then take care to map the inode according to }(hjPhhhNhNubj)}(h **idmap**h]hidmap}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjPhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hIn the event that the filesystem does not use the ***dentry** but leaves it negative or unhashes it and possibly splices a different one returning it, the original dentry is dput() and the alternate is returned.h](h2In the event that the filesystem does not use the }(hjhhhNhNubj)}(h ***dentry**h]h*dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh but leaves it negative or unhashes it and possibly splices a different one returning it, the original dentry is dput() and the alternate is returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hFIn case of an error the dentry is dput() and an ERR_PTR() is returned.h]hFIn case of an error the dentry is dput() and an ERR_PTR() is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_rmdir (C function) c.vfs_rmdirhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hzint vfs_rmdir (struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, struct delegated_inode *delegated_inode)h]j)}(hyint vfs_rmdir(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, struct delegated_inode *delegated_inode)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMbubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMbubjC)}(h vfs_rmdirh]jI)}(h vfs_rmdirh]h vfs_rmdir}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMbubj=)}(hl(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, struct delegated_inode *delegated_inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj@hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj )}j ]j)}jjsb c.vfs_rmdirasbuh1hhjubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *dirh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j\ c.vfs_rmdirasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj )}j ]j\ c.vfs_rmdirasbuh1hhjubj2)}(h h]h }(hj@hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hjthhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjpubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j\ c.vfs_rmdirasbuh1hhjpubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMbubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMbubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMbhjhhubjw)}(hhh]h)}(hremove directoryh]hremove directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMbhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct inode *dir`` inode of the parent directory ``struct dentry *dentry`` dentry of the child directory ``struct delegated_inode *delegated_inode`` returns parent inode, if it's delegated. **Description** Remove a directory. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMfhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj6h]hstruct mnt_idmap *idmap}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMchj0ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMchjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMchj-ubj)}(h4``struct inode *dir`` inode of the parent directory h](j)}(h``struct inode *dir``h]j)}(hjoh]hstruct inode *dir}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMdhjiubj)}(hhh]h)}(hinode of the parent directoryh]hinode of the parent directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMdhj-ubj)}(h8``struct dentry *dentry`` dentry of the child directory h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMehjubj)}(hhh]h)}(hdentry of the child directoryh]hdentry of the child directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehj-ubj)}(hU``struct delegated_inode *delegated_inode`` returns parent inode, if it's delegated. h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hjh]h'struct delegated_inode *delegated_inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMfhjubj)}(hhh]h)}(h(returns parent inode, if it's delegated.h]h*returns parent inode, if it’s delegated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhj-ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhhjubh)}(hRemove a directory.h]hRemove a directory.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMghjubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjAhhhNhNubj)}(h **idmap**h]hidmap}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubhB. This function will then take care to map the inode according to }(hjAhhhNhNubj)}(h **idmap**h]hidmap}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjAhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMihjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_unlink (C function) c.vfs_unlinkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h{int vfs_unlink (struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, struct delegated_inode *delegated_inode)h]j)}(hzint vfs_unlink(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, struct delegated_inode *delegated_inode)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h vfs_unlinkh]jI)}(h vfs_unlinkh]h vfs_unlink}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hl(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, struct delegated_inode *delegated_inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.vfs_unlinkasbuh1hhjubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *dirh](j )}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjQubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQubh)}(hhh]jI)}(hinodeh]hinode}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj )}j ]j c.vfs_unlinkasbuh1hhjQubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjI)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.vfs_unlinkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj1ubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1ubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj )}j ]j c.vfs_unlinkasbuh1hhj1ubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hunlink a filesystem objecth]hunlink a filesystem object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX`**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct inode *dir`` parent directory ``struct dentry *dentry`` victim ``struct delegated_inode *delegated_inode`` returns victim inode, if the inode is delegated. **Description** The caller must hold dir->i_rwsem exclusively. If vfs_unlink discovers a delegation, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation on that inode and retry. Because breaking a delegation may take a long time, the caller should drop dir->i_rwsem before doing so. Alternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h'``struct inode *dir`` parent directory h](j)}(h``struct inode *dir``h]j)}(hj0h]hstruct inode *dir}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj*ubj)}(hhh]h)}(hparent directoryh]hparent directory}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(h!``struct dentry *dentry`` victim h](j)}(h``struct dentry *dentry``h]j)}(hjih]hstruct dentry *dentry}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjcubj)}(hhh]h)}(hvictimh]hvictim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjubj)}(h]``struct delegated_inode *delegated_inode`` returns victim inode, if the inode is delegated. h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hjh]h'struct delegated_inode *delegated_inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h0returns victim inode, if the inode is delegated.h]h0returns victim inode, if the inode is delegated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(h.The caller must hold dir->i_rwsem exclusively.h]h.The caller must hold dir->i_rwsem exclusively.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hX)If vfs_unlink discovers a delegation, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation on that inode and retry. Because breaking a delegation may take a long time, the caller should drop dir->i_rwsem before doing so.h]hX)If vfs_unlink discovers a delegation, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation on that inode and retry. Because breaking a delegation may take a long time, the caller should drop dir->i_rwsem before doing so.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hAlternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported.h]hAlternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hj hhhNhNubj)}(h **idmap**h]hidmap}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhB. This function will then take care to map the inode according to }(hj hhhNhNubj)}(h **idmap**h]hidmap}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hj hhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_symlink (C function) c.vfs_symlinkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hint vfs_symlink (struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, const char *oldname, struct delegated_inode *delegated_inode)h]j)}(hint vfs_symlink(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, const char *oldname, struct delegated_inode *delegated_inode)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM~ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM~ubjC)}(h vfs_symlinkh]jI)}(h vfs_symlinkh]h vfs_symlink}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM~ubj=)}(h(struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry, const char *oldname, struct delegated_inode *delegated_inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.vfs_symlinkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *dirh](j )}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0ubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubh)}(hhh]jI)}(hinodeh]hinode}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj )}j ]j c.vfs_symlinkasbuh1hhj0ubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjI)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.vfs_symlinkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *oldnameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hj/hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(holdnameh]holdname}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjmubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.vfs_symlinkasbuh1hhjmubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM~ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj}hhhjhM~ubah}(h]jxah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM~hjzhhubjw)}(hhh]h)}(hcreate symlinkh]hcreate symlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM~hjhhubah}(h]h ]h"]h$]h&]uh1jvhjzhhhjhM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct inode *dir`` inode of the parent directory ``struct dentry *dentry`` dentry of the child symlink file ``const char *oldname`` name of the file to link to ``struct delegated_inode *delegated_inode`` returns victim inode, if the inode is delegated. **Description** Create a symlink. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj3h]hstruct mnt_idmap *idmap}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj-ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubj)}(h4``struct inode *dir`` inode of the parent directory h](j)}(h``struct inode *dir``h]j)}(hjlh]hstruct inode *dir}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjfubj)}(hhh]h)}(hinode of the parent directoryh]hinode of the parent directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubj)}(h;``struct dentry *dentry`` dentry of the child symlink file h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h dentry of the child symlink fileh]h dentry of the child symlink file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubj)}(h4``const char *oldname`` name of the file to link to h](j)}(h``const char *oldname``h]j)}(hjh]hconst char *oldname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(hname of the file to link toh]hname of the file to link to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubj)}(h]``struct delegated_inode *delegated_inode`` returns victim inode, if the inode is delegated. h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hjh]h'struct delegated_inode *delegated_inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h0returns victim inode, if the inode is delegated.h]h0returns victim inode, if the inode is delegated.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hCreate a symlink.h]hCreate a symlink.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjwhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubhB. This function will then take care to map the inode according to }(hjwhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjwhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_link (C function) c.vfs_linkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hint vfs_link (struct dentry *old_dentry, struct mnt_idmap *idmap, struct inode *dir, struct dentry *new_dentry, struct delegated_inode *delegated_inode)h]j)}(hint vfs_link(struct dentry *old_dentry, struct mnt_idmap *idmap, struct inode *dir, struct dentry *new_dentry, struct delegated_inode *delegated_inode)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hvfs_linkh]jI)}(hvfs_linkh]hvfs_link}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct dentry *old_dentry, struct mnt_idmap *idmap, struct inode *dir, struct dentry *new_dentry, struct delegated_inode *delegated_inode)h](jC)}(hstruct dentry *old_dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj )}j ]j)}jjsb c.vfs_linkasbuh1hhjubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h old_dentryh]h old_dentry}(hjrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jS c.vfs_linkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *dirh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jS c.vfs_linkasbuh1hhjubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdirh]hdir}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *new_dentryh](j )}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjgubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jS c.vfs_linkasbuh1hhjgubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(h new_dentryh]h new_dentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jS c.vfs_linkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdelegated_inodeh]hdelegated_inode}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hcreate a new linkh]hcreate a new link}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjYhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct dentry *old_dentry`` object to be linked ``struct mnt_idmap *idmap`` idmap of the mount ``struct inode *dir`` new parent ``struct dentry *new_dentry`` where to create the new link ``struct delegated_inode *delegated_inode`` returns inode needing a delegation break **Description** The caller must hold dir->i_rwsem exclusively. If vfs_link discovers a delegation on the to-be-linked file in need of breaking, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop the i_rwsem before doing so. Alternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjxubj)}(hhh](j)}(h2``struct dentry *old_dentry`` object to be linked h](j)}(h``struct dentry *old_dentry``h]j)}(hjh]hstruct dentry *old_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(hobject to be linkedh]hobject to be linked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``struct mnt_idmap *idmap`` idmap of the mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(hidmap of the mounth]hidmap of the mount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``struct inode *dir`` new parent h](j)}(h``struct inode *dir``h]j)}(hjh]hstruct inode *dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj ubj)}(hhh]h)}(h new parenth]h new parent}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(h;``struct dentry *new_dentry`` where to create the new link h](j)}(h``struct dentry *new_dentry``h]j)}(hjHh]hstruct dentry *new_dentry}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjBubj)}(hhh]h)}(hwhere to create the new linkh]hwhere to create the new link}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjubj)}(hU``struct delegated_inode *delegated_inode`` returns inode needing a delegation break h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hjh]h'struct delegated_inode *delegated_inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj{ubj)}(hhh]h)}(h(returns inode needing a delegation breakh]h(returns inode needing a delegation break}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjxubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjxubh)}(h.The caller must hold dir->i_rwsem exclusively.h]h.The caller must hold dir->i_rwsem exclusively.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjxubh)}(hXEIf vfs_link discovers a delegation on the to-be-linked file in need of breaking, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop the i_rwsem before doing so.h]hXEIf vfs_link discovers a delegation on the to-be-linked file in need of breaking, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop the i_rwsem before doing so.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjxubh)}(hAlternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported.h]hAlternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjxubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This function will then take care to map the inode according to }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_rename (C function) c.vfs_renamehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h&int vfs_rename (struct renamedata *rd)h]j)}(h%int vfs_rename(struct renamedata *rd)h](jf)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj`hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`hhhjrhMubjC)}(h vfs_renameh]jI)}(h vfs_renameh]h vfs_rename}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj`hhhjrhMubj=)}(h(struct renamedata *rd)h]jC)}(hstruct renamedata *rdh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h renamedatah]h renamedata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.vfs_renameasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hrdh]hrd}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hj`hhhjrhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj\hhhjrhMubah}(h]jWah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjrhMhjYhhubjw)}(hhh]h)}(hrename a filesystem objecth]hrename a filesystem object}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj!hhubah}(h]h ]h"]h$]h&]uh1jvhjYhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhjVhNhNubj)}(hXr **Parameters** ``struct renamedata *rd`` pointer to :c:type:`struct renamedata ` info **Description** The caller must hold multiple mutexes--see lock_rename()). If vfs_rename discovers a delegation in need of breaking at either the source or destination, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop all locks before doing so. Alternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported. The worst of all namespace operations - renaming directory. "Perverted" doesn't even start to describe it. Somebody in UCB had a heck of a trip... Problems: a) we can get into loop creation. b) race potential - two innocent renames can create a loop together. That's where 4.4BSD screws up. Current fix: serialization on sb->s_vfs_rename_mutex. We might be more accurate, but that's another story. c) we may have to lock up to _four_ objects - parents and victim (if it exists), and source (if it's a non-directory or a subdirectory that moves to different parent). And that - after we got ->i_rwsem on parents (until then we don't know whether the target exists). Solution: try to be smart with locking order for inodes. We rely on the fact that tree topology may change only under ->s_vfs_rename_mutex _and_ that parent of the object we move will be locked. Thus we can rank directories by the tree (ancestors first) and rank all non-directories after them. That works since everybody except rename does "lock parent, lookup, lock child" and rename is under ->s_vfs_rename_mutex. HOWEVER, it relies on the assumption that any object with ->lookup() has no more than 1 dentry. If "hybrid" objects will ever appear, we'd better make sure that there's no link(2) for them. d) conversion from fhandle to dentry may come in the wrong moment - when we are removing the target. Solution: we will have to grab ->i_rwsem in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_rwsem on parents, which works but leads to some truly excessive locking].h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj@ubj)}(hhh]j)}(hS``struct renamedata *rd`` pointer to :c:type:`struct renamedata ` info h](j)}(h``struct renamedata *rd``h]j)}(hjeh]hstruct renamedata *rd}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj_ubj)}(hhh]h)}(h8pointer to :c:type:`struct renamedata ` infoh](h pointer to }(hj~hhhNhNubh)}(h(:c:type:`struct renamedata `h]j)}(hjh]hstruct renamedata}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj  refdomainjreftypetype refexplicitrefwarnjj j  renamedatauh1hhjzhMhj~ubh info}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj@ubh)}(h:The caller must hold multiple mutexes--see lock_rename()).h]h:The caller must hold multiple mutexes--see lock_rename()).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj@ubh)}(hXPIf vfs_rename discovers a delegation in need of breaking at either the source or destination, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop all locks before doing so.h]hXPIf vfs_rename discovers a delegation in need of breaking at either the source or destination, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop all locks before doing so.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj@ubh)}(hAlternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported.h]hAlternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj@ubh)}(hThe worst of all namespace operations - renaming directory. "Perverted" doesn't even start to describe it. Somebody in UCB had a heck of a trip... Problems:h]hThe worst of all namespace operations - renaming directory. “Perverted” doesn’t even start to describe it. Somebody in UCB had a heck of a trip... Problems:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj@ubj)}(hXa) we can get into loop creation. b) race potential - two innocent renames can create a loop together. That's where 4.4BSD screws up. Current fix: serialization on sb->s_vfs_rename_mutex. We might be more accurate, but that's another story. c) we may have to lock up to _four_ objects - parents and victim (if it exists), and source (if it's a non-directory or a subdirectory that moves to different parent). And that - after we got ->i_rwsem on parents (until then we don't know whether the target exists). Solution: try to be smart with locking order for inodes. We rely on the fact that tree topology may change only under ->s_vfs_rename_mutex _and_ that parent of the object we move will be locked. Thus we can rank directories by the tree (ancestors first) and rank all non-directories after them. That works since everybody except rename does "lock parent, lookup, lock child" and rename is under ->s_vfs_rename_mutex. HOWEVER, it relies on the assumption that any object with ->lookup() has no more than 1 dentry. If "hybrid" objects will ever appear, we'd better make sure that there's no link(2) for them. d) conversion from fhandle to dentry may come in the wrong moment - when we are removing the target. Solution: we will have to grab ->i_rwsem in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_rwsem on parents, which works but leads to some truly excessive locking].h]j$)}(hhh](jD)}(hwe can get into loop creation.h]h)}(hjh]hwe can get into loop creation.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubah}(h]h ]h"]h$]h&]uh1jDhjubjD)}(hrace potential - two innocent renames can create a loop together. That's where 4.4BSD screws up. Current fix: serialization on sb->s_vfs_rename_mutex. We might be more accurate, but that's another story.h]h)}(hrace potential - two innocent renames can create a loop together. That's where 4.4BSD screws up. Current fix: serialization on sb->s_vfs_rename_mutex. We might be more accurate, but that's another story.h]hrace potential - two innocent renames can create a loop together. That’s where 4.4BSD screws up. Current fix: serialization on sb->s_vfs_rename_mutex. We might be more accurate, but that’s another story.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj4ubah}(h]h ]h"]h$]h&]uh1jDhjubjD)}(hXjwe may have to lock up to _four_ objects - parents and victim (if it exists), and source (if it's a non-directory or a subdirectory that moves to different parent). And that - after we got ->i_rwsem on parents (until then we don't know whether the target exists). Solution: try to be smart with locking order for inodes. We rely on the fact that tree topology may change only under ->s_vfs_rename_mutex _and_ that parent of the object we move will be locked. Thus we can rank directories by the tree (ancestors first) and rank all non-directories after them. That works since everybody except rename does "lock parent, lookup, lock child" and rename is under ->s_vfs_rename_mutex. HOWEVER, it relies on the assumption that any object with ->lookup() has no more than 1 dentry. If "hybrid" objects will ever appear, we'd better make sure that there's no link(2) for them.h]h)}(hXjwe may have to lock up to _four_ objects - parents and victim (if it exists), and source (if it's a non-directory or a subdirectory that moves to different parent). And that - after we got ->i_rwsem on parents (until then we don't know whether the target exists). Solution: try to be smart with locking order for inodes. We rely on the fact that tree topology may change only under ->s_vfs_rename_mutex _and_ that parent of the object we move will be locked. Thus we can rank directories by the tree (ancestors first) and rank all non-directories after them. That works since everybody except rename does "lock parent, lookup, lock child" and rename is under ->s_vfs_rename_mutex. HOWEVER, it relies on the assumption that any object with ->lookup() has no more than 1 dentry. If "hybrid" objects will ever appear, we'd better make sure that there's no link(2) for them.h]hXzwe may have to lock up to _four_ objects - parents and victim (if it exists), and source (if it’s a non-directory or a subdirectory that moves to different parent). And that - after we got ->i_rwsem on parents (until then we don’t know whether the target exists). Solution: try to be smart with locking order for inodes. We rely on the fact that tree topology may change only under ->s_vfs_rename_mutex _and_ that parent of the object we move will be locked. Thus we can rank directories by the tree (ancestors first) and rank all non-directories after them. That works since everybody except rename does “lock parent, lookup, lock child” and rename is under ->s_vfs_rename_mutex. HOWEVER, it relies on the assumption that any object with ->lookup() has no more than 1 dentry. If “hybrid” objects will ever appear, we’d better make sure that there’s no link(2) for them.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjMubah}(h]h ]h"]h$]h&]uh1jDhjubjD)}(hXconversion from fhandle to dentry may come in the wrong moment - when we are removing the target. Solution: we will have to grab ->i_rwsem in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_rwsem on parents, which works but leads to some truly excessive locking].h]h)}(hXconversion from fhandle to dentry may come in the wrong moment - when we are removing the target. Solution: we will have to grab ->i_rwsem in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_rwsem on parents, which works but leads to some truly excessive locking].h]hXconversion from fhandle to dentry may come in the wrong moment - when we are removing the target. Solution: we will have to grab ->i_rwsem in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_rwsem on parents, which works but leads to some truly excessive locking].}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjfubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]j loweralphajhjjϙuh1j#hjubah}(h]h ]h"]h$]h&]uh1jhj-hMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_readlink (C function)c.vfs_readlinkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hIint vfs_readlink (struct dentry *dentry, char __user *buffer, int buflen)h]j)}(hHint vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h vfs_readlinkh]jI)}(h vfs_readlinkh]h vfs_readlink}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h8(struct dentry *dentry, char __user *buffer, int buflen)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j)}jjsbc.vfs_readlinkasbuh1hhjubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hchar __user *bufferh](jf)}(hcharh]hchar}(hj[hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjWubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWubh__user}(hjWhhhNhNubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjI)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int buflenh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hbuflenh]hbuflen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h'copy symlink body into userspace bufferh]h'copy symlink body into userspace buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjVhNhNubj)}(hX **Parameters** ``struct dentry *dentry`` dentry on which to get symbolic link ``char __user *buffer`` user memory pointer ``int buflen`` size of buffer **Description** Does not touch atime. That's up to the caller if necessary Does not call security hook.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh](j)}(h?``struct dentry *dentry`` dentry on which to get symbolic link h](j)}(h``struct dentry *dentry``h]j)}(hj6h]hstruct dentry *dentry}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj0ubj)}(hhh]h)}(h$dentry on which to get symbolic linkh]h$dentry on which to get symbolic link}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubj)}(h,``char __user *buffer`` user memory pointer h](j)}(h``char __user *buffer``h]j)}(hjoh]hchar __user *buffer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjiubj)}(hhh]h)}(huser memory pointerh]huser memory pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubj)}(h``int buflen`` size of buffer h](j)}(h``int buflen``h]j)}(hjh]h int buflen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(h;Does not touch atime. That's up to the caller if necessaryh]h=Does not touch atime. That’s up to the caller if necessary}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(hDoes not call security hook.h]hDoes not call security hook.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_get_link (C function)c.vfs_get_linkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hLconst char * vfs_get_link (struct dentry *dentry, struct delayed_call *done)h]j)}(hJconst char *vfs_get_link(struct dentry *dentry, struct delayed_call *done)h](j )}(hjh]hconst}(hj7hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj3hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3hhhjDhMubjf)}(hcharh]hchar}(hjShhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj3hhhjDhMubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3hhhjDhMubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjDhMubjC)}(h vfs_get_linkh]jI)}(h vfs_get_linkh]h vfs_get_link}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj3hhhjDhMubj=)}(h2(struct dentry *dentry, struct delayed_call *done)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.vfs_get_linkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct delayed_call *doneh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(h delayed_callh]h delayed_call}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj )}j ]jc.vfs_get_linkasbuh1hhj ubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hdoneh]hdone}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj3hhhjDhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj/hhhjDhMubah}(h]j*ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjDhMhj,hhubjw)}(hhh]h)}(hget symlink bodyh]hget symlink body}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj,hhhjDhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXi**Parameters** ``struct dentry *dentry`` dentry on which to get symbolic link ``struct delayed_call *done`` caller needs to free returned data with this **Description** Calls security hook and i_op->get_link() on the supplied inode. It does not touch atime. That's up to the caller if necessary. Does not work on "special" symlinks like /proc/$$/fd/Nh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM"hjubj)}(hhh](j)}(h?``struct dentry *dentry`` dentry on which to get symbolic link h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubj)}(hhh]h)}(h$dentry on which to get symbolic linkh]h$dentry on which to get symbolic link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hK``struct delayed_call *done`` caller needs to free returned data with this h](j)}(h``struct delayed_call *done``h]j)}(hj h]hstruct delayed_call *done}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjubj)}(hhh]h)}(h,caller needs to free returned data with thish]h,caller needs to free returned data with this}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM"hjubh)}(h?Calls security hook and i_op->get_link() on the supplied inode.h]h?Calls security hook and i_op->get_link() on the supplied inode.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM!hjubh)}(h?It does not touch atime. That's up to the caller if necessary.h]hAIt does not touch atime. That’s up to the caller if necessary.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM#hjubh)}(h6Does not work on "special" symlinks like /proc/$$/fd/Nh]h:Does not work on “special” symlinks like /proc/$$/fd/N}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j page_get_link (C function)c.page_get_linkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hfconst char * page_get_link (struct dentry *dentry, struct inode *inode, struct delayed_call *callback)h]j)}(hdconst char *page_get_link(struct dentry *dentry, struct inode *inode, struct delayed_call *callback)h](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMWubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMWubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhjhMWubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMWubjC)}(h page_get_linkh]jI)}(h page_get_linkh]h page_get_link}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMWubj=)}(hK(struct dentry *dentry, struct inode *inode, struct delayed_call *callback)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj )}j ]j)}jjsbc.page_get_linkasbuh1hhjubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jFc.page_get_linkasbuh1hhjzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct delayed_call *callbackh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h delayed_callh]h delayed_call}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jFc.page_get_linkasbuh1hhjubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hcallbackh]hcallback}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMWubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMWubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMWhjhhubjw)}(hhh]h)}(h2An implementation of the get_link inode_operation.h]h2An implementation of the get_link inode_operation.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMWhjlhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` The directory entry which is the symlink. ``struct inode *inode`` The inode for the symlink. ``struct delayed_call *callback`` Used to drop the reference to the symlink. **Description** Filesystems which store their symlinks in the page cache should use this to implement the get_link() member of their inode_operations. **Return** A pointer to the NUL-terminated symlink.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM[hjubj)}(hhh](j)}(hD``struct dentry *dentry`` The directory entry which is the symlink. h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMXhjubj)}(hhh]h)}(h)The directory entry which is the symlink.h]h)The directory entry which is the symlink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h3``struct inode *inode`` The inode for the symlink. h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMYhjubj)}(hhh]h)}(hThe inode for the symlink.h]hThe inode for the symlink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubj)}(hM``struct delayed_call *callback`` Used to drop the reference to the symlink. h](j)}(h!``struct delayed_call *callback``h]j)}(hj"h]hstruct delayed_call *callback}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMZhjubj)}(hhh]h)}(h*Used to drop the reference to the symlink.h]h*Used to drop the reference to the symlink.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMZhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMZhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM\hjubh)}(hFilesystems which store their symlinks in the page cache should use this to implement the get_link() member of their inode_operations.h]hFilesystems which store their symlinks in the page cache should use this to implement the get_link() member of their inode_operations.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM[hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM^hjubh)}(h(A pointer to the NUL-terminated symlink.h]h(A pointer to the NUL-terminated symlink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j page_put_link (C function)c.page_put_linkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hvoid page_put_link (void *arg)h]j)}(hvoid page_put_link(void *arg)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMmubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMmubjC)}(h page_put_linkh]jI)}(h page_put_linkh]h page_put_link}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMmubj=)}(h (void *arg)h]jC)}(h void *argh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hargh]harg}(hj/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMmubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMmubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMmhjhhubjw)}(hhh]h)}(h"Drop the reference to the symlink.h]h"Drop the reference to the symlink.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMmhjVhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjVhNhNubj)}(hX>**Parameters** ``void *arg`` The folio which contains the symlink. **Description** This is used internally by page_get_link(). It is exported for use by filesystems which need to implement a variant of page_get_link() themselves. Despite the apparent symmetry, filesystems which use page_get_link() do not need to call page_put_link(). The argument, while it has a void pointer type, must be a pointer to the folio which was retrieved from the page cache. The delayed_call infrastructure is used to drop the reference count once the caller is done with the symlink.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMqhjuubj)}(hhh]j)}(h4``void *arg`` The folio which contains the symlink. h](j)}(h ``void *arg``h]j)}(hjh]h void *arg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMnhjubj)}(hhh]h)}(h%The folio which contains the symlink.h]h%The folio which contains the symlink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMphjuubh)}(hThis is used internally by page_get_link(). It is exported for use by filesystems which need to implement a variant of page_get_link() themselves. Despite the apparent symmetry, filesystems which use page_get_link() do not need to call page_put_link().h]hThis is used internally by page_get_link(). It is exported for use by filesystems which need to implement a variant of page_get_link() themselves. Despite the apparent symmetry, filesystems which use page_get_link() do not need to call page_put_link().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMohjuubh)}(hThe argument, while it has a void pointer type, must be a pointer to the folio which was retrieved from the page cache. The delayed_call infrastructure is used to drop the reference count once the caller is done with the symlink.h]hThe argument, while it has a void pointer type, must be a pointer to the folio which was retrieved from the page cache. The delayed_call infrastructure is used to drop the reference count once the caller is done with the symlink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMthjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j finish_open (C function) c.finish_openhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hfint finish_open (struct file *file, struct dentry *dentry, int (*open)(struct inode *, struct file *))h]j)}(hcint finish_open(struct file *file, struct dentry *dentry, int (*open)(struct inode*, struct file*))h](jf)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj%hhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM ubj2)}(h h]h }(hj8hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%hhhj7hM ubjC)}(h finish_openh]jI)}(h finish_openh]h finish_open}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj%hhhj7hM ubj=)}(hT(struct file *file, struct dentry *dentry, int (*open)(struct inode*, struct file*))h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjbubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbubh)}(hhh]jI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjLsb c.finish_openasbuh1hhjbubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj^ubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.finish_openasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hj/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj^ubjC)}(h(int (*open)(struct inode*, struct file*)h](jf)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjDubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubj)}(hjh]h(}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjI)}(hopenh]hopen}(hj~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjDubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.finish_openasbuh1hhjDubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubj )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjDubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubh)}(hhh]jI)}(hfileh]hfile}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj )}j ]j c.finish_openasbuh1hhjDubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjϙh]h)}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj^ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj%hhhj7hM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj!hhhj7hM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj7hM hjhhubjw)}(hhh]h)}(hfinish opening a fileh]hfinish opening a file}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM hjyhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj7hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXT**Parameters** ``struct file *file`` file pointer ``struct dentry *dentry`` pointer to dentry ``int (*open)(struct inode *, struct file *)`` open callback **Description** This can be used to finish opening a file passed to i_op->atomic_open(). If the open callback is set to NULL, then the standard f_op->open() filesystem callback is substituted. NB: the dentry reference is _not_ consumed. If, for example, the dentry is the return value of d_splice_alias(), then the caller needs to perform dput() on it after finish_open(). Returns zero on success or -errno if the open failed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubj)}(hhh](j)}(h#``struct file *file`` file pointer h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM hjubj)}(hhh]h)}(h file pointerh]h file pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h,``struct dentry *dentry`` pointer to dentry h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubj)}(hhh]h)}(hpointer to dentryh]hpointer to dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h=``int (*open)(struct inode *, struct file *)`` open callback h](j)}(h.``int (*open)(struct inode *, struct file *)``h]j)}(hj/h]h*int (*open)(struct inode *, struct file *)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhj)ubj)}(hhh]h)}(h open callbackh]h open callback}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubh)}(hHThis can be used to finish opening a file passed to i_op->atomic_open().h]hHThis can be used to finish opening a file passed to i_op->atomic_open().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubh)}(hgIf the open callback is set to NULL, then the standard f_op->open() filesystem callback is substituted.h]hgIf the open callback is set to NULL, then the standard f_op->open() filesystem callback is substituted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubh)}(hNB: the dentry reference is _not_ consumed. If, for example, the dentry is the return value of d_splice_alias(), then the caller needs to perform dput() on it after finish_open().h]hNB: the dentry reference is _not_ consumed. If, for example, the dentry is the return value of d_splice_alias(), then the caller needs to perform dput() on it after finish_open().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubh)}(h5Returns zero on success or -errno if the open failed.h]h5Returns zero on success or -errno if the open failed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j finish_no_open (C function)c.finish_no_openhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h=int finish_no_open (struct file *file, struct dentry *dentry)h]j)}(hah"]h$]h&]uh1j1hjhhhjhM'ubjC)}(hfinish_no_openh]jI)}(hfinish_no_openh]hfinish_no_open}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM'ubj=)}(h*(struct file *file, struct dentry *dentry)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfileh]hfile}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj )}j ]j)}jjsbc.finish_no_openasbuh1hhjubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfileh]hfile}(hjrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jSc.finish_no_openasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM'ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM'ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM'hjhhubjw)}(hhh]h)}(h/finish ->atomic_open() without opening the fileh]h/finish ->atomic_open() without opening the file}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM'hj hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct file *file`` file pointer ``struct dentry *dentry`` dentry, ERR_PTR(-E...) or NULL (as returned from ->lookup()) **Description** This can be used to set the result of a lookup in ->atomic_open(). NB: unlike finish_open() this function does consume the dentry reference and the caller need not dput() it. Returns 0 or -E..., which must be the return value of ->atomic_open() after having called this function.h](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM+hj(ubj)}(hhh](j)}(h#``struct file *file`` file pointer h](j)}(h``struct file *file``h]j)}(hjMh]hstruct file *file}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM)hjGubj)}(hhh]h)}(h file pointerh]h file pointer}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM)hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM)hjDubj)}(hW``struct dentry *dentry`` dentry, ERR_PTR(-E...) or NULL (as returned from ->lookup()) h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM*hjubj)}(hhh]h)}(hlookup())h]hlookup())}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM,hj(ubh)}(hBThis can be used to set the result of a lookup in ->atomic_open().h]hBThis can be used to set the result of a lookup in ->atomic_open().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM+hj(ubh)}(hkNB: unlike finish_open() this function does consume the dentry reference and the caller need not dput() it.h]hkNB: unlike finish_open() this function does consume the dentry reference and the caller need not dput() it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM-hj(ubh)}(hhReturns 0 or -E..., which must be the return value of ->atomic_open() after having called this function.h]hhReturns 0 or -E..., which must be the return value of ->atomic_open() after having called this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chM0hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j kernel_file_open (C function)c.kernel_file_openhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h\struct file * kernel_file_open (const struct path *path, int flags, const struct cred *cred)h]j)}(hZstruct file *kernel_file_open(const struct path *path, int flags, const struct cred *cred)h](j )}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhj1hMubh)}(hhh]jI)}(hfileh]hfile}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj )}j ]j)}jkernel_file_opensbc.kernel_file_openasbuh1hhj hhhj1hMubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhj1hMubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hMubjC)}(hkernel_file_openh]jI)}(hjah]hkernel_file_open}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhj1hMubj=)}(h=(const struct path *path, int flags, const struct cred *cred)h](jC)}(hconst struct path *pathh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hpathh]hpath}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j_c.kernel_file_openasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hpathh]hpath}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int flagsh](jf)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj%ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubjI)}(hflagsh]hflags}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct cred *credh](j )}(hjh]hconst}(hj^hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubj )}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubh)}(hhh]jI)}(hcredh]hcred}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j_c.kernel_file_openasbuh1hhjZubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjI)}(hcredh]hcred}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj hhhj1hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj1hMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj1hMhjhhubjw)}(hhh]h)}(h#open a file for kernel internal useh]h#open a file for kernel internal use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX{**Parameters** ``const struct path *path`` path of the file to open ``int flags`` open flags ``const struct cred *cred`` credentials for open **Description** Open a file for use by in-kernel consumers. The file is not accounted against nr_files and must not be installed into the file descriptor table. **Return** Opened file on success, an error pointer on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubj)}(hhh](j)}(h5``const struct path *path`` path of the file to open h](j)}(h``const struct path *path``h]j)}(hj;h]hconst struct path *path}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhj5ubj)}(hhh]h)}(hpath of the file to openh]hpath of the file to open}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubj)}(h``int flags`` open flags h](j)}(h ``int flags``h]j)}(hjth]h int flags}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjnubj)}(hhh]h)}(h open flagsh]h open flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhj2ubj)}(h1``const struct cred *cred`` credentials for open h](j)}(h``const struct cred *cred``h]j)}(hjh]hconst struct cred *cred}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubj)}(hhh]h)}(hcredentials for openh]hcredentials for open}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj2ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubh)}(hOpen a file for use by in-kernel consumers. The file is not accounted against nr_files and must not be installed into the file descriptor table.h]hOpen a file for use by in-kernel consumers. The file is not accounted against nr_files and must not be installed into the file descriptor table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubh)}(h4Opened file on success, an error pointer on failure.h]h4Opened file on success, an error pointer on failure.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j filp_open (C function) c.filp_openhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hGstruct file * filp_open (const char *filename, int flags, umode_t mode)h]j)}(hEstruct file *filp_open(const char *filename, int flags, umode_t mode)h](j )}(hjh]hstruct}(hjThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjPhhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMcubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjPhhhjahMcubh)}(hhh]jI)}(hfileh]hfile}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj )}j ]j)}j filp_opensb c.filp_openasbuh1hhjPhhhjahMcubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjPhhhjahMcubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjahMcubjC)}(h filp_openh]jI)}(hjh]h filp_open}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjPhhhjahMcubj=)}(h/(const char *filename, int flags, umode_t mode)h](jC)}(hconst char *filenameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfilenameh]hfilename}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int flagsh](jf)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj'ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'ubjI)}(hflagsh]hflags}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj )}j ]j c.filp_openasbuh1hhj\ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\ubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjPhhhjahMcubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjLhhhjahMcubah}(h]jGah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjahMchjIhhubjw)}(hhh]h)}(h!open file and return file pointerh]h!open file and return file pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMchjhhubah}(h]h ]h"]h$]h&]uh1jvhjIhhhjahMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXr**Parameters** ``const char *filename`` path to open ``int flags`` open flags as per the open(2) second argument ``umode_t mode`` mode for the new file if O_CREAT is set, else ignored **Description** This is the helper to open a file from kernelspace if you really have to. But in generally you should not do this, so please move along, nothing to see here..h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMghjubj)}(hhh](j)}(h&``const char *filename`` path to open h](j)}(h``const char *filename``h]j)}(hjh]hconst char *filename}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMehjubj)}(hhh]h)}(h path to openh]h path to open}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(h<``int flags`` open flags as per the open(2) second argument h](j)}(h ``int flags``h]j)}(hj3h]h int flags}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMfhj-ubj)}(hhh]h)}(h-open flags as per the open(2) second argumenth]h-open flags as per the open(2) second argument}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMfhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMfhjubj)}(hG``umode_t mode`` mode for the new file if O_CREAT is set, else ignored h](j)}(h``umode_t mode``h]j)}(hjlh]h umode_t mode}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMghjfubj)}(hhh]h)}(h5mode for the new file if O_CREAT is set, else ignoredh]h5mode for the new file if O_CREAT is set, else ignored}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMihjubh)}(hThis is the helper to open a file from kernelspace if you really have to. But in generally you should not do this, so please move along, nothing to see here..h]hThis is the helper to open a file from kernelspace if you really have to. But in generally you should not do this, so please move along, nothing to see here..}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./fs/open.chMhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_reset (C function) c.bio_resethNtauh1hhjVhhhNhNubj)}(hhh](j)}(hJvoid bio_reset (struct bio *bio, struct block_device *bdev, blk_opf_t opf)h]j)}(hIvoid bio_reset(struct bio *bio, struct block_device *bdev, blk_opf_t opf)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h bio_reseth]jI)}(h bio_reseth]h bio_reset}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h;(struct bio *bio, struct block_device *bdev, blk_opf_t opf)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubh)}(hhh]jI)}(hbioh]hbio}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj )}j ]j)}jjsb c.bio_resetasbuh1hhj%ubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!ubjC)}(hstruct block_device *bdevh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h block_deviceh]h block_device}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc c.bio_resetasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbdevh]hbdev}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!ubjC)}(h blk_opf_t opfh](h)}(hhh]jI)}(h blk_opf_th]h blk_opf_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc c.bio_resetasbuh1hhjubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hopfh]hopf}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hreinitialize a bioh]hreinitialize a bio}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjahhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio *bio`` bio to reset ``struct block_device *bdev`` block device to use the bio for ``blk_opf_t opf`` operation and flags for bio **Description** After calling bio_reset(), **bio** will be in the same state as a freshly allocated bio returned bio bio_alloc_bioset() - the only fields that are preserved are the ones that are initialized by bio_alloc_bioset(). See comment in struct bio.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM hjubj)}(hhh](j)}(h!``struct bio *bio`` bio to reset h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(h bio to reseth]h bio to reset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``struct block_device *bdev`` block device to use the bio for h](j)}(h``struct block_device *bdev``h]j)}(hjh]hstruct block_device *bdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM hjubj)}(hhh]h)}(hblock device to use the bio forh]hblock device to use the bio for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h.``blk_opf_t opf`` operation and flags for bio h](j)}(h``blk_opf_t opf``h]j)}(hjh]h blk_opf_t opf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM hjubj)}(hhh]h)}(hoperation and flags for bioh]hoperation and flags for bio}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM hjubj)}(hAfter calling bio_reset(), **bio** will be in the same state as a freshly allocated bio returned bio bio_alloc_bioset() - the only fields that are preserved are the ones that are initialized by bio_alloc_bioset(). See comment in struct bio.h]h)}(hAfter calling bio_reset(), **bio** will be in the same state as a freshly allocated bio returned bio bio_alloc_bioset() - the only fields that are preserved are the ones that are initialized by bio_alloc_bioset(). See comment in struct bio.h](hAfter calling bio_reset(), }(hjlhhhNhNubj)}(h**bio**h]hbio}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh will be in the same state as a freshly allocated bio returned bio bio_alloc_bioset() - the only fields that are preserved are the ones that are initialized by bio_alloc_bioset(). See comment in struct bio.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM hjhubah}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_reuse (C function) c.bio_reusehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h/void bio_reuse (struct bio *bio, blk_opf_t opf)h]j)}(h.void bio_reuse(struct bio *bio, blk_opf_t opf)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM"ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM"ubjC)}(h bio_reuseh]jI)}(h bio_reuseh]h bio_reuse}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM"ubj=)}(h (struct bio *bio, blk_opf_t opf)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.bio_reuseasbuh1hhjubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbioh]hbio}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h blk_opf_t opfh](h)}(hhh]jI)}(h blk_opf_th]h blk_opf_t}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj )}j ]j* c.bio_reuseasbuh1hhj^ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj^ubjI)}(hopfh]hopf}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM"ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM"ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM"hjhhubjw)}(hhh]h)}(h(reuse a bio with the payload left intacth]h(reuse a bio with the payload left intact}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM"hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM"ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXc**Parameters** ``struct bio *bio`` bio to reuse ``blk_opf_t opf`` operation and flags for the next I/O **Description** Allow reusing an existing bio for another operation with all set up fields including the payload, device and end_io handler left intact. Typically used when **bio** is first used to read data which is then written to another location without modification. **bio** must not be in-flight and owned by the caller. Can't be used for cloned bios. **Note** Can't be used when **bio** has integrity or blk-crypto contexts for now. Feel free to add that support when you need it, though.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM&hjubj)}(hhh](j)}(h!``struct bio *bio`` bio to reuse h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM#hjubj)}(hhh]h)}(h bio to reuseh]h bio to reuse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(h7``blk_opf_t opf`` operation and flags for the next I/O h](j)}(h``blk_opf_t opf``h]j)}(hj5h]h blk_opf_t opf}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM$hj/ubj)}(hhh]h)}(h$operation and flags for the next I/Oh]h$operation and flags for the next I/O}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM$hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhM$hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM&hjubh)}(hAllow reusing an existing bio for another operation with all set up fields including the payload, device and end_io handler left intact.h]hAllow reusing an existing bio for another operation with all set up fields including the payload, device and end_io handler left intact.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM%hjubh)}(hTypically used when **bio** is first used to read data which is then written to another location without modification. **bio** must not be in-flight and owned by the caller. Can't be used for cloned bios.h](hTypically used when }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh] is first used to read data which is then written to another location without modification. }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhQ must not be in-flight and owned by the caller. Can’t be used for cloned bios.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM(hjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM,hjubh)}(hCan't be used when **bio** has integrity or blk-crypto contexts for now. Feel free to add that support when you need it, though.h](hCan’t be used when }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhf has integrity or blk-crypto contexts for now. Feel free to add that support when you need it, though.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM-hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_chain (C function) c.bio_chainhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h4void bio_chain (struct bio *bio, struct bio *parent)h]j)}(h3void bio_chain(struct bio *bio, struct bio *parent)h](jf)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMWubj2)}(h h]h }(hj0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj/hMWubjC)}(h bio_chainh]jI)}(h bio_chainh]h bio_chain}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj/hMWubj=)}(h%(struct bio *bio, struct bio *parent)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubh)}(hhh]jI)}(hbioh]hbio}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj )}j ]j)}jjDsb c.bio_chainasbuh1hhjZubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjVubjC)}(hstruct bio *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.bio_chainasbuh1hhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjVubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj/hMWubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj/hMWubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj/hMWhjhhubjw)}(hhh]h)}(hchain bio completionsh]hchain bio completions}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMWhjNhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj/hMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio *bio`` the target bio ``struct bio *parent`` the parent bio of **bio** **Description** The caller won't have a bi_end_io called when **bio** completes - instead, **parent**'s bi_end_io won't be called until both **parent** and **bio** have completed; the chained bio will also be freed when it completes. The caller must not set bi_private or bi_end_io in **bio**.h](h)}(h**Parameters**h]j)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM[hjmubj)}(hhh](j)}(h#``struct bio *bio`` the target bio h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMXhjubj)}(hhh]h)}(hthe target bioh]hthe target bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h1``struct bio *parent`` the parent bio of **bio** h](j)}(h``struct bio *parent``h]j)}(hjh]hstruct bio *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMYhjubj)}(hhh]h)}(hthe parent bio of **bio**h](hthe parent bio of }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubeh}(h]h ]h"]h$]h&]uh1jhjmubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM[hjmubh)}(hThe caller won't have a bi_end_io called when **bio** completes - instead, **parent**'s bi_end_io won't be called until both **parent** and **bio** have completed; the chained bio will also be freed when it completes.h](h0The caller won’t have a bi_end_io called when }(hj*hhhNhNubj)}(h**bio**h]hbio}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh completes - instead, }(hj*hhhNhNubj)}(h **parent**h]hparent}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh,’s bi_end_io won’t be called until both }(hj*hhhNhNubj)}(h **parent**h]hparent}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh and }(hj*hhhNhNubj)}(h**bio**h]hbio}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubhF have completed; the chained bio will also be freed when it completes.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMZhjmubh)}(h;The caller must not set bi_private or bi_end_io in **bio**.h](h3The caller must not set bi_private or bi_end_io in }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM^hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_alloc_bioset (C function)c.bio_alloc_biosethNtauh1hhjVhhhNhNubj)}(hhh](j)}(hstruct bio * bio_alloc_bioset (struct block_device *bdev, unsigned short nr_vecs, blk_opf_t opf, gfp_t gfp, struct bio_set *bs)h]j)}(h}struct bio *bio_alloc_bioset(struct block_device *bdev, unsigned short nr_vecs, blk_opf_t opf, gfp_t gfp, struct bio_set *bs)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jbio_alloc_biosetsbc.bio_alloc_biosetasbuh1hhjhhhjhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hbio_alloc_bioseth]jI)}(hjh]hbio_alloc_bioset}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(ha(struct block_device *bdev, unsigned short nr_vecs, blk_opf_t opf, gfp_t gfp, struct bio_set *bs)h](jC)}(hstruct block_device *bdevh](j )}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj8ubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8ubh)}(hhh]jI)}(h block_deviceh]h block_device}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj )}j ]jc.bio_alloc_biosetasbuh1hhj8ubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjI)}(hbdevh]hbdev}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4ubjC)}(hunsigned short nr_vecsh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hshorth]hshort}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hnr_vecsh]hnr_vecs}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4ubjC)}(h blk_opf_t opfh](h)}(hhh]jI)}(h blk_opf_th]h blk_opf_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bio_alloc_biosetasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hopfh]hopf}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4ubjC)}(h gfp_t gfph](h)}(hhh]jI)}(hgfp_th]hgfp_t}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj )}j ]jc.bio_alloc_biosetasbuh1hhjAubj2)}(h h]h }(hjfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubjI)}(hgfph]hgfp}(hjthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4ubjC)}(hstruct bio_set *bsh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbio_seth]hbio_set}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bio_alloc_biosetasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbsh]hbs}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj4ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hallocate a bio for I/Oh]hallocate a bio for I/O}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhjVhNhNubj)}(hX **Parameters** ``struct block_device *bdev`` block device to allocate the bio for (can be ``NULL``) ``unsigned short nr_vecs`` number of bvecs to pre-allocate ``blk_opf_t opf`` operation and flags for bio ``gfp_t gfp`` the GFP_* mask given to the slab allocator ``struct bio_set *bs`` the bio_set to allocate from. **Description** Allocate a bio from the mempools in **bs**. If ``__GFP_DIRECT_RECLAIM`` is set then bio_alloc will always be able to allocate a bio. This is due to the mempool guarantees. To make this work, callers must never allocate more than 1 bio at a time from the general pool. Callers that need to allocate more than 1 bio must always submit the previously allocated bio for IO before attempting to allocate a new one. Failure to do so can cause deadlocks under memory pressure. Note that when running under submit_bio_noacct() (i.e. any block driver), bios are not submitted until after you return - see the code in submit_bio_noacct() that converts recursion into iteration, to prevent stack overflows. This would normally mean allocating multiple bios under submit_bio_noacct() would be susceptible to deadlocks, but we have deadlock avoidance code that resubmits any blocked bios from a rescuer thread. However, we do not guarantee forward progress for allocations from other mempools. Doing multiple allocations from the same mempool under submit_bio_noacct() should be avoided - instead, use bio_set's front_pad for per bio allocations. **Return** Pointer to new bio on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj*ubj)}(hhh](j)}(hU``struct block_device *bdev`` block device to allocate the bio for (can be ``NULL``) h](j)}(h``struct block_device *bdev``h]j)}(hjOh]hstruct block_device *bdev}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjIubj)}(hhh]h)}(h6block device to allocate the bio for (can be ``NULL``)h](h-block device to allocate the bio for (can be }(hjhhhhNhNubj)}(h``NULL``h]hNULL}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh)}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubj)}(h;``unsigned short nr_vecs`` number of bvecs to pre-allocate h](j)}(h``unsigned short nr_vecs``h]j)}(hjh]hunsigned short nr_vecs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hnumber of bvecs to pre-allocateh]hnumber of bvecs to pre-allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h.``blk_opf_t opf`` operation and flags for bio h](j)}(h``blk_opf_t opf``h]j)}(hjh]h blk_opf_t opf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hoperation and flags for bioh]hoperation and flags for bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h9``gfp_t gfp`` the GFP_* mask given to the slab allocator h](j)}(h ``gfp_t gfp``h]j)}(hj h]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(h*the GFP_* mask given to the slab allocatorh]h*the GFP_* mask given to the slab allocator}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjFubj)}(h5``struct bio_set *bs`` the bio_set to allocate from. h](j)}(h``struct bio_set *bs``h]j)}(hjEh]hstruct bio_set *bs}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj?ubj)}(hhh]h)}(hthe bio_set to allocate from.h]hthe bio_set to allocate from.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj*ubh)}(h+Allocate a bio from the mempools in **bs**.h](h$Allocate a bio from the mempools in }(hjhhhNhNubj)}(h**bs**h]hbs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj*ubh)}(hXIf ``__GFP_DIRECT_RECLAIM`` is set then bio_alloc will always be able to allocate a bio. This is due to the mempool guarantees. To make this work, callers must never allocate more than 1 bio at a time from the general pool. Callers that need to allocate more than 1 bio must always submit the previously allocated bio for IO before attempting to allocate a new one. Failure to do so can cause deadlocks under memory pressure.h](hIf }(hjhhhNhNubj)}(h``__GFP_DIRECT_RECLAIM``h]h__GFP_DIRECT_RECLAIM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX is set then bio_alloc will always be able to allocate a bio. This is due to the mempool guarantees. To make this work, callers must never allocate more than 1 bio at a time from the general pool. Callers that need to allocate more than 1 bio must always submit the previously allocated bio for IO before attempting to allocate a new one. Failure to do so can cause deadlocks under memory pressure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj*ubh)}(hNote that when running under submit_bio_noacct() (i.e. any block driver), bios are not submitted until after you return - see the code in submit_bio_noacct() that converts recursion into iteration, to prevent stack overflows.h]hNote that when running under submit_bio_noacct() (i.e. any block driver), bios are not submitted until after you return - see the code in submit_bio_noacct() that converts recursion into iteration, to prevent stack overflows.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj*ubh)}(hThis would normally mean allocating multiple bios under submit_bio_noacct() would be susceptible to deadlocks, but we have deadlock avoidance code that resubmits any blocked bios from a rescuer thread.h]hThis would normally mean allocating multiple bios under submit_bio_noacct() would be susceptible to deadlocks, but we have deadlock avoidance code that resubmits any blocked bios from a rescuer thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM hj*ubh)}(hHowever, we do not guarantee forward progress for allocations from other mempools. Doing multiple allocations from the same mempool under submit_bio_noacct() should be avoided - instead, use bio_set's front_pad for per bio allocations.h]hHowever, we do not guarantee forward progress for allocations from other mempools. Doing multiple allocations from the same mempool under submit_bio_noacct() should be avoided - instead, use bio_set’s front_pad for per bio allocations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj*ubh)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj*ubh)}(h/Pointer to new bio on success, NULL on failure.h]h/Pointer to new bio on success, NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_kmalloc (C function) c.bio_kmallochNtauh1hhjVhhhNhNubj)}(hhh](j)}(hAstruct bio * bio_kmalloc (unsigned short nr_vecs, gfp_t gfp_mask)h]j)}(h?struct bio *bio_kmalloc(unsigned short nr_vecs, gfp_t gfp_mask)h](j )}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjHhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMlubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHhhhjYhMlubh)}(hhh]jI)}(hbioh]hbio}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj )}j ]j)}j bio_kmallocsb c.bio_kmallocasbuh1hhjHhhhjYhMlubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHhhhjYhMlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhMlubjC)}(h bio_kmalloch]jI)}(hjh]h bio_kmalloc}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjHhhhjYhMlubj=)}(h((unsigned short nr_vecs, gfp_t gfp_mask)h](jC)}(hunsigned short nr_vecsh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hshorth]hshort}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hnr_vecsh]hnr_vecs}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hgfp_t gfp_maskh](h)}(hhh]jI)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.bio_kmallocasbuh1hhjubj2)}(h h]h }(hj8hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hgfp_maskh]hgfp_mask}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjHhhhjYhMlubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjDhhhjYhMlubah}(h]j?ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjYhMlhjAhhubjw)}(hhh]h)}(h kmalloc a bioh]h kmalloc a bio}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMlhjmhhubah}(h]h ]h"]h$]h&]uh1jvhjAhhhjYhMlubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``unsigned short nr_vecs`` number of bio_vecs to allocate ``gfp_t gfp_mask`` the GFP_* mask given to the slab allocator **Description** Use kmalloc to allocate a bio (including bvecs). The bio must be initialized using bio_init() before use. To free a bio returned from this function use kfree() after calling bio_uninit(). A bio returned from this function can be reused by calling bio_uninit() before calling bio_init() again. Note that unlike bio_alloc() or bio_alloc_bioset() allocations from this function are not backed by a mempool can fail. Do not use this function for allocations in the file system I/O path. **Return** Pointer to new bio on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMphjubj)}(hhh](j)}(h:``unsigned short nr_vecs`` number of bio_vecs to allocate h](j)}(h``unsigned short nr_vecs``h]j)}(hjh]hunsigned short nr_vecs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMmhjubj)}(hhh]h)}(hnumber of bio_vecs to allocateh]hnumber of bio_vecs to allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjubj)}(h>``gfp_t gfp_mask`` the GFP_* mask given to the slab allocator h](j)}(h``gfp_t gfp_mask``h]j)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMnhjubj)}(hhh]h)}(h*the GFP_* mask given to the slab allocatorh]h*the GFP_* mask given to the slab allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMphjubh)}(hX'Use kmalloc to allocate a bio (including bvecs). The bio must be initialized using bio_init() before use. To free a bio returned from this function use kfree() after calling bio_uninit(). A bio returned from this function can be reused by calling bio_uninit() before calling bio_init() again.h]hX'Use kmalloc to allocate a bio (including bvecs). The bio must be initialized using bio_init() before use. To free a bio returned from this function use kfree() after calling bio_uninit(). A bio returned from this function can be reused by calling bio_uninit() before calling bio_init() again.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMohjubh)}(hNote that unlike bio_alloc() or bio_alloc_bioset() allocations from this function are not backed by a mempool can fail. Do not use this function for allocations in the file system I/O path.h]hNote that unlike bio_alloc() or bio_alloc_bioset() allocations from this function are not backed by a mempool can fail. Do not use this function for allocations in the file system I/O path.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMthjubh)}(h **Return**h]j)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMxhjubh)}(h/Pointer to new bio on success, NULL on failure.h]h/Pointer to new bio on success, NULL on failure.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMyhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_put (C function) c.bio_puthNtauh1hhjVhhhNhNubj)}(hhh](j)}(hvoid bio_put (struct bio *bio)h]j)}(hvoid bio_put(struct bio *bio)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMCubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMCubjC)}(hbio_puth]jI)}(hbio_puth]hbio_put}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMCubj=)}(h(struct bio *bio)h]jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.bio_putasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbioh]hbio}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMCubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMCubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMChjhhubjw)}(hhh]h)}(hrelease a reference to a bioh]hrelease a reference to a bio}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMChj]hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct bio *bio`` bio to release reference to **Description** Put a reference to a :c:type:`struct bio `, either one you have gotten with bio_alloc, bio_get or bio_clone_*. The last put of a bio will free it.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMGhj|ubj)}(hhh]j)}(h0``struct bio *bio`` bio to release reference to h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMDhjubj)}(hhh]h)}(hbio to release reference toh]hbio to release reference to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMFhj|ubj)}(hPut a reference to a :c:type:`struct bio `, either one you have gotten with bio_alloc, bio_get or bio_clone_*. The last put of a bio will free it.h]h)}(hPut a reference to a :c:type:`struct bio `, either one you have gotten with bio_alloc, bio_get or bio_clone_*. The last put of a bio will free it.h](hPut a reference to a }(hjhhhNhNubh)}(h:c:type:`struct bio `h]j)}(hjh]h struct bio}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj  refdomainjreftypetype refexplicitrefwarnjj j biouh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMFhjubhh, either one you have gotten with bio_alloc, bio_get or bio_clone_*. The last put of a bio will free it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjhMFhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_alloc_clone (C function)c.bio_alloc_clonehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hlstruct bio * bio_alloc_clone (struct block_device *bdev, struct bio *bio_src, gfp_t gfp, struct bio_set *bs)h]j)}(hjstruct bio *bio_alloc_clone(struct block_device *bdev, struct bio *bio_src, gfp_t gfp, struct bio_set *bs)h](j )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMqubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJhhhj[hMqubh)}(hhh]jI)}(hbioh]hbio}(hjmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj )}j ]j)}jbio_alloc_clonesbc.bio_alloc_cloneasbuh1hhjJhhhj[hMqubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJhhhj[hMqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj[hMqubjC)}(hbio_alloc_cloneh]jI)}(hjh]hbio_alloc_clone}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjJhhhj[hMqubj=)}(hO(struct block_device *bdev, struct bio *bio_src, gfp_t gfp, struct bio_set *bs)h](jC)}(hstruct block_device *bdevh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h block_deviceh]h block_device}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bio_alloc_cloneasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbdevh]hbdev}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct bio *bio_srch](j )}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj4ubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj4ubh)}(hhh]jI)}(hbioh]hbio}(hjVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj )}j ]jc.bio_alloc_cloneasbuh1hhj4ubj2)}(h h]h }(hjthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj4ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjI)}(hbio_srch]hbio_src}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h gfp_t gfph](h)}(hhh]jI)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bio_alloc_cloneasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct bio_set *bsh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbio_seth]hbio_set}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bio_alloc_cloneasbuh1hhjubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbsh]hbs}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjJhhhj[hMqubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjFhhhj[hMqubah}(h]jAah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj[hMqhjChhubjw)}(hhh]h)}(h1clone a bio that shares the original bio's biovech]h3clone a bio that shares the original bio’s biovec}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMqhjnhhubah}(h]h ]h"]h$]h&]uh1jvhjChhhj[hMqubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX&**Parameters** ``struct block_device *bdev`` block_device to clone onto ``struct bio *bio_src`` bio to clone from ``gfp_t gfp`` allocation priority ``struct bio_set *bs`` bio_set to allocate from **Description** Allocate a new bio that is a clone of **bio_src**. This reuses the bio_vecs pointed to by **bio_src->bi_io_vec**, and clones the iterator pointing to the current position in it. The caller owns the returned bio, but not the bio_vecs, and must ensure the bio is freed before the memory pointed to by **bio_Src->bi_io_vecs**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMuhjubj)}(hhh](j)}(h9``struct block_device *bdev`` block_device to clone onto h](j)}(h``struct block_device *bdev``h]j)}(hjh]hstruct block_device *bdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMrhjubj)}(hhh]h)}(hblock_device to clone ontoh]hblock_device to clone onto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubj)}(h*``struct bio *bio_src`` bio to clone from h](j)}(h``struct bio *bio_src``h]j)}(hjh]hstruct bio *bio_src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMshjubj)}(hhh]h)}(hbio to clone fromh]hbio to clone from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubj)}(h"``gfp_t gfp`` allocation priority h](j)}(h ``gfp_t gfp``h]j)}(hj$h]h gfp_t gfp}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMthjubj)}(hhh]h)}(hallocation priorityh]hallocation priority}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMthj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMthjubj)}(h0``struct bio_set *bs`` bio_set to allocate from h](j)}(h``struct bio_set *bs``h]j)}(hj]h]hstruct bio_set *bs}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMuhjWubj)}(hhh]h)}(hbio_set to allocate fromh]hbio_set to allocate from}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMuhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMuhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMwhjubh)}(hXDAllocate a new bio that is a clone of **bio_src**. This reuses the bio_vecs pointed to by **bio_src->bi_io_vec**, and clones the iterator pointing to the current position in it. The caller owns the returned bio, but not the bio_vecs, and must ensure the bio is freed before the memory pointed to by **bio_Src->bi_io_vecs**.h](h&Allocate a new bio that is a clone of }(hjhhhNhNubj)}(h **bio_src**h]hbio_src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh). This reuses the bio_vecs pointed to by }(hjhhhNhNubj)}(h**bio_src->bi_io_vec**h]hbio_src->bi_io_vec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, and clones the iterator pointing to the current position in it. The caller owns the returned bio, but not the bio_vecs, and must ensure the bio is freed before the memory pointed to by }(hjhhhNhNubj)}(h**bio_Src->bi_io_vecs**h]hbio_Src->bi_io_vecs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_init_clone (C function)c.bio_init_clonehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h_int bio_init_clone (struct block_device *bdev, struct bio *bio, struct bio *bio_src, gfp_t gfp)h]j)}(h^int bio_init_clone(struct block_device *bdev, struct bio *bio, struct bio *bio_src, gfp_t gfp)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj!hMubjC)}(hbio_init_cloneh]jI)}(hbio_init_cloneh]hbio_init_clone}(hj4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj!hMubj=)}(hL(struct block_device *bdev, struct bio *bio, struct bio *bio_src, gfp_t gfp)h](jC)}(hstruct block_device *bdevh](j )}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjLubj2)}(h h]h }(hj]hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjLubh)}(hhh]jI)}(h block_deviceh]h block_device}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj )}j ]j)}jj6sbc.bio_init_cloneasbuh1hhjLubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubjI)}(hbdevh]hbdev}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjHubjC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bio_init_cloneasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjHubjC)}(hstruct bio *bio_srch](j )}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj.ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.ubh)}(hhh]jI)}(hbioh]hbio}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj )}j ]jc.bio_init_cloneasbuh1hhj.ubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjI)}(hbio_srch]hbio_src}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjHubjC)}(h gfp_t gfph](h)}(hhh]jI)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bio_init_cloneasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjHubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj!hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhj!hMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj!hMhjhhubjw)}(hhh]h)}(h1clone a bio that shares the original bio's biovech]h3clone a bio that shares the original bio’s biovec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXq**Parameters** ``struct block_device *bdev`` block_device to clone onto ``struct bio *bio`` bio to clone into ``struct bio *bio_src`` bio to clone from ``gfp_t gfp`` allocation priority **Description** Initialize a new bio in caller provided memory that is a clone of **bio_src**. The same bio_vecs reuse and bio lifetime rules as bio_alloc_clone() apply.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh](j)}(h9``struct block_device *bdev`` block_device to clone onto h](j)}(h``struct block_device *bdev``h]j)}(hj<h]hstruct block_device *bdev}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj6ubj)}(hhh]h)}(hblock_device to clone ontoh]hblock_device to clone onto}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubj)}(h&``struct bio *bio`` bio to clone into h](j)}(h``struct bio *bio``h]j)}(hjuh]hstruct bio *bio}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjoubj)}(hhh]h)}(hbio to clone intoh]hbio to clone into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubj)}(h*``struct bio *bio_src`` bio to clone from h](j)}(h``struct bio *bio_src``h]j)}(hjh]hstruct bio *bio_src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hbio to clone fromh]hbio to clone from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubj)}(h"``gfp_t gfp`` allocation priority h](j)}(h ``gfp_t gfp``h]j)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hallocation priorityh]hallocation priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubh)}(hInitialize a new bio in caller provided memory that is a clone of **bio_src**. The same bio_vecs reuse and bio lifetime rules as bio_alloc_clone() apply.h](hBInitialize a new bio in caller provided memory that is a clone of }(hj8hhhNhNubj)}(h **bio_src**h]hbio_src}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubhL. The same bio_vecs reuse and bio lifetime rules as bio_alloc_clone() apply.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j __bio_add_page (C function)c.__bio_add_pagehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h\void __bio_add_page (struct bio *bio, struct page *page, unsigned int len, unsigned int off)h]j)}(h[void __bio_add_page(struct bio *bio, struct page *page, unsigned int len, unsigned int off)h](jf)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjuhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjuhhhjhMubjC)}(h__bio_add_pageh]jI)}(h__bio_add_pageh]h__bio_add_page}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjuhhhjhMubj=)}(hH(struct bio *bio, struct page *page, unsigned int len, unsigned int off)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.__bio_add_pageasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct page *pageh](j )}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj$ubj2)}(h h]h }(hj5hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubh)}(hhh]jI)}(hpageh]hpage}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj )}j ]jc.__bio_add_pageasbuh1hhj$ubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjI)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hunsigned int lenh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hunsigned int offh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hoffh]hoff}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjuhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjqhhhjhMubah}(h]jlah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjnhhubjw)}(hhh]h)}(h%add page(s) to a bio in a new segmenth]h%add page(s) to a bio in a new segment}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jvhjnhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio *bio`` destination bio ``struct page *page`` start page to add ``unsigned int len`` length of the data to add, may cross pages ``unsigned int off`` offset of the data relative to **page**, may cross pages **Description** Add the data at **page** + **off** to **bio** as a new bvec. The caller must ensure that **bio** has space for another bvec.h](h)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjgubj)}(hhh](j)}(h$``struct bio *bio`` destination bio h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hdestination bioh]hdestination bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``struct page *page`` start page to add h](j)}(h``struct page *page``h]j)}(hjh]hstruct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hstart page to addh]hstart page to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``unsigned int len`` length of the data to add, may cross pages h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(h*length of the data to add, may cross pagesh]h*length of the data to add, may cross pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hN``unsigned int off`` offset of the data relative to **page**, may cross pages h](j)}(h``unsigned int off``h]j)}(hj7h]hunsigned int off}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj1ubj)}(hhh]h)}(h8offset of the data relative to **page**, may cross pagesh](hoffset of the data relative to }(hjPhhhNhNubj)}(h**page**h]hpage}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh, may cross pages}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubeh}(h]h ]h"]h$]h&]uh1jhjgubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjgubh)}(h}Add the data at **page** + **off** to **bio** as a new bvec. The caller must ensure that **bio** has space for another bvec.h](hAdd the data at }(hjhhhNhNubj)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**off**h]hoff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- as a new bvec. The caller must ensure that }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh has space for another bvec.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  bio_add_virt_nofail (C function)c.bio_add_virt_nofailhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hEvoid bio_add_virt_nofail (struct bio *bio, void *vaddr, unsigned len)h]j)}(hDvoid bio_add_virt_nofail(struct bio *bio, void *vaddr, unsigned len)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhjhMubjC)}(hbio_add_virt_nofailh]jI)}(hbio_add_virt_nofailh]hbio_add_virt_nofail}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhjhMubj=)}(h,(struct bio *bio, void *vaddr, unsigned len)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(hbioh]hbio}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]j)}jj4sbc.bio_add_virt_nofailasbuh1hhjJubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(h void *vaddrh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvaddrh]hvaddr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(h unsigned lenh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubeh}(h]h ]h"]h$]h&]j`jauh1j<hj hhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h.add data in the direct kernel mapping to a bioh]h.add data in the direct kernel mapping to a bio}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1jhhhjVhNhNubj)}(hXK**Parameters** ``struct bio *bio`` destination bio ``void *vaddr`` data to add ``unsigned len`` length of the data to add, may cross pages **Description** Add the data at **vaddr** to **bio**. The caller must have ensure a segment is available for the added data. No merging into an existing segment will be performed.h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjdubj)}(hhh](j)}(h$``struct bio *bio`` destination bio h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hdestination bioh]hdestination bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``void *vaddr`` data to add h](j)}(h``void *vaddr``h]j)}(hjh]h void *vaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(h data to addh]h data to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``unsigned len`` length of the data to add, may cross pages h](j)}(h``unsigned len``h]j)}(hjh]h unsigned len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(h*length of the data to add, may cross pagesh]h*length of the data to add, may cross pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjdubh)}(hAdd the data at **vaddr** to **bio**. The caller must have ensure a segment is available for the added data. No merging into an existing segment will be performed.h](hAdd the data at }(hjLhhhNhNubj)}(h **vaddr**h]hvaddr}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh to }(hjLhhhNhNubj)}(h**bio**h]hbio}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh. The caller must have ensure a segment is available for the added data. No merging into an existing segment will be performed.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_add_page (C function)c.bio_add_pagehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h\int bio_add_page (struct bio *bio, struct page *page, unsigned int len, unsigned int offset)h]j)}(h[int bio_add_page(struct bio *bio, struct page *page, unsigned int len, unsigned int offset)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM ubjC)}(h bio_add_pageh]jI)}(h bio_add_pageh]h bio_add_page}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM ubj=)}(hK(struct bio *bio, struct page *page, unsigned int len, unsigned int offset)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.bio_add_pageasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbioh]hbio}(hj5hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct page *pageh](j )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(hpageh]hpage}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]jc.bio_add_pageasbuh1hhjJubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hunsigned int lenh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hunsigned int offseth](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjf)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hoffseth]hoffset}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM hjhhubjw)}(hhh]h)}(hattempt to add page(s) to bioh]hattempt to add page(s) to bio}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM hjnhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio *bio`` destination bio ``struct page *page`` start page to add ``unsigned int len`` vec entry length, may cross pages ``unsigned int offset`` vec entry offset relative to **page**, may cross pages **Description** Attempt to add page(s) to the bio_vec maplist. This will only fail if either bio->bi_vcnt == bio->bi_max_vecs or it's a cloned bio.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh](j)}(h$``struct bio *bio`` destination bio h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hdestination bioh]hdestination bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``struct page *page`` start page to add h](j)}(h``struct page *page``h]j)}(hjh]hstruct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hstart page to addh]hstart page to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h7``unsigned int len`` vec entry length, may cross pages h](j)}(h``unsigned int len``h]j)}(hj$ h]hunsigned int len}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj" ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj ubj)}(hhh]h)}(h!vec entry length, may cross pagesh]h!vec entry length, may cross pages}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9 hMhj: ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj9 hMhjubj)}(hO``unsigned int offset`` vec entry offset relative to **page**, may cross pages h](j)}(h``unsigned int offset``h]j)}(hj] h]hunsigned int offset}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjW ubj)}(hhh]h)}(h6vec entry offset relative to **page**, may cross pagesh](hvec entry offset relative to }(hjv hhhNhNubj)}(h**page**h]hpage}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubh, may cross pages}(hjv hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjr hMhjs ubah}(h]h ]h"]h$]h&]uh1jhjW ubeh}(h]h ]h"]h$]h&]uh1jhjr hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hAttempt to add page(s) to the bio_vec maplist. This will only fail if either bio->bi_vcnt == bio->bi_max_vecs or it's a cloned bio.h]h)}(hAttempt to add page(s) to the bio_vec maplist. This will only fail if either bio->bi_vcnt == bio->bi_max_vecs or it's a cloned bio.h]hAttempt to add page(s) to the bio_vec maplist. This will only fail if either bio->bi_vcnt == bio->bi_max_vecs or it’s a cloned bio.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj ubah}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_add_folio (C function)c.bio_add_foliohNtauh1hhjVhhhNhNubj)}(hhh](j)}(hQbool bio_add_folio (struct bio *bio, struct folio *folio, size_t len, size_t off)h]j)}(hPbool bio_add_folio(struct bio *bio, struct folio *folio, size_t len, size_t off)h](jf)}(hjih]hbool}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM>ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhj hM>ubjC)}(h bio_add_folioh]jI)}(h bio_add_folioh]h bio_add_folio}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhj hM>ubj=)}(h>(struct bio *bio, struct folio *folio, size_t len, size_t off)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hj5 hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj1 ubj2)}(h h]h }(hjB hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1 ubh)}(hhh]jI)}(hbioh]hbio}(hjS hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjP ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjU modnameN classnameNjj )}j ]j)}jj sbc.bio_add_folioasbuh1hhj1 ubj2)}(h h]h }(hjs hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1 ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 ubjI)}(hbioh]hbio}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1 ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj- ubjC)}(hstruct folio *folioh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]jo c.bio_add_folioasbuh1hhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj- ubjC)}(h size_t lenh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]jo c.bio_add_folioasbuh1hhj ubj2)}(h h]h }(hj8 hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hlenh]hlen}(hjF hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj- ubjC)}(h size_t offh](h)}(hhh]jI)}(hsize_th]hsize_t}(hjb hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjd modnameN classnameNjj )}j ]jo c.bio_add_folioasbuh1hhj[ ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ ubjI)}(hoffh]hoff}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj- ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj hhhj hM>ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhj hM>ubah}(h]j ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hM>hj hhubjw)}(hhh]h)}(h(Attempt to add part of a folio to a bio.h]h(Attempt to add part of a folio to a bio.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM>hj hhubah}(h]h ]h"]h$]h&]uh1jvhj hhhj hM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjVhNhNubj)}(hX$**Parameters** ``struct bio *bio`` BIO to add to. ``struct folio *folio`` Folio to add. ``size_t len`` How many bytes from the folio to add. ``size_t off`` First byte in this folio to add. **Description** Filesystems that use folios can call this function instead of calling bio_add_page() for each page in the folio. If **off** is bigger than PAGE_SIZE, this function can create a bio_vec that starts in a page after the bv_page. BIOs do not support folios that are 4GiB or larger. **Return** Whether the addition was successful.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMBhj ubj)}(hhh](j)}(h#``struct bio *bio`` BIO to add to. h](j)}(h``struct bio *bio``h]j)}(hj h]hstruct bio *bio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM?hj ubj)}(hhh]h)}(hBIO to add to.h]hBIO to add to.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM?hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM?hj ubj)}(h&``struct folio *folio`` Folio to add. h](j)}(h``struct folio *folio``h]j)}(hj2 h]hstruct folio *folio}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM@hj, ubj)}(hhh]h)}(h Folio to add.h]h Folio to add.}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG hM@hjH ubah}(h]h ]h"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]uh1jhjG hM@hj ubj)}(h5``size_t len`` How many bytes from the folio to add. h](j)}(h``size_t len``h]j)}(hjk h]h size_t len}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMAhje ubj)}(hhh]h)}(h%How many bytes from the folio to add.h]h%How many bytes from the folio to add.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMAhj ubah}(h]h ]h"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]uh1jhj hMAhj ubj)}(h0``size_t off`` First byte in this folio to add. h](j)}(h``size_t off``h]j)}(hj h]h size_t off}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMBhj ubj)}(hhh]h)}(h First byte in this folio to add.h]h First byte in this folio to add.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMBhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMBhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMDhj ubh)}(hXFilesystems that use folios can call this function instead of calling bio_add_page() for each page in the folio. If **off** is bigger than PAGE_SIZE, this function can create a bio_vec that starts in a page after the bv_page. BIOs do not support folios that are 4GiB or larger.h](huFilesystems that use folios can call this function instead of calling bio_add_page() for each page in the folio. If }(hj hhhNhNubj)}(h**off**h]hoff}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is bigger than PAGE_SIZE, this function can create a bio_vec that starts in a page after the bv_page. BIOs do not support folios that are 4GiB or larger.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMChj ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMHhj ubh)}(h$Whether the addition was successful.h]h$Whether the addition was successful.}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMIhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "bio_add_vmalloc_chunk (C function)c.bio_add_vmalloc_chunkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hOunsigned int bio_add_vmalloc_chunk (struct bio *bio, void *vaddr, unsigned len)h]j)}(hNunsigned int bio_add_vmalloc_chunk(struct bio *bio, void *vaddr, unsigned len)h](jf)}(hunsignedh]hunsigned}(hj] hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjY hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMWubj2)}(h h]h }(hjl hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjY hhhjk hMWubjf)}(hinth]hint}(hjz hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjY hhhjk hMWubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjY hhhjk hMWubjC)}(hbio_add_vmalloc_chunkh]jI)}(hbio_add_vmalloc_chunkh]hbio_add_vmalloc_chunk}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjY hhhjk hMWubj=)}(h,(struct bio *bio, void *vaddr, unsigned len)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hbioh]hbio}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j)}jj sbc.bio_add_vmalloc_chunkasbuh1hhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h void *vaddrh](jf)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj$ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjI)}(hvaddrh]hvaddr}(hjQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h unsigned lenh](jf)}(hunsignedh]hunsigned}(hjjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjfubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfubjI)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjY hhhjk hMWubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjU hhhjk hMWubah}(h]jP ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjk hMWhjR hhubjw)}(hhh]h)}(hadd a vmalloc chunk to a bioh]hadd a vmalloc chunk to a bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMWhjhhubah}(h]h ]h"]h$]h&]uh1jvhjR hhhjk hMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio *bio`` destination bio ``void *vaddr`` vmalloc address to add ``unsigned len`` total length in bytes of the data to add **Description** Add data starting at **vaddr** to **bio** and return how many bytes were added. This may be less than the amount originally asked. Returns 0 if no data could be added to **bio**. This helper calls flush_kernel_vmap_range() for the range added. For reads the caller still needs to manually call invalidate_kernel_vmap_range() in the completion handler.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM[hjubj)}(hhh](j)}(h$``struct bio *bio`` destination bio h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMXhjubj)}(hhh]h)}(hdestination bioh]hdestination bio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h'``void *vaddr`` vmalloc address to add h](j)}(h``void *vaddr``h]j)}(hj*h]h void *vaddr}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMYhj$ubj)}(hhh]h)}(hvmalloc address to addh]hvmalloc address to add}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMYhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMYhjubj)}(h:``unsigned len`` total length in bytes of the data to add h](j)}(h``unsigned len``h]j)}(hjch]h unsigned len}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMZhj]ubj)}(hhh]h)}(h(total length in bytes of the data to addh]h(total length in bytes of the data to add}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMZhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMZhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM\hjubh)}(hAdd data starting at **vaddr** to **bio** and return how many bytes were added. This may be less than the amount originally asked. Returns 0 if no data could be added to **bio**.h](hAdd data starting at }(hjhhhNhNubj)}(h **vaddr**h]hvaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and return how many bytes were added. This may be less than the amount originally asked. Returns 0 if no data could be added to }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM[hjubh)}(hThis helper calls flush_kernel_vmap_range() for the range added. For reads the caller still needs to manually call invalidate_kernel_vmap_range() in the completion handler.h]hThis helper calls flush_kernel_vmap_range() for the range added. For reads the caller still needs to manually call invalidate_kernel_vmap_range() in the completion handler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_add_vmalloc (C function)c.bio_add_vmallochNtauh1hhjVhhhNhNubj)}(hhh](j)}(hEbool bio_add_vmalloc (struct bio *bio, void *vaddr, unsigned int len)h]j)}(hDbool bio_add_vmalloc(struct bio *bio, void *vaddr, unsigned int len)h](jf)}(hjih]hbool}(hj(hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj$hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMrubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$hhhj5hMrubjC)}(hbio_add_vmalloch]jI)}(hbio_add_vmalloch]hbio_add_vmalloc}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj$hhhj5hMrubj=)}(h0(struct bio *bio, void *vaddr, unsigned int len)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj`ubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`ubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjJsbc.bio_add_vmallocasbuh1hhj`ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj\ubjC)}(h void *vaddrh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvaddrh]hvaddr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj\ubjC)}(hunsigned int lenh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hlenh]hlen}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj\ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj$hhhj5hMrubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhj5hMrubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj5hMrhjhhubjw)}(hhh]h)}(hadd a vmalloc region to a bioh]hadd a vmalloc region to a bio}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMrhjwhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj5hMrubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio *bio`` destination bio ``void *vaddr`` vmalloc address to add ``unsigned int len`` total length in bytes of the data to add **Description** Add data starting at **vaddr** to **bio**. Return ``true`` on success or ``false`` if **bio** does not have enough space for the payload. This helper calls flush_kernel_vmap_range() for the range added. For reads the caller still needs to manually call invalidate_kernel_vmap_range() in the completion handler.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMvhjubj)}(hhh](j)}(h$``struct bio *bio`` destination bio h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMshjubj)}(hhh]h)}(hdestination bioh]hdestination bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubj)}(h'``void *vaddr`` vmalloc address to add h](j)}(h``void *vaddr``h]j)}(hjh]h void *vaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMthjubj)}(hhh]h)}(hvmalloc address to addh]hvmalloc address to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMthj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMthjubj)}(h>``unsigned int len`` total length in bytes of the data to add h](j)}(h``unsigned int len``h]j)}(hj-h]hunsigned int len}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMuhj'ubj)}(hhh]h)}(h(total length in bytes of the data to addh]h(total length in bytes of the data to add}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMuhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMuhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMwhjubh)}(hAdd data starting at **vaddr** to **bio**. Return ``true`` on success or ``false`` if **bio** does not have enough space for the payload.h](hAdd data starting at }(hj~hhhNhNubj)}(h **vaddr**h]hvaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh to }(hj~hhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh . Return }(hj~hhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh on success or }(hj~hhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh if }(hj~hhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh, does not have enough space for the payload.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMvhjubh)}(hThis helper calls flush_kernel_vmap_range() for the range added. For reads the caller still needs to manually call invalidate_kernel_vmap_range() in the completion handler.h]hThis helper calls flush_kernel_vmap_range() for the range added. For reads the caller still needs to manually call invalidate_kernel_vmap_range() in the completion handler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMyhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_await (C function) c.bio_awaithNtauh1hhjVhhhNhNubj)}(hhh](j)}(hYvoid bio_await (struct bio *bio, void *priv, void (*submit)(struct bio *bio, void *priv))h]j)}(hXvoid bio_await(struct bio *bio, void *priv, void (*submit)(struct bio *bio, void *priv))h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj$hMubjC)}(h bio_awaith]jI)}(h bio_awaith]h bio_await}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj$hMubj=)}(hJ(struct bio *bio, void *priv, void (*submit)(struct bio *bio, void *priv))h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubh)}(hhh]jI)}(hbioh]hbio}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj )}j ]j)}jj9sb c.bio_awaitasbuh1hhjOubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjKubjC)}(h void *privh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hprivh]hpriv}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjKubjC)}(h+void (*submit)(struct bio *bio, void *priv)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h(}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsubmith]hsubmit}(hj=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.bio_awaitasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hprivh]hpriv}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjKubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj$hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj$hMubah}(h]j ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj$hMhj hhubjw)}(hhh]h)}(h5call a function on a bio, and wait until it completesh]h5call a function on a bio, and wait until it completes}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jvhj hhhj$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1jhhhjVhNhNubj)}(hXA**Parameters** ``struct bio *bio`` the bio which describes the I/O ``void *priv`` private data passed to **submit** ``void (*submit)(struct bio *bio, void *priv)`` function called to submit the bio **Description** Wait for the bio as well as any bio chained off it after executing the passed in callback **submit**. The wait for the bio is set up before calling **submit** to ensure that the completion is captured. If **submit** is ``NULL``, submit_bio() is used instead to submit the bio. **Note** this overrides the bi_private and bi_end_io fields in the bio.h](h)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjaubj)}(hhh](j)}(h4``struct bio *bio`` the bio which describes the I/O h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hthe bio which describes the I/Oh]hthe bio which describes the I/O}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj}ubj)}(h1``void *priv`` private data passed to **submit** h](j)}(h``void *priv``h]j)}(hjh]h void *priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(h!private data passed to **submit**h](hprivate data passed to }(hjhhhNhNubj)}(h **submit**h]hsubmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj}ubj)}(hR``void (*submit)(struct bio *bio, void *priv)`` function called to submit the bio h](j)}(h/``void (*submit)(struct bio *bio, void *priv)``h]j)}(hjh]h+void (*submit)(struct bio *bio, void *priv)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(h!function called to submit the bioh]h!function called to submit the bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubh)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjaubh)}(hXWait for the bio as well as any bio chained off it after executing the passed in callback **submit**. The wait for the bio is set up before calling **submit** to ensure that the completion is captured. If **submit** is ``NULL``, submit_bio() is used instead to submit the bio.h](hZWait for the bio as well as any bio chained off it after executing the passed in callback }(hjWhhhNhNubj)}(h **submit**h]hsubmit}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh1. The wait for the bio is set up before calling }(hjWhhhNhNubj)}(h **submit**h]hsubmit}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh0 to ensure that the completion is captured. If }(hjWhhhNhNubj)}(h **submit**h]hsubmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh is }(hjWhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh1, submit_bio() is used instead to submit the bio.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjaubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjaubh)}(h>this overrides the bi_private and bi_end_io fields in the bio.h]h>this overrides the bi_private and bi_end_io fields in the bio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j submit_bio_wait (C function)c.submit_bio_waithNtauh1hhjVhhhNhNubj)}(hhh](j)}(h%int submit_bio_wait (struct bio *bio)h]j)}(h$int submit_bio_wait(struct bio *bio)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM2ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM2ubjC)}(hsubmit_bio_waith]jI)}(hsubmit_bio_waith]hsubmit_bio_wait}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM2ubj=)}(h(struct bio *bio)h]jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj.ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.ubh)}(hhh]jI)}(hbioh]hbio}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj )}j ]j)}jjsbc.submit_bio_waitasbuh1hhj.ubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj*ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM2ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM2ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM2hjhhubjw)}(hhh]h)}(h)submit a bio, and wait until it completesh]h)submit a bio, and wait until it completes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM2hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXv**Parameters** ``struct bio *bio`` The :c:type:`struct bio ` which describes the I/O **Description** Simple wrapper around submit_bio(). Returns 0 on success, or the error from bio_endio() on failure. WARNING: Unlike to how submit_bio() is usually used, this function does not result in bio reference to be consumed. The caller must drop the reference on his own.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM6hjubj)}(hhh]j)}(hK``struct bio *bio`` The :c:type:`struct bio ` which describes the I/O h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM3hjubj)}(hhh]h)}(h6The :c:type:`struct bio ` which describes the I/Oh](hThe }(hjhhhNhNubh)}(h:c:type:`struct bio `h]j)}(hjh]h struct bio}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj  refdomainjreftypetype refexplicitrefwarnjj j biouh1hhj hM3hjubh which describes the I/O}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM3hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM3hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM5hjubh)}(hcSimple wrapper around submit_bio(). Returns 0 on success, or the error from bio_endio() on failure.h]hcSimple wrapper around submit_bio(). Returns 0 on success, or the error from bio_endio() on failure.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM4hjubh)}(hWARNING: Unlike to how submit_bio() is usually used, this function does not result in bio reference to be consumed. The caller must drop the reference on his own.h]hWARNING: Unlike to how submit_bio() is usually used, this function does not result in bio reference to be consumed. The caller must drop the reference on his own.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bdev_rw_virt (C function)c.bdev_rw_virthNtauh1hhjVhhhNhNubj)}(hhh](j)}(heint bdev_rw_virt (struct block_device *bdev, sector_t sector, void *data, size_t len, enum req_op op)h]j)}(hdint bdev_rw_virt(struct block_device *bdev, sector_t sector, void *data, size_t len, enum req_op op)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMWubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMWubjC)}(h bdev_rw_virth]jI)}(h bdev_rw_virth]h bdev_rw_virt}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMWubj=)}(hT(struct block_device *bdev, sector_t sector, void *data, size_t len, enum req_op op)h](jC)}(hstruct block_device *bdevh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h block_deviceh]h block_device}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.bdev_rw_virtasbuh1hhjubj2)}(h h]h }(hj#hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbdevh]hbdev}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hsector_t sectorh](h)}(hhh]jI)}(hsector_th]hsector_t}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj )}j ]jc.bdev_rw_virtasbuh1hhjSubj2)}(h h]h }(hjxhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjSubjI)}(hsectorh]hsector}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h size_t lenh](h)}(hhh]jI)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.bdev_rw_virtasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(henum req_op oph](j )}(hj#h]henum}(hj)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubh)}(hhh]jI)}(hreq_oph]hreq_op}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj )}j ]jc.bdev_rw_virtasbuh1hhj%ubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubjI)}(hoph]hop}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMWubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMWubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMWhjhhubjw)}(hhh]h)}(h3synchronously read into / write from kernel mappingh]h3synchronously read into / write from kernel mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMWhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct block_device *bdev`` block device to access ``sector_t sector`` sector to access ``void *data`` data to read/write ``size_t len`` length in byte to read/write ``enum req_op op`` operation (e.g. REQ_OP_READ/REQ_OP_WRITE) **Description** Performs synchronous I/O to **bdev** for **data**/**len**. **data** must be in the kernel direct mapping and not a vmalloc address.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM[hjubj)}(hhh](j)}(h5``struct block_device *bdev`` block device to access h](j)}(h``struct block_device *bdev``h]j)}(hjh]hstruct block_device *bdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMXhjubj)}(hhh]h)}(hblock device to accessh]hblock device to access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h%``sector_t sector`` sector to access h](j)}(h``sector_t sector``h]j)}(hjh]hsector_t sector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMYhjubj)}(hhh]h)}(hsector to accessh]hsector to access}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMYhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMYhjubj)}(h"``void *data`` data to read/write h](j)}(h``void *data``h]j)}(hjPh]h void *data}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMZhjJubj)}(hhh]h)}(hdata to read/writeh]hdata to read/write}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMZhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMZhjubj)}(h,``size_t len`` length in byte to read/write h](j)}(h``size_t len``h]j)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM[hjubj)}(hhh]h)}(hlength in byte to read/writeh]hlength in byte to read/write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(h=``enum req_op op`` operation (e.g. REQ_OP_READ/REQ_OP_WRITE) h](j)}(h``enum req_op op``h]j)}(hjh]henum req_op op}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM\hjubj)}(hhh]h)}(h)operation (e.g. REQ_OP_READ/REQ_OP_WRITE)h]h)operation (e.g. REQ_OP_READ/REQ_OP_WRITE)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM^hjubh)}(hPerforms synchronous I/O to **bdev** for **data**/**len**. **data** must be in the kernel direct mapping and not a vmalloc address.h](hPerforms synchronous I/O to }(hjhhhNhNubj)}(h**bdev**h]hbdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh for }(hjhhhNhNubj)}(h**data**h]hdata}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/}(hjhhhNhNubj)}(h**len**h]hlen}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. }(hjhhhNhNubj)}(h**data**h]hdata}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh@ must be in the kernel direct mapping and not a vmalloc address.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chM]hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_copy_data (C function)c.bio_copy_datahNtauh1hhjVhhhNhNubj)}(hhh](j)}(h5void bio_copy_data (struct bio *dst, struct bio *src)h]j)}(h4void bio_copy_data(struct bio *dst, struct bio *src)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h bio_copy_datah]jI)}(h bio_copy_datah]h bio_copy_data}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h"(struct bio *dst, struct bio *src)h](jC)}(hstruct bio *dsth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.bio_copy_dataasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdsth]hdst}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct bio *srch](j )}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj5ubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5ubh)}(hhh]jI)}(hbioh]hbio}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj )}j ]jc.bio_copy_dataasbuh1hhj5ubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjI)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]j}ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h5copy contents of data buffers from one bio to anotherh]h5copy contents of data buffers from one bio to another}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio *dst`` destination bio ``struct bio *src`` source bio **Description** Stops when it reaches the end of either **src** or **dst** - that is, copies min(src->bi_size, dst->bi_size) bytes (or the equivalent for lists of bios).h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh](j)}(h$``struct bio *dst`` destination bio h](j)}(h``struct bio *dst``h]j)}(hjh]hstruct bio *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubj)}(hhh]h)}(hdestination bioh]hdestination bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``struct bio *src`` source bio h](j)}(h``struct bio *src``h]j)}(hj4h]hstruct bio *src}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj.ubj)}(hhh]h)}(h source bioh]h source bio}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjoh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubh)}(hStops when it reaches the end of either **src** or **dst** - that is, copies min(src->bi_size, dst->bi_size) bytes (or the equivalent for lists of bios).h](h(Stops when it reaches the end of either }(hjhhhNhNubj)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh or }(hjhhhNhNubj)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh_ - that is, copies min(src->bi_size, dst->bi_size) bytes (or the equivalent for lists of bios).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_endio (C function) c.bio_endiohNtauh1hhjVhhhNhNubj)}(hhh](j)}(h void bio_endio (struct bio *bio)h]j)}(hvoid bio_endio(struct bio *bio)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMOubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMOubjC)}(h bio_endioh]jI)}(h bio_endioh]h bio_endio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMOubj=)}(h(struct bio *bio)h]jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hbioh]hbio}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj )}j ]j)}jjsb c.bio_endioasbuh1hhjubj2)}(h h]h }(hjShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbioh]hbio}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMOubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMOubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMOhjhhubjw)}(hhh]h)}(hend I/O on a bioh]hend I/O on a bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio *bio`` bio **Description** bio_endio() will end I/O on the whole bio. bio_endio() is the preferred way to end I/O on a bio. No one should call bi_end_io() directly on a bio unless they own it and thus know that it has an end_io function. bio_endio() can be called several times on a bio that has been chained using bio_chain(). The ->bi_end_io() function will only be called the last time.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMShjubj)}(hhh]j)}(h``struct bio *bio`` bio h](j)}(h``struct bio *bio``h]j)}(hjh]hstruct bio *bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMPhjubj)}(hhh]h)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMRhjubj)}(hXlbio_endio() will end I/O on the whole bio. bio_endio() is the preferred way to end I/O on a bio. No one should call bi_end_io() directly on a bio unless they own it and thus know that it has an end_io function. bio_endio() can be called several times on a bio that has been chained using bio_chain(). The ->bi_end_io() function will only be called the last time.h](h)}(hbio_endio() will end I/O on the whole bio. bio_endio() is the preferred way to end I/O on a bio. No one should call bi_end_io() directly on a bio unless they own it and thus know that it has an end_io function.h]hbio_endio() will end I/O on the whole bio. bio_endio() is the preferred way to end I/O on a bio. No one should call bi_end_io() directly on a bio unless they own it and thus know that it has an end_io function.}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMRhj* ubh)}(hbio_endio() can be called several times on a bio that has been chained using bio_chain(). The ->bi_end_io() function will only be called the last time.h]hbio_endio() can be called several times on a bio that has been chained using bio_chain(). The ->bi_end_io() function will only be called the last time.}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMVhj* ubeh}(h]h ]h"]h$]h&]uh1jhj< hMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_split (C function) c.bio_splithNtauh1hhjVhhhNhNubj)}(hhh](j)}(hTstruct bio * bio_split (struct bio *bio, int sectors, gfp_t gfp, struct bio_set *bs)h]j)}(hRstruct bio *bio_split(struct bio *bio, int sectors, gfp_t gfp, struct bio_set *bs)h](j )}(hjh]hstruct}(hjr hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjn hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjn hhhj hMubh)}(hhh]jI)}(hbioh]hbio}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j)}j bio_splitsb c.bio_splitasbuh1hhjn hhhj hMubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjn hhhj hMubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn hhhj hMubjC)}(h bio_splith]jI)}(hj h]h bio_split}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjn hhhj hMubj=)}(h=(struct bio *bio, int sectors, gfp_t gfp, struct bio_set *bs)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hbioh]hbio}(hj !hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj !modnameN classnameNjj )}j ]j  c.bio_splitasbuh1hhj ubj2)}(h h]h }(hj(!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj6!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hbioh]hbio}(hjC!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h int sectorsh](jf)}(hinth]hint}(hj\!hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjX!ubj2)}(h h]h }(hjj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjX!ubjI)}(hsectorsh]hsectors}(hjx!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjX!ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h gfp_t gfph](h)}(hhh]jI)}(hgfp_th]hgfp_t}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj )}j ]j  c.bio_splitasbuh1hhj!ubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubjI)}(hgfph]hgfp}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hstruct bio_set *bsh](j )}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!ubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubh)}(hhh]jI)}(hbio_seth]hbio_set}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj )}j ]j  c.bio_splitasbuh1hhj!ubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubj)}(hjh]h*}(hj#"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjI)}(hbsh]hbs}(hj0"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjn hhhj hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjj hhhj hMubah}(h]je ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hMhjg hhubjw)}(hhh]h)}(h split a bioh]h split a bio}(hjZ"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjW"hhubah}(h]h ]h"]h$]h&]uh1jvhjg hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjr"jjr"jjjuh1jhhhjVhNhNubj)}(hX2**Parameters** ``struct bio *bio`` bio to split ``int sectors`` number of sectors to split from the front of **bio** ``gfp_t gfp`` gfp mask ``struct bio_set *bs`` bio set to allocate from **Description** Allocates and returns a new bio which represents **sectors** from the start of **bio**, and updates **bio** to represent the remaining sectors. Unless this is a discard request the newly allocated bio will point to **bio**'s bi_io_vec. It is the caller's responsibility to ensure that neither **bio** nor **bs** are freed before the split bio.h](h)}(h**Parameters**h]j)}(hj|"h]h Parameters}(hj~"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz"ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjv"ubj)}(hhh](j)}(h!``struct bio *bio`` bio to split h](j)}(h``struct bio *bio``h]j)}(hj"h]hstruct bio *bio}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj"ubj)}(hhh]h)}(h bio to splith]h bio to split}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj"ubj)}(hE``int sectors`` number of sectors to split from the front of **bio** h](j)}(h``int sectors``h]j)}(hj"h]h int sectors}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj"ubj)}(hhh]h)}(h4number of sectors to split from the front of **bio**h](h-number of sectors to split from the front of }(hj"hhhNhNubj)}(h**bio**h]hbio}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj"ubj)}(h``gfp_t gfp`` gfp mask h](j)}(h ``gfp_t gfp``h]j)}(hj#h]h gfp_t gfp}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj#ubj)}(hhh]h)}(hgfp maskh]hgfp mask}(hj4#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0#hMhj1#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj0#hMhj"ubj)}(h0``struct bio_set *bs`` bio set to allocate from h](j)}(h``struct bio_set *bs``h]j)}(hjT#h]hstruct bio_set *bs}(hjV#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR#ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjN#ubj)}(hhh]h)}(hbio set to allocate fromh]hbio set to allocate from}(hjm#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji#hMhjj#ubah}(h]h ]h"]h$]h&]uh1jhjN#ubeh}(h]h ]h"]h$]h&]uh1jhji#hMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjv"ubh)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjv"ubh)}(hAllocates and returns a new bio which represents **sectors** from the start of **bio**, and updates **bio** to represent the remaining sectors.h](h1Allocates and returns a new bio which represents }(hj#hhhNhNubj)}(h **sectors**h]hsectors}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh from the start of }(hj#hhhNhNubj)}(h**bio**h]hbio}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh, and updates }(hj#hhhNhNubj)}(h**bio**h]hbio}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh$ to represent the remaining sectors.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjv"ubh)}(hUnless this is a discard request the newly allocated bio will point to **bio**'s bi_io_vec. It is the caller's responsibility to ensure that neither **bio** nor **bs** are freed before the split bio.h](hGUnless this is a discard request the newly allocated bio will point to }(hj#hhhNhNubj)}(h**bio**h]hbio}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubhK’s bi_io_vec. It is the caller’s responsibility to ensure that neither }(hj#hhhNhNubj)}(h**bio**h]hbio}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh nor }(hj#hhhNhNubj)}(h**bs**h]hbs}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh are freed before the split bio.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjv"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bio_trim (C function) c.bio_trimhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h?void bio_trim (struct bio *bio, sector_t offset, sector_t size)h]j)}(h>void bio_trim(struct bio *bio, sector_t offset, sector_t size)h](jf)}(hvoidh]hvoid}(hjO$hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjK$hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hj^$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjK$hhhj]$hMubjC)}(hbio_trimh]jI)}(hbio_trimh]hbio_trim}(hjp$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjl$ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjK$hhhj]$hMubj=)}(h1(struct bio *bio, sector_t offset, sector_t size)h](jC)}(hstruct bio *bioh](j )}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj$ubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubh)}(hhh]jI)}(hbioh]hbio}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj )}j ]j)}jjr$sb c.bio_trimasbuh1hhj$ubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjI)}(hbioh]hbio}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubjC)}(hsector_t offseth](h)}(hhh]jI)}(hsector_th]hsector_t}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj )}j ]j$ c.bio_trimasbuh1hhj$ubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubjI)}(hoffseth]hoffset}(hj-%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubjC)}(h sector_t sizeh](h)}(hhh]jI)}(hsector_th]hsector_t}(hjI%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjF%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjK%modnameN classnameNjj )}j ]j$ c.bio_trimasbuh1hhjB%ubj2)}(h h]h }(hjg%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjB%ubjI)}(hsizeh]hsize}(hju%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjB%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjK$hhhj]$hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjG$hhhj]$hMubah}(h]jB$ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj]$hMhjD$hhubjw)}(hhh]h)}(h trim a bioh]h trim a bio}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jvhjD$hhhj]$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jhhhjVhNhNubj)}(hX9**Parameters** ``struct bio *bio`` bio to trim ``sector_t offset`` number of sectors to trim from the front of **bio** ``sector_t size`` size we want to trim **bio** to, in sectors **Description** This function is typically used for bios that are cloned and submitted to the underlying device in parts.h](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj%ubj)}(hhh](j)}(h ``struct bio *bio`` bio to trim h](j)}(h``struct bio *bio``h]j)}(hj%h]hstruct bio *bio}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj%ubj)}(hhh]h)}(h bio to trimh]h bio to trim}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(hH``sector_t offset`` number of sectors to trim from the front of **bio** h](j)}(h``sector_t offset``h]j)}(hj&h]hsector_t offset}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj&ubj)}(hhh]h)}(h3number of sectors to trim from the front of **bio**h](h,number of sectors to trim from the front of }(hj2&hhhNhNubj)}(h**bio**h]hbio}(hj:&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2&ubeh}(h]h ]h"]h$]h&]uh1hhj.&hMhj/&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj.&hMhj%ubj)}(h>``sector_t size`` size we want to trim **bio** to, in sectors h](j)}(h``sector_t size``h]j)}(hj`&h]h sector_t size}(hjb&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^&ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjZ&ubj)}(hhh]h)}(h+size we want to trim **bio** to, in sectorsh](hsize we want to trim }(hjy&hhhNhNubj)}(h**bio**h]hbio}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy&ubh to, in sectors}(hjy&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhju&hMhjv&ubah}(h]h ]h"]h$]h&]uh1jhjZ&ubeh}(h]h ]h"]h$]h&]uh1jhju&hMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj%ubh)}(hiThis function is typically used for bios that are cloned and submitted to the underlying device in parts.h]hiThis function is typically used for bios that are cloned and submitted to the underlying device in parts.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j bioset_init (C function) c.bioset_inithNtauh1hhjVhhhNhNubj)}(hhh](j)}(h_int bioset_init (struct bio_set *bs, unsigned int pool_size, unsigned int front_pad, int flags)h]j)}(h^int bioset_init(struct bio_set *bs, unsigned int pool_size, unsigned int front_pad, int flags)h](jf)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj&hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&hhhj'hMubjC)}(h bioset_inith]jI)}(h bioset_inith]h bioset_init}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj&hhhj'hMubj=)}(hO(struct bio_set *bs, unsigned int pool_size, unsigned int front_pad, int flags)h](jC)}(hstruct bio_set *bsh](j )}(hjh]hstruct}(hj/'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj+'ubj2)}(h h]h }(hj<'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+'ubh)}(hhh]jI)}(hbio_seth]hbio_set}(hjM'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJ'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjO'modnameN classnameNjj )}j ]j)}jj'sb c.bioset_initasbuh1hhj+'ubj2)}(h h]h }(hjm'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+'ubj)}(hjh]h*}(hj{'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+'ubjI)}(hbsh]hbs}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj+'ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj''ubjC)}(hunsigned int pool_sizeh](jf)}(hunsignedh]hunsigned}(hj'hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj'ubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'ubjf)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj'ubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'ubjI)}(h pool_sizeh]h pool_size}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj''ubjC)}(hunsigned int front_padh](jf)}(hunsignedh]hunsigned}(hj'hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj'ubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'ubjf)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj'ubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'ubjI)}(h front_padh]h front_pad}(hj*(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj''ubjC)}(h int flagsh](jf)}(hinth]hint}(hjC(hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj?(ubj2)}(h h]h }(hjQ(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj?(ubjI)}(hflagsh]hflags}(hj_(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?(ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj''ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj&hhhj'hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj&hhhj'hMubah}(h]j&ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj'hMhj&hhubjw)}(hhh]h)}(hInitialize a bio_seth]hInitialize a bio_set}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jvhj&hhhj'hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct bio_set *bs`` pool to initialize ``unsigned int pool_size`` Number of bio and bio_vecs to cache in the mempool ``unsigned int front_pad`` Number of bytes to allocate in front of the returned bio ``int flags`` Flags to modify behavior, currently ``BIOSET_NEED_BVECS`` and ``BIOSET_NEED_RESCUER`` **Description** Set up a bio_set to be used with **bio_alloc_bioset**. Allows the caller to ask for a number of bytes to be allocated in front of the bio. Front pad allocation is useful for embedding the bio inside another structure, to avoid allocating extra data to go with the bio. Note that the bio must be embedded at the END of that structure always, or things will break badly. If ``BIOSET_NEED_BVECS`` is set in **flags**, a separate pool will be allocated for allocating iovecs. This pool is not needed e.g. for bio_init_clone(). If ``BIOSET_NEED_RESCUER`` is set, a workqueue is created which can be used to dispatch queued requests when the mempool runs out of space.h](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj(ubj)}(hhh](j)}(h*``struct bio_set *bs`` pool to initialize h](j)}(h``struct bio_set *bs``h]j)}(hj(h]hstruct bio_set *bs}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj(ubj)}(hhh]h)}(hpool to initializeh]hpool to initialize}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj(ubj)}(hN``unsigned int pool_size`` Number of bio and bio_vecs to cache in the mempool h](j)}(h``unsigned int pool_size``h]j)}(hj)h]hunsigned int pool_size}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj(ubj)}(hhh]h)}(h2Number of bio and bio_vecs to cache in the mempoolh]h2Number of bio and bio_vecs to cache in the mempool}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj(ubj)}(hT``unsigned int front_pad`` Number of bytes to allocate in front of the returned bio h](j)}(h``unsigned int front_pad``h]j)}(hj<)h]hunsigned int front_pad}(hj>)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:)ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj6)ubj)}(hhh]h)}(h8Number of bytes to allocate in front of the returned bioh]h8Number of bytes to allocate in front of the returned bio}(hjU)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ)hMhjR)ubah}(h]h ]h"]h$]h&]uh1jhj6)ubeh}(h]h ]h"]h$]h&]uh1jhjQ)hMhj(ubj)}(hd``int flags`` Flags to modify behavior, currently ``BIOSET_NEED_BVECS`` and ``BIOSET_NEED_RESCUER`` h](j)}(h ``int flags``h]j)}(hju)h]h int flags}(hjw)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs)ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhjo)ubj)}(hhh]h)}(hUFlags to modify behavior, currently ``BIOSET_NEED_BVECS`` and ``BIOSET_NEED_RESCUER``h](h$Flags to modify behavior, currently }(hj)hhhNhNubj)}(h``BIOSET_NEED_BVECS``h]hBIOSET_NEED_BVECS}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh and }(hj)hhhNhNubj)}(h``BIOSET_NEED_RESCUER``h]hBIOSET_NEED_RESCUER}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj)ubah}(h]h ]h"]h$]h&]uh1jhjo)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj(ubj)}(hXSet up a bio_set to be used with **bio_alloc_bioset**. Allows the caller to ask for a number of bytes to be allocated in front of the bio. Front pad allocation is useful for embedding the bio inside another structure, to avoid allocating extra data to go with the bio. Note that the bio must be embedded at the END of that structure always, or things will break badly. If ``BIOSET_NEED_BVECS`` is set in **flags**, a separate pool will be allocated for allocating iovecs. This pool is not needed e.g. for bio_init_clone(). If ``BIOSET_NEED_RESCUER`` is set, a workqueue is created which can be used to dispatch queued requests when the mempool runs out of space.h]h)}(hXSet up a bio_set to be used with **bio_alloc_bioset**. Allows the caller to ask for a number of bytes to be allocated in front of the bio. Front pad allocation is useful for embedding the bio inside another structure, to avoid allocating extra data to go with the bio. Note that the bio must be embedded at the END of that structure always, or things will break badly. If ``BIOSET_NEED_BVECS`` is set in **flags**, a separate pool will be allocated for allocating iovecs. This pool is not needed e.g. for bio_init_clone(). If ``BIOSET_NEED_RESCUER`` is set, a workqueue is created which can be used to dispatch queued requests when the mempool runs out of space.h](h!Set up a bio_set to be used with }(hj)hhhNhNubj)}(h**bio_alloc_bioset**h]hbio_alloc_bioset}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhX?. Allows the caller to ask for a number of bytes to be allocated in front of the bio. Front pad allocation is useful for embedding the bio inside another structure, to avoid allocating extra data to go with the bio. Note that the bio must be embedded at the END of that structure always, or things will break badly. If }(hj)hhhNhNubj)}(h``BIOSET_NEED_BVECS``h]hBIOSET_NEED_BVECS}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh is set in }(hj)hhhNhNubj)}(h **flags**h]hflags}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhr, a separate pool will be allocated for allocating iovecs. This pool is not needed e.g. for bio_init_clone(). If }(hj)hhhNhNubj)}(h``BIOSET_NEED_RESCUER``h]hBIOSET_NEED_RESCUER}(hj)*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhq is set, a workqueue is created which can be used to dispatch queued requests when the mempool runs out of space.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./block/bio.chMhj)ubah}(h]h ]h"]h$]h&]uh1jhjA*hMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_open (C function) c.seq_openhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hAint seq_open (struct file *file, const struct seq_operations *op)h]j)}(h@int seq_open(struct file *file, const struct seq_operations *op)h](jf)}(hinth]hint}(hjh*hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjd*hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK+ubj2)}(h h]h }(hjw*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjd*hhhjv*hK+ubjC)}(hseq_openh]jI)}(hseq_openh]hseq_open}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjd*hhhjv*hK+ubj=)}(h4(struct file *file, const struct seq_operations *op)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj*ubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*ubh)}(hhh]jI)}(hfileh]hfile}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj )}j ]j)}jj*sb c.seq_openasbuh1hhj*ubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjI)}(hfileh]hfile}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj*ubjC)}(hconst struct seq_operations *oph](j )}(hjh]hconst}(hj+hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj+ubj2)}(h h]h }(hj$+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+ubj )}(hjh]hstruct}(hj2+hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj+ubj2)}(h h]h }(hj?+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+ubh)}(hhh]jI)}(hseq_operationsh]hseq_operations}(hjP+hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjM+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjR+modnameN classnameNjj )}j ]j* c.seq_openasbuh1hhj+ubj2)}(h h]h }(hjn+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+ubj)}(hjh]h*}(hj|+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjI)}(hoph]hop}(hj+hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj+ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj*ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjd*hhhjv*hK+ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj`*hhhjv*hK+ubah}(h]j[*ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjv*hK+hj]*hhubjw)}(hhh]h)}(hinitialize sequential fileh]hinitialize sequential file}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK+hj+hhubah}(h]h ]h"]h$]h&]uh1jvhj]*hhhjv*hK+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhjVhNhNubj)}(hXs**Parameters** ``struct file *file`` file we initialize ``const struct seq_operations *op`` method table describing the sequence **Description** seq_open() sets **file**, associating it with a sequence described by **op**. **op->start\(\)** sets the iterator up and returns the first element of sequence. **op->stop\(\)** shuts it down. **op->next\(\)** returns the next element of sequence. **op->show\(\)** prints element into the buffer. In case of error ->start() and ->next() return ERR_PTR(error). In the end of sequence they return ``NULL``. ->show() returns 0 in case of success and negative number in case of error. Returning SEQ_SKIP means "discard this element and move on". **Note** seq_open() will allocate a struct seq_file and store its pointer in **file->private_data**. This pointer should not be modified.h](h)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK/hj+ubj)}(hhh](j)}(h)``struct file *file`` file we initialize h](j)}(h``struct file *file``h]j)}(hj+h]hstruct file *file}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK,hj+ubj)}(hhh]h)}(hfile we initializeh]hfile we initialize}(hj ,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ,hK,hj ,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj ,hK,hj+ubj)}(hI``const struct seq_operations *op`` method table describing the sequence h](j)}(h#``const struct seq_operations *op``h]j)}(hj-,h]hconst struct seq_operations *op}(hj/,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK-hj',ubj)}(hhh]h)}(h$method table describing the sequenceh]h$method table describing the sequence}(hjF,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB,hK-hjC,ubah}(h]h ]h"]h$]h&]uh1jhj',ubeh}(h]h ]h"]h$]h&]uh1jhjB,hK-hj+ubeh}(h]h ]h"]h$]h&]uh1jhj+ubh)}(h**Description**h]j)}(hjh,h]h Description}(hjj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf,ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK/hj+ubj)}(hX"seq_open() sets **file**, associating it with a sequence described by **op**. **op->start\(\)** sets the iterator up and returns the first element of sequence. **op->stop\(\)** shuts it down. **op->next\(\)** returns the next element of sequence. **op->show\(\)** prints element into the buffer. In case of error ->start() and ->next() return ERR_PTR(error). In the end of sequence they return ``NULL``. ->show() returns 0 in case of success and negative number in case of error. Returning SEQ_SKIP means "discard this element and move on". h]h)}(hX!seq_open() sets **file**, associating it with a sequence described by **op**. **op->start\(\)** sets the iterator up and returns the first element of sequence. **op->stop\(\)** shuts it down. **op->next\(\)** returns the next element of sequence. **op->show\(\)** prints element into the buffer. In case of error ->start() and ->next() return ERR_PTR(error). In the end of sequence they return ``NULL``. ->show() returns 0 in case of success and negative number in case of error. Returning SEQ_SKIP means "discard this element and move on".h](hseq_open() sets }(hj,hhhNhNubj)}(h**file**h]hfile}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh., associating it with a sequence described by }(hj,hhhNhNubj)}(h**op**h]hop}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh. }(hj,hhhNhNubj)}(h**op->start\(\)**h]h op->start()}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ub9hA sets the iterator up and returns the first element of sequence. }(hj,hhhNhNubj)}(h**op->stop\(\)**h]h op->stop()}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh shuts it down. }(hj,hhhNhNubj)}(h**op->next\(\)**h]h op->next()}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh( returns the next element of sequence. }(hj,hhhNhNubj)}(h**op->show\(\)**h]h op->show()}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh prints element into the buffer. In case of error ->start() and ->next() return ERR_PTR(error). In the end of sequence they return }(hj,hhhNhNubj)}(h``NULL``h]hNULL}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh. ->show() returns 0 in case of success and negative number in case of error. Returning SEQ_SKIP means “discard this element and move on”.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK.hj~,ubah}(h]h ]h"]h$]h&]uh1jhj-hK.hj+ubh)}(h**Note**h]j)}(hj-h]hNote}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK7hj+ubj)}(hhh]j)}(hseq_open() will allocate a struct seq_file and store its pointer in **file->private_data**. This pointer should not be modified.h](j)}(h8seq_open() will allocate a struct seq_file and store itsh]h8seq_open() will allocate a struct seq_file and store its}(hj4-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK7hj0-ubj)}(hhh]h)}(hGpointer in **file->private_data**. This pointer should not be modified.h](h pointer in }(hjF-hhhNhNubj)}(h**file->private_data**h]hfile->private_data}(hjN-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF-ubh&. This pointer should not be modified.}(hjF-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chK8hjC-ubah}(h]h ]h"]h$]h&]uh1jhj0-ubeh}(h]h ]h"]h$]h&]uh1jhjB-hK7hj--ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_read (C function) c.seq_readhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hQssize_t seq_read (struct file *file, char __user *buf, size_t size, loff_t *ppos)h]j)}(hPssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)h](h)}(hhh]jI)}(hssize_th]hssize_t}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj )}j ]j)}jseq_readsb c.seq_readasbuh1hhj-hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj-hhhj-hKubjC)}(hseq_readh]jI)}(hj-h]hseq_read}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj-hhhj-hKubj=)}(h@(struct file *file, char __user *buf, size_t size, loff_t *ppos)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj-ubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj-ubh)}(hhh]jI)}(hfileh]hfile}(hj .hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj .modnameN classnameNjj )}j ]j- c.seq_readasbuh1hhj-ubj2)}(h h]h }(hj'.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj-ubj)}(hjh]h*}(hj5.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjI)}(hfileh]hfile}(hjB.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj-ubjC)}(hchar __user *bufh](jf)}(hcharh]hchar}(hj[.hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjW.ubj2)}(h h]h }(hji.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjW.ubh__user}(hjW.hhhNhNubj2)}(h h]h }(hj{.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjW.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW.ubjI)}(hbufh]hbuf}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjW.ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj-ubjC)}(h size_t sizeh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj )}j ]j- c.seq_readasbuh1hhj.ubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.ubjI)}(hsizeh]hsize}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj-ubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj )}j ]j- c.seq_readasbuh1hhj.ubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj.ubj)}(hjh]h*}(hj&/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjI)}(hpposh]hppos}(hj3/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj-ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj-hhhj-hKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj-hhhj-hKubah}(h]j-ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj-hKhj-hhubjw)}(hhh]h)}(h%->read() method for sequential files.h]h%->read() method for sequential files.}(hj]/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKhjZ/hhubah}(h]h ]h"]h$]h&]uh1jvhj-hhhj-hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjju/jju/jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct file *file`` the file to read from ``char __user *buf`` the buffer to read to ``size_t size`` the maximum number of bytes to read ``loff_t *ppos`` the current position in the file **Description** Ready-made ->f_op->read()h](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}/ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKhjy/ubj)}(hhh](j)}(h,``struct file *file`` the file to read from h](j)}(h``struct file *file``h]j)}(hj/h]hstruct file *file}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKhj/ubj)}(hhh]h)}(hthe file to read fromh]hthe file to read from}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj/ubj)}(h+``char __user *buf`` the buffer to read to h](j)}(h``char __user *buf``h]j)}(hj/h]hchar __user *buf}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKhj/ubj)}(hhh]h)}(hthe buffer to read toh]hthe buffer to read to}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj/ubj)}(h4``size_t size`` the maximum number of bytes to read h](j)}(h``size_t size``h]j)}(hj0h]h size_t size}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKhj 0ubj)}(hhh]h)}(h#the maximum number of bytes to readh]h#the maximum number of bytes to read}(hj)0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%0hKhj&0ubah}(h]h ]h"]h$]h&]uh1jhj 0ubeh}(h]h ]h"]h$]h&]uh1jhj%0hKhj/ubj)}(h2``loff_t *ppos`` the current position in the file h](j)}(h``loff_t *ppos``h]j)}(hjI0h]h loff_t *ppos}(hjK0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG0ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKhjC0ubj)}(hhh]h)}(h the current position in the fileh]h the current position in the file}(hjb0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^0hKhj_0ubah}(h]h ]h"]h$]h&]uh1jhjC0ubeh}(h]h ]h"]h$]h&]uh1jhj^0hKhj/ubeh}(h]h ]h"]h$]h&]uh1jhjy/ubh)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKhjy/ubj)}(hReady-made ->f_op->read()h]h)}(hj0h]hReady-made ->f_op->read()}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0hKhjy/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_lseek (C function) c.seq_lseekhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h?loff_t seq_lseek (struct file *file, loff_t offset, int whence)h]j)}(h>loff_t seq_lseek(struct file *file, loff_t offset, int whence)h](h)}(hhh]jI)}(hloff_th]hloff_t}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj )}j ]j)}j seq_lseeksb c.seq_lseekasbuh1hhj0hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM.ubj2)}(h h]h }(hj0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0hhhj0hM.ubjC)}(h seq_lseekh]jI)}(hj0h]h seq_lseek}(hj 1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj0hhhj0hM.ubj=)}(h.(struct file *file, loff_t offset, int whence)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj$1hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj 1ubj2)}(h h]h }(hj11hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj 1ubh)}(hhh]jI)}(hfileh]hfile}(hjB1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjD1modnameN classnameNjj )}j ]j0 c.seq_lseekasbuh1hhj 1ubj2)}(h h]h }(hj`1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj 1ubj)}(hjh]h*}(hjn1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 1ubjI)}(hfileh]hfile}(hj{1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj 1ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj1ubjC)}(h loff_t offseth](h)}(hhh]jI)}(hloff_th]hloff_t}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj )}j ]j0 c.seq_lseekasbuh1hhj1ubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1ubjI)}(hoffseth]hoffset}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj1ubjC)}(h int whenceh](jf)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj1ubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1ubjI)}(hwhenceh]hwhence}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj1ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj0hhhj0hM.ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj0hhhj0hM.ubah}(h]j0ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj0hM.hj0hhubjw)}(hhh]h)}(h'->llseek() method for sequential files.h]h'->llseek() method for sequential files.}(hj"2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM.hj2hhubah}(h]h ]h"]h$]h&]uh1jvhj0hhhj0hM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:2jj:2jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct file *file`` the file in question ``loff_t offset`` new position ``int whence`` 0 for absolute, 1 for relative position **Description** Ready-made ->f_op->llseek()h](h)}(h**Parameters**h]j)}(hjD2h]h Parameters}(hjF2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB2ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM2hj>2ubj)}(hhh](j)}(h+``struct file *file`` the file in question h](j)}(h``struct file *file``h]j)}(hjc2h]hstruct file *file}(hje2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM/hj]2ubj)}(hhh]h)}(hthe file in questionh]hthe file in question}(hj|2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx2hM/hjy2ubah}(h]h ]h"]h$]h&]uh1jhj]2ubeh}(h]h ]h"]h$]h&]uh1jhjx2hM/hjZ2ubj)}(h``loff_t offset`` new position h](j)}(h``loff_t offset``h]j)}(hj2h]h loff_t offset}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM0hj2ubj)}(hhh]h)}(h new positionh]h new position}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM0hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM0hjZ2ubj)}(h7``int whence`` 0 for absolute, 1 for relative position h](j)}(h``int whence``h]j)}(hj2h]h int whence}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM1hj2ubj)}(hhh]h)}(h'0 for absolute, 1 for relative positionh]h'0 for absolute, 1 for relative position}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM1hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM1hjZ2ubeh}(h]h ]h"]h$]h&]uh1jhj>2ubh)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM3hj>2ubj)}(hReady-made ->f_op->llseek()h]h)}(hj(3h]hReady-made ->f_op->llseek()}(hj*3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM2hj&3ubah}(h]h ]h"]h$]h&]uh1jhj73hM2hj>2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_release (C function) c.seq_releasehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h8int seq_release (struct inode *inode, struct file *file)h]j)}(h7int seq_release(struct inode *inode, struct file *file)h](jf)}(hinth]hint}(hj^3hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjZ3hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMZubj2)}(h h]h }(hjm3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZ3hhhjl3hMZubjC)}(h seq_releaseh]jI)}(h seq_releaseh]h seq_release}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{3ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjZ3hhhjl3hMZubj=)}(h((struct inode *inode, struct file *file)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj3ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubh)}(hhh]jI)}(hinodeh]hinode}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj )}j ]j)}jj3sb c.seq_releaseasbuh1hhj3ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjI)}(hinodeh]hinode}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj3ubjC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj 4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj 4ubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj 4ubh)}(hhh]jI)}(hfileh]hfile}(hj+4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-4modnameN classnameNjj )}j ]j3 c.seq_releaseasbuh1hhj 4ubj2)}(h h]h }(hjI4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj 4ubj)}(hjh]h*}(hjW4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubjI)}(hfileh]hfile}(hjd4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj 4ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj3ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjZ3hhhjl3hMZubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjV3hhhjl3hMZubah}(h]jQ3ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjl3hMZhjS3hhubjw)}(hhh]h)}(h4free the structures associated with sequential file.h]h4free the structures associated with sequential file.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMZhj4hhubah}(h]h ]h"]h$]h&]uh1jvhjS3hhhjl3hMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct inode *inode`` its inode ``struct file *file`` file in question **Description** Frees the structures associated with sequential file; can be used as ->f_op->release() if you don't have private data to destroy.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM^hj4ubj)}(hhh](j)}(h"``struct inode *inode`` its inode h](j)}(h``struct inode *inode``h]j)}(hj4h]hstruct inode *inode}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM[hj4ubj)}(hhh]h)}(h its inodeh]h its inode}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM[hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM[hj4ubj)}(h'``struct file *file`` file in question h](j)}(h``struct file *file``h]j)}(hj5h]hstruct file *file}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM\hj5ubj)}(hhh]h)}(hfile in questionh]hfile in question}(hj!5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM\hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM\hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hjC5h]h Description}(hjE5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA5ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM^hj4ubj)}(hFrees the structures associated with sequential file; can be used as ->f_op->release() if you don't have private data to destroy.h]h)}(hFrees the structures associated with sequential file; can be used as ->f_op->release() if you don't have private data to destroy.h]hFrees the structures associated with sequential file; can be used as ->f_op->release() if you don’t have private data to destroy.}(hj]5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM]hjY5ubah}(h]h ]h"]h$]h&]uh1jhjk5hM]hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_escape_mem (C function)c.seq_escape_memhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hjvoid seq_escape_mem (struct seq_file *m, const char *src, size_t len, unsigned int flags, const char *esc)h]j)}(hivoid seq_escape_mem(struct seq_file *m, const char *src, size_t len, unsigned int flags, const char *esc)h](jf)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj5hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMkubj2)}(h h]h }(hj5hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5hhhj5hMkubjC)}(hseq_escape_memh]jI)}(hseq_escape_memh]hseq_escape_mem}(hj5hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj5hhhj5hMkubj=)}(hV(struct seq_file *m, const char *src, size_t len, unsigned int flags, const char *esc)h](jC)}(hstruct seq_file *mh](j )}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj5ubj2)}(h h]h }(hj5hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5ubh)}(hhh]jI)}(hseq_fileh]hseq_file}(hj5hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj )}j ]j)}jj5sbc.seq_escape_memasbuh1hhj5ubj2)}(h h]h }(hj 6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjI)}(hmh]hm}(hj(6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj5ubjC)}(hconst char *srch](j )}(hjh]hconst}(hjA6hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj=6ubj2)}(h h]h }(hjN6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=6ubjf)}(hcharh]hchar}(hj\6hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj=6ubj2)}(h h]h }(hjj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=6ubj)}(hjh]h*}(hjx6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=6ubjI)}(hsrch]hsrc}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj5ubjC)}(h size_t lenh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj )}j ]j 6c.seq_escape_memasbuh1hhj6ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubjI)}(hlenh]hlen}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj5ubjC)}(hunsigned int flagsh](jf)}(hunsignedh]hunsigned}(hj6hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj6ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubjf)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj6ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubjI)}(hflagsh]hflags}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj5ubjC)}(hconst char *esch](j )}(hjh]hconst}(hj77hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj37ubj2)}(h h]h }(hjD7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj37ubjf)}(hcharh]hchar}(hjR7hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj37ubj2)}(h h]h }(hj`7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj37ubj)}(hjh]h*}(hjn7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj37ubjI)}(hesch]hesc}(hj{7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj37ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj5ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj5hhhj5hMkubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj5hhhj5hMkubah}(h]j5ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj5hMkhj5hhubjw)}(hhh]h)}(h0print data into buffer, escaping some charactersh]h0print data into buffer, escaping some characters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMkhj7hhubah}(h]h ]h"]h$]h&]uh1jvhj5hhhj5hMkubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct seq_file *m`` target buffer ``const char *src`` source buffer ``size_t len`` size of source buffer ``unsigned int flags`` flags to pass to string_escape_mem() ``const char *esc`` set of characters that need escaping **Description** Puts data into buffer, replacing each occurrence of character from given class (defined by **flags** and **esc**) with printable escaped sequence. Use seq_has_overflowed() to check for errors.h](h)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMohj7ubj)}(hhh](j)}(h%``struct seq_file *m`` target buffer h](j)}(h``struct seq_file *m``h]j)}(hj7h]hstruct seq_file *m}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMlhj7ubj)}(hhh]h)}(h target bufferh]h target buffer}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMlhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMlhj7ubj)}(h"``const char *src`` source buffer h](j)}(h``const char *src``h]j)}(hj8h]hconst char *src}(hj!8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMmhj8ubj)}(hhh]h)}(h source bufferh]h source buffer}(hj88hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj48hMmhj58ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj48hMmhj7ubj)}(h%``size_t len`` size of source buffer h](j)}(h``size_t len``h]j)}(hjX8h]h size_t len}(hjZ8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV8ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMnhjR8ubj)}(hhh]h)}(hsize of source bufferh]hsize of source buffer}(hjq8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm8hMnhjn8ubah}(h]h ]h"]h$]h&]uh1jhjR8ubeh}(h]h ]h"]h$]h&]uh1jhjm8hMnhj7ubj)}(h<``unsigned int flags`` flags to pass to string_escape_mem() h](j)}(h``unsigned int flags``h]j)}(hj8h]hunsigned int flags}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMohj8ubj)}(hhh]h)}(h$flags to pass to string_escape_mem()h]h$flags to pass to string_escape_mem()}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMohj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMohj7ubj)}(h9``const char *esc`` set of characters that need escaping h](j)}(h``const char *esc``h]j)}(hj8h]hconst char *esc}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMphj8ubj)}(hhh]h)}(h$set of characters that need escapingh]h$set of characters that need escaping}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMphj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMphj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMrhj7ubh)}(hPuts data into buffer, replacing each occurrence of character from given class (defined by **flags** and **esc**) with printable escaped sequence.h](h[Puts data into buffer, replacing each occurrence of character from given class (defined by }(hj9hhhNhNubj)}(h **flags**h]hflags}(hj#9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh and }(hj9hhhNhNubj)}(h**esc**h]hesc}(hj59hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh") with printable escaped sequence.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMqhj7ubh)}(h-Use seq_has_overflowed() to check for errors.h]h-Use seq_has_overflowed() to check for errors.}(hjN9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMthj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_path (C function) c.seq_pathhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hKint seq_path (struct seq_file *m, const struct path *path, const char *esc)h]j)}(hJint seq_path(struct seq_file *m, const struct path *path, const char *esc)h](jf)}(hinth]hint}(hj}9hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjy9hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjy9hhhj9hMubjC)}(hseq_pathh]jI)}(hseq_pathh]hseq_path}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjy9hhhj9hMubj=)}(h>(struct seq_file *m, const struct path *path, const char *esc)h](jC)}(hstruct seq_file *mh](j )}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj9ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9ubh)}(hhh]jI)}(hseq_fileh]hseq_file}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj )}j ]j)}jj9sb c.seq_pathasbuh1hhj9ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjI)}(hj*6h]hm}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj9ubjC)}(hconst struct path *pathh](j )}(hjh]hconst}(hj+:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj':ubj2)}(h h]h }(hj8:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj':ubj )}(hjh]hstruct}(hjF:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj':ubj2)}(h h]h }(hjS:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj':ubh)}(hhh]jI)}(hpathh]hpath}(hjd:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhja:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjf:modnameN classnameNjj )}j ]j9 c.seq_pathasbuh1hhj':ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj':ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj':ubjI)}(hpathh]hpath}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj':ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj9ubjC)}(hconst char *esch](j )}(hjh]hconst}(hj:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj:ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubjf)}(hcharh]hchar}(hj:hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj:ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjI)}(hesch]hesc}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj9ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjy9hhhj9hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhju9hhhj9hMubah}(h]jp9ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj9hMhjr9hhubjw)}(hhh]h)}(h&seq_file interface to print a pathnameh]h&seq_file interface to print a pathname}(hj$;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj!;hhubah}(h]h ]h"]h$]h&]uh1jvhjr9hhhj9hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<;jj<;jjjuh1jhhhjVhNhNubj)}(hX***Parameters** ``struct seq_file *m`` the seq_file handle ``const struct path *path`` the struct path to print ``const char *esc`` set of characters to escape in the output **Description** return the absolute path of 'path', as represented by the dentry / mnt pair in the path parameter.h](h)}(h**Parameters**h]j)}(hjF;h]h Parameters}(hjH;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD;ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj@;ubj)}(hhh](j)}(h+``struct seq_file *m`` the seq_file handle h](j)}(h``struct seq_file *m``h]j)}(hje;h]hstruct seq_file *m}(hjg;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc;ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj_;ubj)}(hhh]h)}(hthe seq_file handleh]hthe seq_file handle}(hj~;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz;hMhj{;ubah}(h]h ]h"]h$]h&]uh1jhj_;ubeh}(h]h ]h"]h$]h&]uh1jhjz;hMhj\;ubj)}(h5``const struct path *path`` the struct path to print h](j)}(h``const struct path *path``h]j)}(hj;h]hconst struct path *path}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj;ubj)}(hhh]h)}(hthe struct path to printh]hthe struct path to print}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj\;ubj)}(h>``const char *esc`` set of characters to escape in the output h](j)}(h``const char *esc``h]j)}(hj;h]hconst char *esc}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj;ubj)}(hhh]h)}(h)set of characters to escape in the outputh]h)set of characters to escape in the output}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj\;ubeh}(h]h ]h"]h$]h&]uh1jhj@;ubh)}(h**Description**h]j)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj@;ubh)}(hbreturn the absolute path of 'path', as represented by the dentry / mnt pair in the path parameter.h]hfreturn the absolute path of ‘path’, as represented by the dentry / mnt pair in the path parameter.}(hj(<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj@;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_file_path (C function)c.seq_file_pathhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hJint seq_file_path (struct seq_file *m, struct file *file, const char *esc)h]j)}(hIint seq_file_path(struct seq_file *m, struct file *file, const char *esc)h](jf)}(hinth]hint}(hjW<hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjS<hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMubj2)}(h h]h }(hjf<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjS<hhhje<hMubjC)}(h seq_file_pathh]jI)}(h seq_file_pathh]h seq_file_path}(hjx<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjt<ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjS<hhhje<hMubj=)}(h8(struct seq_file *m, struct file *file, const char *esc)h](jC)}(hstruct seq_file *mh](j )}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj<ubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubh)}(hhh]jI)}(hseq_fileh]hseq_file}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj )}j ]j)}jjz<sbc.seq_file_pathasbuh1hhj<ubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjI)}(hj*6h]hm}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj<ubjC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj=ubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=ubh)}(hhh]jI)}(hfileh]hfile}(hj#=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj =ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%=modnameN classnameNjj )}j ]j<c.seq_file_pathasbuh1hhj=ubj2)}(h h]h }(hjA=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=ubj)}(hjh]h*}(hjO=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjI)}(hfileh]hfile}(hj\=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj<ubjC)}(hconst char *esch](j )}(hjh]hconst}(hju=hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjq=ubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjq=ubjf)}(hcharh]hchar}(hj=hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjq=ubj2)}(h h]h }(hj=hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjq=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq=ubjI)}(hesch]hesc}(hj=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjq=ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj<ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjS<hhhje<hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjO<hhhje<hMubah}(h]jJ<ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhje<hMhjL<hhubjw)}(hhh]h)}(h0seq_file interface to print a pathname of a fileh]h0seq_file interface to print a pathname of a file}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj=hhubah}(h]h ]h"]h$]h&]uh1jvhjL<hhhje<hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct seq_file *m`` the seq_file handle ``struct file *file`` the struct file to print ``const char *esc`` set of characters to escape in the output **Description** return the absolute path to the file.h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj=ubj)}(hhh](j)}(h+``struct seq_file *m`` the seq_file handle h](j)}(h``struct seq_file *m``h]j)}(hj$>h]hstruct seq_file *m}(hj&>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj">ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj>ubj)}(hhh]h)}(hthe seq_file handleh]hthe seq_file handle}(hj=>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9>hMhj:>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj9>hMhj>ubj)}(h/``struct file *file`` the struct file to print h](j)}(h``struct file *file``h]j)}(hj]>h]hstruct file *file}(hj_>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[>ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjW>ubj)}(hhh]h)}(hthe struct file to printh]hthe struct file to print}(hjv>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr>hMhjs>ubah}(h]h ]h"]h$]h&]uh1jhjW>ubeh}(h]h ]h"]h$]h&]uh1jhjr>hMhj>ubj)}(h>``const char *esc`` set of characters to escape in the output h](j)}(h``const char *esc``h]j)}(hj>h]hconst char *esc}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj>ubj)}(hhh]h)}(h)set of characters to escape in the outputh]h)set of characters to escape in the output}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj=ubh)}(h**Description**h]j)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj=ubh)}(h%return the absolute path to the file.h]h%return the absolute path to the file.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_write (C function) c.seq_writehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hBint seq_write (struct seq_file *seq, const void *data, size_t len)h]j)}(hAint seq_write(struct seq_file *seq, const void *data, size_t len)h](jf)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj?hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM0ubj2)}(h h]h }(hj%?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj?hhhj$?hM0ubjC)}(h seq_writeh]jI)}(h seq_writeh]h seq_write}(hj7?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3?ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj?hhhj$?hM0ubj=)}(h4(struct seq_file *seq, const void *data, size_t len)h](jC)}(hstruct seq_file *seqh](j )}(hjh]hstruct}(hjS?hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjO?ubj2)}(h h]h }(hj`?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjO?ubh)}(hhh]jI)}(hseq_fileh]hseq_file}(hjq?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjn?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjs?modnameN classnameNjj )}j ]j)}jj9?sb c.seq_writeasbuh1hhjO?ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjO?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO?ubjI)}(hseqh]hseq}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjO?ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjK?ubjC)}(hconst void *datah](j )}(hjh]hconst}(hj?hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj?ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj?ubjf)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj?ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjI)}(hdatah]hdata}(hj @hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjK?ubjC)}(h size_t lenh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj%@hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'@modnameN classnameNjj )}j ]j? c.seq_writeasbuh1hhj@ubj2)}(h h]h }(hjC@hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@ubjI)}(hlenh]hlen}(hjQ@hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjK?ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj?hhhj$?hM0ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj?hhhj$?hM0ubah}(h]j ?ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj$?hM0hj ?hhubjw)}(hhh]h)}(hwrite arbitrary data to bufferh]hwrite arbitrary data to buffer}(hj{@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM0hjx@hhubah}(h]h ]h"]h$]h&]uh1jvhj ?hhhj$?hM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct seq_file *seq`` seq_file identifying the buffer to which data should be written ``const void *data`` data address ``size_t len`` number of bytes **Description** Return 0 on success, non-zero otherwise.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM4hj@ubj)}(hhh](j)}(hY``struct seq_file *seq`` seq_file identifying the buffer to which data should be written h](j)}(h``struct seq_file *seq``h]j)}(hj@h]hstruct seq_file *seq}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM1hj@ubj)}(hhh]h)}(h?seq_file identifying the buffer to which data should be writtenh]h?seq_file identifying the buffer to which data should be written}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM1hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM1hj@ubj)}(h"``const void *data`` data address h](j)}(h``const void *data``h]j)}(hj@h]hconst void *data}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM2hj@ubj)}(hhh]h)}(h data addressh]h data address}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj AhM2hj Aubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj AhM2hj@ubj)}(h``size_t len`` number of bytes h](j)}(h``size_t len``h]j)}(hj.Ah]h size_t len}(hj0AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Aubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM3hj(Aubj)}(hhh]h)}(hnumber of bytesh]hnumber of bytes}(hjGAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCAhM3hjDAubah}(h]h ]h"]h$]h&]uh1jhj(Aubeh}(h]h ]h"]h$]h&]uh1jhjCAhM3hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h**Description**h]j)}(hjiAh]h Description}(hjkAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgAubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM5hj@ubh)}(h(Return 0 on success, non-zero otherwise.h]h(Return 0 on success, non-zero otherwise.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM4hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_pad (C function) c.seq_padhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h)void seq_pad (struct seq_file *m, char c)h]j)}(h(void seq_pad(struct seq_file *m, char c)h](jf)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjAhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMDubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAhhhjAhMDubjC)}(hseq_padh]jI)}(hseq_padh]hseq_pad}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjAhhhjAhMDubj=)}(h(struct seq_file *m, char c)h](jC)}(hstruct seq_file *mh](j )}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjAubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubh)}(hhh]jI)}(hseq_fileh]hseq_file}(hj BhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj BmodnameN classnameNjj )}j ]j)}jjAsb c.seq_padasbuh1hhjAubj2)}(h h]h }(hj)BhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubj)}(hjh]h*}(hj7BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjI)}(hj*6h]hm}(hjDBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjAubjC)}(hchar ch](jf)}(hcharh]hchar}(hj\BhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjXBubj2)}(h h]h }(hjjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXBubjI)}(hjh]hc}(hjxBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXBubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjAubeh}(h]h ]h"]h$]h&]j`jauh1j<hjAhhhjAhMDubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjAhhhjAhMDubah}(h]jAah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjAhMDhjAhhubjw)}(hhh]h)}(hwrite padding spaces to bufferh]hwrite padding spaces to buffer}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMDhjBhhubah}(h]h ]h"]h$]h&]uh1jvhjAhhhjAhMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct seq_file *m`` seq_file identifying the buffer to which data should be written ``char c`` the byte to append after padding if non-zeroh](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMHhjBubj)}(hhh](j)}(hW``struct seq_file *m`` seq_file identifying the buffer to which data should be written h](j)}(h``struct seq_file *m``h]j)}(hjBh]hstruct seq_file *m}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMEhjBubj)}(hhh]h)}(h?seq_file identifying the buffer to which data should be writtenh]h?seq_file identifying the buffer to which data should be written}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMEhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMEhjBubj)}(h7``char c`` the byte to append after padding if non-zeroh](j)}(h ``char c``h]j)}(hjCh]hchar c}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMGhjCubj)}(hhh]h)}(h,the byte to append after padding if non-zeroh]h,the byte to append after padding if non-zero}(hj4ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMFhj1Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj0ChMGhjBubeh}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_hlist_start (C function)c.seq_hlist_starthNtauh1hhjVhhhNhNubj)}(hhh](j)}(hIstruct hlist_node * seq_hlist_start (struct hlist_head *head, loff_t pos)h]j)}(hGstruct hlist_node *seq_hlist_start(struct hlist_head *head, loff_t pos)h](j )}(hjh]hstruct}(hjuChhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjqChhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqChhhjChMubh)}(hhh]jI)}(h hlist_nodeh]h hlist_node}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj )}j ]j)}jseq_hlist_startsbc.seq_hlist_startasbuh1hhjqChhhjChMubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqChhhjChMubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqChhhjChMubjC)}(hseq_hlist_starth]jI)}(hjCh]hseq_hlist_start}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjqChhhjChMubj=)}(h%(struct hlist_head *head, loff_t pos)h](jC)}(hstruct hlist_head *headh](j )}(hjh]hstruct}(hjChhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjCubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjCubh)}(hhh]jI)}(h hlist_headh]h hlist_head}(hj DhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Dubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj )}j ]jCc.seq_hlist_startasbuh1hhjCubj2)}(h h]h }(hj+DhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjCubj)}(hjh]h*}(hj9DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjI)}(hheadh]hhead}(hjFDhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjCubjC)}(h loff_t posh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjbDhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_Dubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdDmodnameN classnameNjj )}j ]jCc.seq_hlist_startasbuh1hhj[Dubj2)}(h h]h }(hjDhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[DubjI)}(hposh]hpos}(hjDhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[Dubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjCubeh}(h]h ]h"]h$]h&]j`jauh1j<hjqChhhjChMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjmChhhjChMubah}(h]jhCah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjChMhjjChhubjw)}(hhh]h)}(hstart an iteration of a hlisth]hstart an iteration of a hlist}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jvhjjChhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjDjjDjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct hlist_head *head`` the head of the hlist ``loff_t pos`` the start position of the sequence **Description** Called at seq_file->op->start().h](h)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjDubj)}(hhh](j)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hjDh]hstruct hlist_head *head}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjDubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjDubj)}(h2``loff_t pos`` the start position of the sequence h](j)}(h``loff_t pos``h]j)}(hj2Eh]h loff_t pos}(hj4EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Eubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj,Eubj)}(hhh]h)}(h"the start position of the sequenceh]h"the start position of the sequence}(hjKEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGEhMhjHEubah}(h]h ]h"]h$]h&]uh1jhj,Eubeh}(h]h ]h"]h$]h&]uh1jhjGEhMhjDubeh}(h]h ]h"]h$]h&]uh1jhjDubh)}(h**Description**h]j)}(hjmEh]h Description}(hjoEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkEubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjDubh)}(h Called at seq_file->op->start().h]h Called at seq_file->op->start().}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !seq_hlist_start_head (C function)c.seq_hlist_start_headhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hNstruct hlist_node * seq_hlist_start_head (struct hlist_head *head, loff_t pos)h]j)}(hLstruct hlist_node *seq_hlist_start_head(struct hlist_head *head, loff_t pos)h](j )}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjEhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEhhhjEhMubh)}(hhh]jI)}(h hlist_nodeh]h hlist_node}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj )}j ]j)}jseq_hlist_start_headsbc.seq_hlist_start_headasbuh1hhjEhhhjEhMubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEhhhjEhMubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjEhMubjC)}(hseq_hlist_start_headh]jI)}(hjEh]hseq_hlist_start_head}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Fubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjEhhhjEhMubj=)}(h%(struct hlist_head *head, loff_t pos)h](jC)}(hstruct hlist_head *headh](j )}(hjh]hstruct}(hj,FhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(Fubj2)}(h h]h }(hj9FhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(Fubh)}(hhh]jI)}(h hlist_headh]h hlist_head}(hjJFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLFmodnameN classnameNjj )}j ]jEc.seq_hlist_start_headasbuh1hhj(Fubj2)}(h h]h }(hjhFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(Fubj)}(hjh]h*}(hjvFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(FubjI)}(hheadh]hhead}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(Fubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$FubjC)}(h loff_t posh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj )}j ]jEc.seq_hlist_start_headasbuh1hhjFubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubjI)}(hposh]hpos}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$Fubeh}(h]h ]h"]h$]h&]j`jauh1j<hjEhhhjEhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjEhhhjEhMubah}(h]jEah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjEhMhjEhhubjw)}(hhh]h)}(hstart an iteration of a hlisth]hstart an iteration of a hlist}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jvhjEhhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj Gjj Gjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct hlist_head *head`` the head of the hlist ``loff_t pos`` the start position of the sequence **Description** Called at seq_file->op->start(). Call this function if you want to print a header at the top of the output.h](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjGubj)}(hhh](j)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hj6Gh]hstruct hlist_head *head}(hj8GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Gubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj0Gubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjOGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKGhMhjLGubah}(h]h ]h"]h$]h&]uh1jhj0Gubeh}(h]h ]h"]h$]h&]uh1jhjKGhMhj-Gubj)}(h2``loff_t pos`` the start position of the sequence h](j)}(h``loff_t pos``h]j)}(hjoGh]h loff_t pos}(hjqGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmGubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjiGubj)}(hhh]h)}(h"the start position of the sequenceh]h"the start position of the sequence}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjiGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj-Gubeh}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjGubh)}(hkCalled at seq_file->op->start(). Call this function if you want to print a header at the top of the output.h]hkCalled at seq_file->op->start(). Call this function if you want to print a header at the top of the output.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_hlist_next (C function)c.seq_hlist_nexthNtauh1hhjVhhhNhNubj)}(hhh](j)}(hSstruct hlist_node * seq_hlist_next (void *v, struct hlist_head *head, loff_t *ppos)h]j)}(hQstruct hlist_node *seq_hlist_next(void *v, struct hlist_head *head, loff_t *ppos)h](j )}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjGhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjGhhhjGhMubh)}(hhh]jI)}(h hlist_nodeh]h hlist_node}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Hubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj )}j ]j)}jseq_hlist_nextsbc.seq_hlist_nextasbuh1hhjGhhhjGhMubj2)}(h h]h }(hj/HhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjGhhhjGhMubj)}(hjh]h*}(hj=HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhMubjC)}(hseq_hlist_nexth]jI)}(hj,Hh]hseq_hlist_next}(hjNHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJHubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjGhhhjGhMubj=)}(h0(void *v, struct hlist_head *head, loff_t *ppos)h](jC)}(hvoid *vh](jf)}(hvoidh]hvoid}(hjiHhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjeHubj2)}(h h]h }(hjwHhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeHubjI)}(hvh]hv}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeHubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaHubjC)}(hstruct hlist_head *headh](j )}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjHubj2)}(h h]h }(hjHhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHubh)}(hhh]jI)}(h hlist_headh]h hlist_head}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj )}j ]j*Hc.seq_hlist_nextasbuh1hhjHubj2)}(h h]h }(hjHhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjI)}(hheadh]hhead}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaHubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj ImodnameN classnameNjj )}j ]j*Hc.seq_hlist_nextasbuh1hhjIubj2)}(h h]h }(hjah"]h$]h&]uh1j1hjIubj)}(hjh]h*}(hjJIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjI)}(hpposh]hppos}(hjWIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaHubeh}(h]h ]h"]h$]h&]j`jauh1j<hjGhhhjGhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjGhhhjGhMubah}(h]jGah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjGhMhjGhhubjw)}(hhh]h)}(h&move to the next position of the hlisth]h&move to the next position of the hlist}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj~Ihhubah}(h]h ]h"]h$]h&]uh1jvhjGhhhjGhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjIjjIjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``void *v`` the current iterator ``struct hlist_head *head`` the head of the hlist ``loff_t *ppos`` the current position **Description** Called at seq_file->op->next().h](h)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjIubj)}(hhh](j)}(h!``void *v`` the current iterator h](j)}(h ``void *v``h]j)}(hjIh]hvoid *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjIubj)}(hhh]h)}(hthe current iteratorh]hthe current iterator}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubj)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hjIh]hstruct hlist_head *head}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjIubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(h&``loff_t *ppos`` the current position h](j)}(h``loff_t *ppos``h]j)}(hj4Jh]h loff_t *ppos}(hj6JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Jubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj.Jubj)}(hhh]h)}(hthe current positionh]hthe current position}(hjMJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIJhMhjJJubah}(h]h ]h"]h$]h&]uh1jhj.Jubeh}(h]h ]h"]h$]h&]uh1jhjIJhMhjIubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j)}(hjoJh]h Description}(hjqJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmJubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjIubh)}(hCalled at seq_file->op->next().h]hCalled at seq_file->op->next().}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  seq_hlist_start_rcu (C function)c.seq_hlist_start_rcuhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hMstruct hlist_node * seq_hlist_start_rcu (struct hlist_head *head, loff_t pos)h]j)}(hKstruct hlist_node *seq_hlist_start_rcu(struct hlist_head *head, loff_t pos)h](j )}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJhhhjJhMubh)}(hhh]jI)}(h hlist_nodeh]h hlist_node}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj )}j ]j)}jseq_hlist_start_rcusbc.seq_hlist_start_rcuasbuh1hhjJhhhjJhMubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJhhhjJhMubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhjJhMubjC)}(hseq_hlist_start_rcuh]jI)}(hjJh]hseq_hlist_start_rcu}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjJhhhjJhMubj=)}(h%(struct hlist_head *head, loff_t pos)h](jC)}(hstruct hlist_head *headh](j )}(hjh]hstruct}(hj.KhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj*Kubj2)}(h h]h }(hj;KhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*Kubh)}(hhh]jI)}(h hlist_headh]h hlist_head}(hjLKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNKmodnameN classnameNjj )}j ]jJc.seq_hlist_start_rcuasbuh1hhj*Kubj2)}(h h]h }(hjjKhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*Kubj)}(hjh]h*}(hjxKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*KubjI)}(hheadh]hhead}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*Kubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&KubjC)}(h loff_t posh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj )}j ]jJc.seq_hlist_start_rcuasbuh1hhjKubj2)}(h h]h }(hjKhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjKubjI)}(hposh]hpos}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&Kubeh}(h]h ]h"]h$]h&]j`jauh1j<hjJhhhjJhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjJhhhjJhMubah}(h]jJah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjJhMhjJhhubjw)}(hhh]h)}(h.start an iteration of a hlist protected by RCUh]h.start an iteration of a hlist protected by RCU}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjKhhubah}(h]h ]h"]h$]h&]uh1jvhjJhhhjJhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhjVhNhNubj)}(hXb**Parameters** ``struct hlist_head *head`` the head of the hlist ``loff_t pos`` the start position of the sequence **Description** Called at seq_file->op->start(). This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().h](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjLubj)}(hhh](j)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hj8Lh]hstruct hlist_head *head}(hj:LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Lubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj2Lubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjQLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMLhMhjNLubah}(h]h ]h"]h$]h&]uh1jhj2Lubeh}(h]h ]h"]h$]h&]uh1jhjMLhMhj/Lubj)}(h2``loff_t pos`` the start position of the sequence h](j)}(h``loff_t pos``h]j)}(hjqLh]h loff_t pos}(hjsLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoLubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjkLubj)}(hhh]h)}(h"the start position of the sequenceh]h"the start position of the sequence}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjLubah}(h]h ]h"]h$]h&]uh1jhjkLubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj/Lubeh}(h]h ]h"]h$]h&]uh1jhjLubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjLubh)}(h Called at seq_file->op->start().h]h Called at seq_file->op->start().}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjLubh)}(hThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().h]hThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %seq_hlist_start_head_rcu (C function)c.seq_hlist_start_head_rcuhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hRstruct hlist_node * seq_hlist_start_head_rcu (struct hlist_head *head, loff_t pos)h]j)}(hPstruct hlist_node *seq_hlist_start_head_rcu(struct hlist_head *head, loff_t pos)h](j )}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjLhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjLhhhj MhMubh)}(hhh]jI)}(h hlist_nodeh]h hlist_node}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!MmodnameN classnameNjj )}j ]j)}jseq_hlist_start_head_rcusbc.seq_hlist_start_head_rcuasbuh1hhjLhhhj MhMubj2)}(h h]h }(hj@MhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjLhhhj MhMubj)}(hjh]h*}(hjNMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj MhMubjC)}(hseq_hlist_start_head_rcuh]jI)}(hj=Mh]hseq_hlist_start_head_rcu}(hj_MhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[Mubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjLhhhj MhMubj=)}(h%(struct hlist_head *head, loff_t pos)h](jC)}(hstruct hlist_head *headh](j )}(hjh]hstruct}(hjzMhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjvMubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvMubh)}(hhh]jI)}(h hlist_headh]h hlist_head}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj )}j ]j;Mc.seq_hlist_start_head_rcuasbuh1hhjvMubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvMubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvMubjI)}(hheadh]hhead}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvMubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjrMubjC)}(h loff_t posh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj )}j ]j;Mc.seq_hlist_start_head_rcuasbuh1hhjMubj2)}(h h]h }(hj NhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMubjI)}(hposh]hpos}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjrMubeh}(h]h ]h"]h$]h&]j`jauh1j<hjLhhhj MhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjLhhhj MhMubah}(h]jLah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj MhMhjLhhubjw)}(hhh]h)}(h.start an iteration of a hlist protected by RCUh]h.start an iteration of a hlist protected by RCU}(hjCNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj@Nhhubah}(h]h ]h"]h$]h&]uh1jvhjLhhhj MhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[Njj[Njjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct hlist_head *head`` the head of the hlist ``loff_t pos`` the start position of the sequence **Description** Called at seq_file->op->start(). Call this function if you want to print a header at the top of the output. This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().h](h)}(h**Parameters**h]j)}(hjeNh]h Parameters}(hjgNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj_Nubj)}(hhh](j)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hjNh]hstruct hlist_head *head}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj~Nubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhj~Nubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj{Nubj)}(h2``loff_t pos`` the start position of the sequence h](j)}(h``loff_t pos``h]j)}(hjNh]h loff_t pos}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhjNubj)}(hhh]h)}(h"the start position of the sequenceh]h"the start position of the sequence}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj{Nubeh}(h]h ]h"]h$]h&]uh1jhj_Nubh)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj_Nubh)}(hkCalled at seq_file->op->start(). Call this function if you want to print a header at the top of the output.h]hkCalled at seq_file->op->start(). Call this function if you want to print a header at the top of the output.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj_Nubh)}(hThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().h]hThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMhj_Nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j seq_hlist_next_rcu (C function)c.seq_hlist_next_rcuhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hWstruct hlist_node * seq_hlist_next_rcu (void *v, struct hlist_head *head, loff_t *ppos)h]j)}(hUstruct hlist_node *seq_hlist_next_rcu(void *v, struct hlist_head *head, loff_t *ppos)h](j )}(hjh]hstruct}(hjLOhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjHOhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM%ubj2)}(h h]h }(hjZOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHOhhhjYOhM%ubh)}(hhh]jI)}(h hlist_nodeh]h hlist_node}(hjkOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmOmodnameN classnameNjj )}j ]j)}jseq_hlist_next_rcusbc.seq_hlist_next_rcuasbuh1hhjHOhhhjYOhM%ubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHOhhhjYOhM%ubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHOhhhjYOhM%ubjC)}(hseq_hlist_next_rcuh]jI)}(hjOh]hseq_hlist_next_rcu}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjHOhhhjYOhM%ubj=)}(h0(void *v, struct hlist_head *head, loff_t *ppos)h](jC)}(hvoid *vh](jf)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjOubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjI)}(hjHh]hv}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubjC)}(hstruct hlist_head *headh](j )}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjPubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjPubh)}(hhh]jI)}(h hlist_headh]h hlist_head}(hj%PhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"Pubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'PmodnameN classnameNjj )}j ]jOc.seq_hlist_next_rcuasbuh1hhjPubj2)}(h h]h }(hjCPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjPubj)}(hjh]h*}(hjQPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjI)}(hheadh]hhead}(hj^PhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjPubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjzPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|PmodnameN classnameNjj )}j ]jOc.seq_hlist_next_rcuasbuh1hhjsPubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsPubjI)}(hpposh]hppos}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsPubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubeh}(h]h ]h"]h$]h&]j`jauh1j<hjHOhhhjYOhM%ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjDOhhhjYOhM%ubah}(h]j?Oah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjYOhM%hjAOhhubjw)}(hhh]h)}(h7move to the next position of the hlist protected by RCUh]h7move to the next position of the hlist protected by RCU}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM%hjPhhubah}(h]h ]h"]h$]h&]uh1jvhjAOhhhjYOhM%ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1jhhhjVhNhNubj)}(hXy**Parameters** ``void *v`` the current iterator ``struct hlist_head *head`` the head of the hlist ``loff_t *ppos`` the current position **Description** Called at seq_file->op->next(). This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM)hjPubj)}(hhh](j)}(h!``void *v`` the current iterator h](j)}(h ``void *v``h]j)}(hjQh]hvoid *v}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM&hjQubj)}(hhh]h)}(hthe current iteratorh]hthe current iterator}(hj7QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3QhM&hj4Qubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhj3QhM&hjQubj)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hjWQh]hstruct hlist_head *head}(hjYQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUQubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM'hjQQubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjpQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlQhM'hjmQubah}(h]h ]h"]h$]h&]uh1jhjQQubeh}(h]h ]h"]h$]h&]uh1jhjlQhM'hjQubj)}(h&``loff_t *ppos`` the current position h](j)}(h``loff_t *ppos``h]j)}(hjQh]h loff_t *ppos}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM(hjQubj)}(hhh]h)}(hthe current positionh]hthe current position}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM(hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhM(hjQubeh}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM*hjPubh)}(hCalled at seq_file->op->next().h]hCalled at seq_file->op->next().}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM)hjPubh)}(hThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().h]hThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM+hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #seq_hlist_start_percpu (C function)c.seq_hlist_start_percpuhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hcstruct hlist_node * seq_hlist_start_percpu (struct hlist_head __percpu *head, int *cpu, loff_t pos)h]j)}(hastruct hlist_node *seq_hlist_start_percpu(struct hlist_head __percpu *head, int *cpu, loff_t pos)h](j )}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM?ubj2)}(h h]h }(hj-RhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRhhhj,RhM?ubh)}(hhh]jI)}(h hlist_nodeh]h hlist_node}(hj>RhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@RmodnameN classnameNjj )}j ]j)}jseq_hlist_start_percpusbc.seq_hlist_start_percpuasbuh1hhjRhhhj,RhM?ubj2)}(h h]h }(hj_RhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRhhhj,RhM?ubj)}(hjh]h*}(hjmRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhj,RhM?ubjC)}(hseq_hlist_start_percpuh]jI)}(hj\Rh]hseq_hlist_start_percpu}(hj~RhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzRubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjRhhhj,RhM?ubj=)}(h8(struct hlist_head __percpu *head, int *cpu, loff_t pos)h](jC)}(h struct hlist_head __percpu *headh](j )}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubh)}(hhh]jI)}(h hlist_headh]h hlist_head}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj )}j ]jZRc.seq_hlist_start_percpuasbuh1hhjRubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubh__percpu}(hjRhhhNhNubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjI)}(hheadh]hhead}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubjC)}(hint *cpuh](jf)}(hinth]hint}(hjShhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjSubj2)}(h h]h }(hj)ShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjSubj)}(hjh]h*}(hj7ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjI)}(hcpuh]hcpu}(hjDShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubjC)}(h loff_t posh](h)}(hhh]jI)}(hloff_th]hloff_t}(hj`ShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]Subah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbSmodnameN classnameNjj )}j ]jZRc.seq_hlist_start_percpuasbuh1hhjYSubj2)}(h h]h }(hj~ShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjYSubjI)}(hposh]hpos}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYSubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubeh}(h]h ]h"]h$]h&]j`jauh1j<hjRhhhj,RhM?ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjRhhhj,RhM?ubah}(h]jRah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj,RhM?hjRhhubjw)}(hhh]h)}(h*start an iteration of a percpu hlist arrayh]h*start an iteration of a percpu hlist array}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM?hjShhubah}(h]h ]h"]h$]h&]uh1jvhjRhhhj,RhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct hlist_head __percpu *head`` pointer to percpu array of struct hlist_heads ``int *cpu`` pointer to cpu "cursor" ``loff_t pos`` start position of sequence **Description** Called at seq_file->op->start().h](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMChjSubj)}(hhh](j)}(hS``struct hlist_head __percpu *head`` pointer to percpu array of struct hlist_heads h](j)}(h$``struct hlist_head __percpu *head``h]j)}(hjSh]h struct hlist_head __percpu *head}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM@hjSubj)}(hhh]h)}(h-pointer to percpu array of struct hlist_headsh]h-pointer to percpu array of struct hlist_heads}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ThM@hj Tubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhj ThM@hjSubj)}(h%``int *cpu`` pointer to cpu "cursor" h](j)}(h ``int *cpu``h]j)}(hj0Th]hint *cpu}(hj2ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Tubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMAhj*Tubj)}(hhh]h)}(hpointer to cpu "cursor"h]hpointer to cpu “cursor”}(hjIThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEThMAhjFTubah}(h]h ]h"]h$]h&]uh1jhj*Tubeh}(h]h ]h"]h$]h&]uh1jhjEThMAhjSubj)}(h*``loff_t pos`` start position of sequence h](j)}(h``loff_t pos``h]j)}(hjiTh]h loff_t pos}(hjkThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgTubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMBhjcTubj)}(hhh]h)}(hstart position of sequenceh]hstart position of sequence}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ThMBhjTubah}(h]h ]h"]h$]h&]uh1jhjcTubeh}(h]h ]h"]h$]h&]uh1jhj~ThMBhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMDhjSubh)}(h Called at seq_file->op->start().h]h Called at seq_file->op->start().}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMChjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "seq_hlist_next_percpu (C function)c.seq_hlist_next_percpuhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hlstruct hlist_node * seq_hlist_next_percpu (void *v, struct hlist_head __percpu *head, int *cpu, loff_t *pos)h]j)}(hjstruct hlist_node *seq_hlist_next_percpu(void *v, struct hlist_head __percpu *head, int *cpu, loff_t *pos)h](j )}(hjh]hstruct}(hjThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjThhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMVubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjThhhjThMVubh)}(hhh]jI)}(h hlist_nodeh]h hlist_node}(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj UmodnameN classnameNjj )}j ]j)}jseq_hlist_next_percpusbc.seq_hlist_next_percpuasbuh1hhjThhhjThMVubj2)}(h h]h }(hj)UhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjThhhjThMVubj)}(hjh]h*}(hj7UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjThMVubjC)}(hseq_hlist_next_percpuh]jI)}(hj&Uh]hseq_hlist_next_percpu}(hjHUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDUubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjThhhjThMVubj=)}(hB(void *v, struct hlist_head __percpu *head, int *cpu, loff_t *pos)h](jC)}(hvoid *vh](jf)}(hvoidh]hvoid}(hjcUhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj_Uubj2)}(h h]h }(hjqUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_Uubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_UubjI)}(hjHh]hv}(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_Uubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[UubjC)}(h struct hlist_head __percpu *headh](j )}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjUubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjUubh)}(hhh]jI)}(h hlist_headh]h hlist_head}(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj )}j ]j$Uc.seq_hlist_next_percpuasbuh1hhjUubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjUubh__percpu}(hjUhhhNhNubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjUubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjI)}(hheadh]hhead}(hj VhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[UubjC)}(hint *cpuh](jf)}(hinth]hint}(hj&VhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj"Vubj2)}(h h]h }(hj4VhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj"Vubj)}(hjh]h*}(hjBVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"VubjI)}(hcpuh]hcpu}(hjOVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"Vubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[UubjC)}(h loff_t *posh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjkVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmVmodnameN classnameNjj )}j ]j$Uc.seq_hlist_next_percpuasbuh1hhjdVubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdVubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdVubjI)}(hposh]hpos}(hjVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdVubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[Uubeh}(h]h ]h"]h$]h&]j`jauh1j<hjThhhjThMVubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjThhhjThMVubah}(h]jTah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjThMVhjThhubjw)}(hhh]h)}(h3move to the next position of the percpu hlist arrayh]h3move to the next position of the percpu hlist array}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMVhjVhhubah}(h]h ]h"]h$]h&]uh1jvhjThhhjThMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``void *v`` pointer to current hlist_node ``struct hlist_head __percpu *head`` pointer to percpu array of struct hlist_heads ``int *cpu`` pointer to cpu "cursor" ``loff_t *pos`` start position of sequence **Description** Called at seq_file->op->next().h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMZhjVubj)}(hhh](j)}(h*``void *v`` pointer to current hlist_node h](j)}(h ``void *v``h]j)}(hjWh]hvoid *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Wubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMWhj Wubj)}(hhh]h)}(hpointer to current hlist_nodeh]hpointer to current hlist_node}(hj(WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$WhMWhj%Wubah}(h]h ]h"]h$]h&]uh1jhj Wubeh}(h]h ]h"]h$]h&]uh1jhj$WhMWhjWubj)}(hS``struct hlist_head __percpu *head`` pointer to percpu array of struct hlist_heads h](j)}(h$``struct hlist_head __percpu *head``h]j)}(hjHWh]h struct hlist_head __percpu *head}(hjJWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFWubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMXhjBWubj)}(hhh]h)}(h-pointer to percpu array of struct hlist_headsh]h-pointer to percpu array of struct hlist_heads}(hjaWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]WhMXhj^Wubah}(h]h ]h"]h$]h&]uh1jhjBWubeh}(h]h ]h"]h$]h&]uh1jhj]WhMXhjWubj)}(h%``int *cpu`` pointer to cpu "cursor" h](j)}(h ``int *cpu``h]j)}(hjWh]hint *cpu}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMYhj{Wubj)}(hhh]h)}(hpointer to cpu "cursor"h]hpointer to cpu “cursor”}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMYhjWubah}(h]h ]h"]h$]h&]uh1jhj{Wubeh}(h]h ]h"]h$]h&]uh1jhjWhMYhjWubj)}(h+``loff_t *pos`` start position of sequence h](j)}(h``loff_t *pos``h]j)}(hjWh]h loff_t *pos}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chMZhjWubj)}(hhh]h)}(hstart position of sequenceh]hstart position of sequence}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMZhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMZhjWubeh}(h]h ]h"]h$]h&]uh1jhjVubh)}(h**Description**h]j)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM\hjVubh)}(hCalled at seq_file->op->next().h]hCalled at seq_file->op->next().}(hj XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/seq_file.chM[hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  register_filesystem (C function)c.register_filesystemhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h5int register_filesystem (struct file_system_type *fs)h]j)}(h4int register_filesystem(struct file_system_type *fs)h](jf)}(hinth]hint}(hj:XhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj6XhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKXubj2)}(h h]h }(hjIXhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6XhhhjHXhKXubjC)}(hregister_filesystemh]jI)}(hregister_filesystemh]hregister_filesystem}(hj[XhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWXubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj6XhhhjHXhKXubj=)}(h(struct file_system_type *fs)h]jC)}(hstruct file_system_type *fsh](j )}(hjh]hstruct}(hjwXhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjsXubj2)}(h h]h }(hjXhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsXubh)}(hhh]jI)}(hfile_system_typeh]hfile_system_type}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj )}j ]j)}jj]Xsbc.register_filesystemasbuh1hhjsXubj2)}(h h]h }(hjXhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsXubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsXubjI)}(hfsh]hfs}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsXubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjoXubah}(h]h ]h"]h$]h&]j`jauh1j<hj6XhhhjHXhKXubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj2XhhhjHXhKXubah}(h]j-Xah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjHXhKXhj/Xhhubjw)}(hhh]h)}(hregister a new filesystemh]hregister a new filesystem}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKXhjXhhubah}(h]h ]h"]h$]h&]uh1jvhj/XhhhjHXhKXubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct file_system_type *fs`` the file system structure **Description** Adds the file system passed to the list of file systems the kernel is aware of for mount and other syscalls. Returns 0 on success, or a negative errno code on an error. The :c:type:`struct file_system_type ` that is passed is linked into the kernel structures and must not be freed until the file system has been unregistered.h](h)}(h**Parameters**h]j)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chK\hjYubj)}(hhh]j)}(h:``struct file_system_type *fs`` the file system structure h](j)}(h``struct file_system_type *fs``h]j)}(hj;Yh]hstruct file_system_type *fs}(hj=YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Yubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKYhj5Yubj)}(hhh]h)}(hthe file system structureh]hthe file system structure}(hjTYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPYhKYhjQYubah}(h]h ]h"]h$]h&]uh1jhj5Yubeh}(h]h ]h"]h$]h&]uh1jhjPYhKYhj2Yubah}(h]h ]h"]h$]h&]uh1jhjYubh)}(h**Description**h]j)}(hjvYh]h Description}(hjxYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtYubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chK[hjYubj)}(hXYAdds the file system passed to the list of file systems the kernel is aware of for mount and other syscalls. Returns 0 on success, or a negative errno code on an error. The :c:type:`struct file_system_type ` that is passed is linked into the kernel structures and must not be freed until the file system has been unregistered.h](h)}(hAdds the file system passed to the list of file systems the kernel is aware of for mount and other syscalls. Returns 0 on success, or a negative errno code on an error.h]hAdds the file system passed to the list of file systems the kernel is aware of for mount and other syscalls. Returns 0 on success, or a negative errno code on an error.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKZhjYubh)}(hThe :c:type:`struct file_system_type ` that is passed is linked into the kernel structures and must not be freed until the file system has been unregistered.h](hThe }(hjYhhhNhNubh)}(h4:c:type:`struct file_system_type `h]j)}(hjYh]hstruct file_system_type}(hjYhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocj  refdomainjreftypetype refexplicitrefwarnjj j file_system_typeuh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chK^hjYubhw that is passed is linked into the kernel structures and must not be freed until the file system has been unregistered.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYhK^hjYubeh}(h]h ]h"]h$]h&]uh1jhjYhKZhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "unregister_filesystem (C function)c.unregister_filesystemhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h7int unregister_filesystem (struct file_system_type *fs)h]j)}(h6int unregister_filesystem(struct file_system_type *fs)h](jf)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjYhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKwubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjYhhhjZhKwubjC)}(hunregister_filesystemh]jI)}(hunregister_filesystemh]hunregister_filesystem}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjYhhhjZhKwubj=)}(h(struct file_system_type *fs)h]jC)}(hstruct file_system_type *fsh](j )}(hjh]hstruct}(hj4ZhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0Zubj2)}(h h]h }(hjAZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0Zubh)}(hhh]jI)}(hfile_system_typeh]hfile_system_type}(hjRZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTZmodnameN classnameNjj )}j ]j)}jjZsbc.unregister_filesystemasbuh1hhj0Zubj2)}(h h]h }(hjrZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0Zubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ZubjI)}(hfsh]hfs}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0Zubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj,Zubah}(h]h ]h"]h$]h&]j`jauh1j<hjYhhhjZhKwubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjYhhhjZhKwubah}(h]jYah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjZhKwhjYhhubjw)}(hhh]h)}(hunregister a file systemh]hunregister a file system}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKwhjZhhubah}(h]h ]h"]h$]h&]uh1jvhjYhhhjZhKwubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct file_system_type *fs`` filesystem to unregister **Description** Remove a file system that was previously successfully registered with the kernel. An error is returned if the file system is not found. Zero is returned on a success. Once this function has returned the :c:type:`struct file_system_type ` structure may be freed or reused.h](h)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chK{hjZubj)}(hhh]j)}(h9``struct file_system_type *fs`` filesystem to unregister h](j)}(h``struct file_system_type *fs``h]j)}(hjZh]hstruct file_system_type *fs}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKxhjZubj)}(hhh]h)}(hfilesystem to unregisterh]hfilesystem to unregister}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj [hKxhj[ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj [hKxhjZubah}(h]h ]h"]h$]h&]uh1jhjZubh)}(h**Description**h]j)}(hj3[h]h Description}(hj5[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1[ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKzhjZubj)}(hX"Remove a file system that was previously successfully registered with the kernel. An error is returned if the file system is not found. Zero is returned on a success. Once this function has returned the :c:type:`struct file_system_type ` structure may be freed or reused.h](h)}(hRemove a file system that was previously successfully registered with the kernel. An error is returned if the file system is not found. Zero is returned on a success.h]hRemove a file system that was previously successfully registered with the kernel. An error is returned if the file system is not found. Zero is returned on a success.}(hjM[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chKyhjI[ubh)}(hzOnce this function has returned the :c:type:`struct file_system_type ` structure may be freed or reused.h](h$Once this function has returned the }(hj\[hhhNhNubh)}(h4:c:type:`struct file_system_type `h]j)}(hjf[h]hstruct file_system_type}(hjh[hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjd[ubah}(h]h ]h"]h$]h&]refdocj  refdomainjreftypetype refexplicitrefwarnjj j file_system_typeuh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/filesystems.chK}hj\[ubh" structure may be freed or reused.}(hj\[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hK}hjI[ubeh}(h]h ]h"]h$]h&]uh1jhj[[hKyhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j (wbc_attach_fdatawrite_inode (C function)c.wbc_attach_fdatawrite_inodehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hUvoid wbc_attach_fdatawrite_inode (struct writeback_control *wbc, struct inode *inode)h]j)}(hTvoid wbc_attach_fdatawrite_inode(struct writeback_control *wbc, struct inode *inode)h](jf)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj[hhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMRubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[hhhj[hMRubjC)}(hwbc_attach_fdatawrite_inodeh]jI)}(hwbc_attach_fdatawrite_inodeh]hwbc_attach_fdatawrite_inode}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj[hhhj[hMRubj=)}(h4(struct writeback_control *wbc, struct inode *inode)h](jC)}(hstruct writeback_control *wbch](j )}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj[ubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubh)}(hhh]jI)}(hwriteback_controlh]hwriteback_control}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj \ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj )}j ]j)}jj[sbc.wbc_attach_fdatawrite_inodeasbuh1hhj[ubj2)}(h h]h }(hj/\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubj)}(hjh]h*}(hj=\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjI)}(hwbch]hwbc}(hjJ\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[ubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjc\hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj_\ubj2)}(h h]h }(hjp\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_\ubh)}(hhh]jI)}(hinodeh]hinode}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj~\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj )}j ]j+\c.wbc_attach_fdatawrite_inodeasbuh1hhj_\ubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_\ubjI)}(hinodeh]hinode}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_\ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj[ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj[hhhj[hMRubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj[hhhj[hMRubah}(h]j[ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj[hMRhj[hhubjw)}(hhh]h)}(h&associate wbc and inode for fdatawriteh]h&associate wbc and inode for fdatawrite}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMRhj\hhubah}(h]h ]h"]h$]h&]uh1jvhj[hhhj[hMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\jj\jjjuh1jhhhjVhNhNubj)}(hXS**Parameters** ``struct writeback_control *wbc`` writeback_control of interest ``struct inode *inode`` target inode **Description** This function is to be used by filemap_writeback(), which is an alternative entry point into writeback code, and first ensures **inode** is associated with a bdi_writeback and attaches it to **wbc**.h](h)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMVhj]ubj)}(hhh](j)}(h@``struct writeback_control *wbc`` writeback_control of interest h](j)}(h!``struct writeback_control *wbc``h]j)}(hj%]h]hstruct writeback_control *wbc}(hj']hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#]ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMShj]ubj)}(hhh]h)}(hwriteback_control of interesth]hwriteback_control of interest}(hj>]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:]hMShj;]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj:]hMShj]ubj)}(h%``struct inode *inode`` target inode h](j)}(h``struct inode *inode``h]j)}(hj^]h]hstruct inode *inode}(hj`]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\]ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMThjX]ubj)}(hhh]h)}(h target inodeh]h target inode}(hjw]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs]hMThjt]ubah}(h]h ]h"]h$]h&]uh1jhjX]ubeh}(h]h ]h"]h$]h&]uh1jhjs]hMThj]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMVhj]ubh)}(hThis function is to be used by filemap_writeback(), which is an alternative entry point into writeback code, and first ensures **inode** is associated with a bdi_writeback and attaches it to **wbc**.h](hThis function is to be used by filemap_writeback(), which is an alternative entry point into writeback code, and first ensures }(hj]hhhNhNubj)}(h **inode**h]hinode}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh7 is associated with a bdi_writeback and attaches it to }(hj]hhhNhNubj)}(h**wbc**h]hwbc}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMUhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j wbc_detach_inode (C function)c.wbc_detach_inodehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h5void wbc_detach_inode (struct writeback_control *wbc)h]j)}(h4void wbc_detach_inode(struct writeback_control *wbc)h](jf)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj]hhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMdubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]hhhj^hMdubjC)}(hwbc_detach_inodeh]jI)}(hwbc_detach_inodeh]hwbc_detach_inode}(hj#^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj]hhhj^hMdubj=)}(h(struct writeback_control *wbc)h]jC)}(hstruct writeback_control *wbch](j )}(hjh]hstruct}(hj?^hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj;^ubj2)}(h h]h }(hjL^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;^ubh)}(hhh]jI)}(hwriteback_controlh]hwriteback_control}(hj]^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZ^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_^modnameN classnameNjj )}j ]j)}jj%^sbc.wbc_detach_inodeasbuh1hhj;^ubj2)}(h h]h }(hj}^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;^ubjI)}(hwbch]hwbc}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;^ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj7^ubah}(h]h ]h"]h$]h&]j`jauh1j<hj]hhhj^hMdubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj]hhhj^hMdubah}(h]j]ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj^hMdhj]hhubjw)}(hhh]h)}(h9disassociate wbc from inode and perform foreign detectionh]h9disassociate wbc from inode and perform foreign detection}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMdhj^hhubah}(h]h ]h"]h$]h&]uh1jvhj]hhhj^hMdubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct writeback_control *wbc`` writeback_control of the just finished writeback **Description** To be called after a writeback attempt of an inode finishes and undoes wbc_attach_and_unlock_inode(). Can be called under any context. As concurrent write sharing of an inode is expected to be very rare and memcg only tracks page ownership on first-use basis severely confining the usefulness of such sharing, cgroup writeback tracks ownership per-inode. While the support for concurrent write sharing of an inode is deemed unnecessary, an inode being written to by different cgroups at different points in time is a lot more common, and, more importantly, charging only by first-use can too readily lead to grossly incorrect behaviors (single foreign page can lead to gigabytes of writeback to be incorrectly attributed). To resolve this issue, cgroup writeback detects the majority dirtier of an inode and transfers the ownership to it. To avoid unnecessary oscillation, the detection mechanism keeps track of history and gives out the switch verdict only if the foreign usage pattern is stable over a certain amount of time and/or writeback attempts. On each writeback attempt, **wbc** tries to detect the majority writer using Boyer-Moore majority vote algorithm. In addition to the byte count from the majority voting, it also counts the bytes written for the current wb and the last round's winner wb (max of last round's current wb, the winner from two rounds ago, and the last round's majority candidate). Keeping track of the historical winner helps the algorithm to semi-reliably detect the most active writer even when it's not the absolute majority. Once the winner of the round is determined, whether the winner is foreign or not and how much IO time the round consumed is recorded in inode->i_wb_frn_history. If the amount of recorded foreign IO time is over a certain threshold, the switch verdict is given.h](h)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhhj^ubj)}(hhh]j)}(hS``struct writeback_control *wbc`` writeback_control of the just finished writeback h](j)}(h!``struct writeback_control *wbc``h]j)}(hj_h]hstruct writeback_control *wbc}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMehj^ubj)}(hhh]h)}(h0writeback_control of the just finished writebackh]h0writeback_control of the just finished writeback}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMehj_ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj_hMehj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubh)}(h**Description**h]j)}(hj>_h]h Description}(hj@_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<_ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMghj^ubh)}(hTo be called after a writeback attempt of an inode finishes and undoes wbc_attach_and_unlock_inode(). Can be called under any context.h]hTo be called after a writeback attempt of an inode finishes and undoes wbc_attach_and_unlock_inode(). Can be called under any context.}(hjT_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMfhj^ubh)}(hXLAs concurrent write sharing of an inode is expected to be very rare and memcg only tracks page ownership on first-use basis severely confining the usefulness of such sharing, cgroup writeback tracks ownership per-inode. While the support for concurrent write sharing of an inode is deemed unnecessary, an inode being written to by different cgroups at different points in time is a lot more common, and, more importantly, charging only by first-use can too readily lead to grossly incorrect behaviors (single foreign page can lead to gigabytes of writeback to be incorrectly attributed).h]hXLAs concurrent write sharing of an inode is expected to be very rare and memcg only tracks page ownership on first-use basis severely confining the usefulness of such sharing, cgroup writeback tracks ownership per-inode. While the support for concurrent write sharing of an inode is deemed unnecessary, an inode being written to by different cgroups at different points in time is a lot more common, and, more importantly, charging only by first-use can too readily lead to grossly incorrect behaviors (single foreign page can lead to gigabytes of writeback to be incorrectly attributed).}(hjc_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMihj^ubh)}(hXKTo resolve this issue, cgroup writeback detects the majority dirtier of an inode and transfers the ownership to it. To avoid unnecessary oscillation, the detection mechanism keeps track of history and gives out the switch verdict only if the foreign usage pattern is stable over a certain amount of time and/or writeback attempts.h]hXKTo resolve this issue, cgroup writeback detects the majority dirtier of an inode and transfers the ownership to it. To avoid unnecessary oscillation, the detection mechanism keeps track of history and gives out the switch verdict only if the foreign usage pattern is stable over a certain amount of time and/or writeback attempts.}(hjr_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMshj^ubh)}(hXOn each writeback attempt, **wbc** tries to detect the majority writer using Boyer-Moore majority vote algorithm. In addition to the byte count from the majority voting, it also counts the bytes written for the current wb and the last round's winner wb (max of last round's current wb, the winner from two rounds ago, and the last round's majority candidate). Keeping track of the historical winner helps the algorithm to semi-reliably detect the most active writer even when it's not the absolute majority.h](hOn each writeback attempt, }(hj_hhhNhNubj)}(h**wbc**h]hwbc}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubhX tries to detect the majority writer using Boyer-Moore majority vote algorithm. In addition to the byte count from the majority voting, it also counts the bytes written for the current wb and the last round’s winner wb (max of last round’s current wb, the winner from two rounds ago, and the last round’s majority candidate). Keeping track of the historical winner helps the algorithm to semi-reliably detect the most active writer even when it’s not the absolute majority.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMyhj^ubh)}(hXOnce the winner of the round is determined, whether the winner is foreign or not and how much IO time the round consumed is recorded in inode->i_wb_frn_history. If the amount of recorded foreign IO time is over a certain threshold, the switch verdict is given.h]hXOnce the winner of the round is determined, whether the winner is foreign or not and how much IO time the round consumed is recorded in inode->i_wb_frn_history. If the amount of recorded foreign IO time is over a certain threshold, the switch verdict is given.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %wbc_account_cgroup_owner (C function)c.wbc_account_cgroup_ownerhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h`void wbc_account_cgroup_owner (struct writeback_control *wbc, struct folio *folio, size_t bytes)h]j)}(h_void wbc_account_cgroup_owner(struct writeback_control *wbc, struct folio *folio, size_t bytes)h](jf)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj_hhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMubj2)}(h h]h }(hj_hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_hhhj_hMubjC)}(hwbc_account_cgroup_ownerh]jI)}(hwbc_account_cgroup_ownerh]hwbc_account_cgroup_owner}(hj_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj_hhhj_hMubj=)}(hB(struct writeback_control *wbc, struct folio *folio, size_t bytes)h](jC)}(hstruct writeback_control *wbch](j )}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj `ubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj `ubh)}(hhh]jI)}(hwriteback_controlh]hwriteback_control}(hj,`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.`modnameN classnameNjj )}j ]j)}jj_sbc.wbc_account_cgroup_ownerasbuh1hhj `ubj2)}(h h]h }(hjL`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj `ubj)}(hjh]h*}(hjZ`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj `ubjI)}(hwbch]hwbc}(hjg`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj `ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubjC)}(hstruct folio *folioh](j )}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|`ubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|`ubh)}(hhh]jI)}(hfolioh]hfolio}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj )}j ]jH`c.wbc_account_cgroup_ownerasbuh1hhj|`ubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|`ubjI)}(hfolioh]hfolio}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|`ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubjC)}(h size_t bytesh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj )}j ]jH`c.wbc_account_cgroup_ownerasbuh1hhj`ubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`ubjI)}(hbytesh]hbytes}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj_hhhj_hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj_hhhj_hMubah}(h]j_ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj_hMhj_hhubjw)}(hhh]h)}(h2account writeback to update inode cgroup ownershiph]h2account writeback to update inode cgroup ownership}(hjIahhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhjFahhubah}(h]h ]h"]h$]h&]uh1jvhj_hhhj_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjaajjaajjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct writeback_control *wbc`` writeback_control of the writeback in progress ``struct folio *folio`` folio being written out ``size_t bytes`` number of bytes being written out **Description** **bytes** from **folio** are about to written out during the writeback controlled by **wbc**. Keep the book for foreign inode detection. See wbc_detach_inode().h](h)}(h**Parameters**h]j)}(hjkah]h Parameters}(hjmahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiaubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhjeaubj)}(hhh](j)}(hQ``struct writeback_control *wbc`` writeback_control of the writeback in progress h](j)}(h!``struct writeback_control *wbc``h]j)}(hjah]hstruct writeback_control *wbc}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhjaubj)}(hhh]h)}(h.writeback_control of the writeback in progressh]h.writeback_control of the writeback in progress}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubj)}(h0``struct folio *folio`` folio being written out h](j)}(h``struct folio *folio``h]j)}(hjah]hstruct folio *folio}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhjaubj)}(hhh]h)}(hfolio being written outh]hfolio being written out}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubj)}(h3``size_t bytes`` number of bytes being written out h](j)}(h``size_t bytes``h]j)}(hjah]h size_t bytes}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhjaubj)}(hhh]h)}(h!number of bytes being written outh]h!number of bytes being written out}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjeaubh)}(h**Description**h]j)}(hj7bh]h Description}(hj9bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5bubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhjeaubh)}(h**bytes** from **folio** are about to written out during the writeback controlled by **wbc**. Keep the book for foreign inode detection. See wbc_detach_inode().h](j)}(h **bytes**h]hbytes}(hjQbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMbubh from }(hjMbhhhNhNubj)}(h **folio**h]hfolio}(hjcbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMbubh= are about to written out during the writeback controlled by }(hjMbhhhNhNubj)}(h**wbc**h]hwbc}(hjubhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMbubhF. Keep the book for foreign inode detection. See wbc_detach_inode().}(hjMbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMhjeaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j -filemap_dontcache_kick_writeback (C function)"c.filemap_dontcache_kick_writebackhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hEvoid filemap_dontcache_kick_writeback (struct address_space *mapping)h]j)}(hDvoid filemap_dontcache_kick_writeback(struct address_space *mapping)h](jf)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjbhhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM ubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbhhhjbhM ubjC)}(h filemap_dontcache_kick_writebackh]jI)}(h filemap_dontcache_kick_writebackh]h filemap_dontcache_kick_writeback}(hjbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjbhhhjbhM ubj=)}(h(struct address_space *mapping)h]jC)}(hstruct address_space *mappingh](j )}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjbubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbubh)}(hhh]jI)}(h address_spaceh]h address_space}(hj chhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj cmodnameN classnameNjj )}j ]j)}jjbsb"c.filemap_dontcache_kick_writebackasbuh1hhjbubj2)}(h h]h }(hj)chhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbubj)}(hjh]h*}(hj7chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjI)}(hmappingh]hmapping}(hjDchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbubah}(h]h ]h"]h$]h&]j`jauh1j<hjbhhhjbhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjbhhhjbhM ubah}(h]jbah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjbhM hjbhhubjw)}(hhh]h)}(h&kick flusher for IOCB_DONTCACHE writesh]h&kick flusher for IOCB_DONTCACHE writes}(hjnchhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjkchhubah}(h]h ]h"]h$]h&]uh1jvhjbhhhjbhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct address_space *mapping`` address_space that was just written to **Description** Kick the writeback flusher thread to expedite writeback of dontcache dirty pages. Queue writeback for the inode's wb for as many pages as there are dontcache pages, but don't restrict writeback to dontcache pages only. This significantly improves performance over either writing all wb's pages or writing only dontcache pages. Although it doesn't guarantee quick writeback and reclaim of dontcache pages, it keeps the amount of dirty pages in check. Over longer term dontcache pages get written and reclaimed by background writeback even with this rough heuristic.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjcubj)}(hhh]j)}(hI``struct address_space *mapping`` address_space that was just written to h](j)}(h!``struct address_space *mapping``h]j)}(hjch]hstruct address_space *mapping}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjcubj)}(hhh]h)}(h&address_space that was just written toh]h&address_space that was just written to}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM hjcubah}(h]h ]h"]h$]h&]uh1jhjcubh)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjcubh)}(hKick the writeback flusher thread to expedite writeback of dontcache dirty pages. Queue writeback for the inode's wb for as many pages as there are dontcache pages, but don't restrict writeback to dontcache pages only.h]hKick the writeback flusher thread to expedite writeback of dontcache dirty pages. Queue writeback for the inode’s wb for as many pages as there are dontcache pages, but don’t restrict writeback to dontcache pages only.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjcubh)}(hXZThis significantly improves performance over either writing all wb's pages or writing only dontcache pages. Although it doesn't guarantee quick writeback and reclaim of dontcache pages, it keeps the amount of dirty pages in check. Over longer term dontcache pages get written and reclaimed by background writeback even with this rough heuristic.h]hX^This significantly improves performance over either writing all wb’s pages or writing only dontcache pages. Although it doesn’t guarantee quick writeback and reclaim of dontcache pages, it keeps the amount of dirty pages in check. Over longer term dontcache pages get written and reclaimed by background writeback even with this rough heuristic.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j __mark_inode_dirty (C function)c.__mark_inode_dirtyhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h8void __mark_inode_dirty (struct inode *inode, int flags)h]j)}(h7void __mark_inode_dirty(struct inode *inode, int flags)h](jf)}(hvoidh]hvoid}(hj>dhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj:dhhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMl ubj2)}(h h]h }(hjMdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:dhhhjLdhMl ubjC)}(h__mark_inode_dirtyh]jI)}(h__mark_inode_dirtyh]h__mark_inode_dirty}(hj_dhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[dubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj:dhhhjLdhMl ubj=)}(h (struct inode *inode, int flags)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj{dhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwdubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwdubh)}(hhh]jI)}(hinodeh]hinode}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj )}j ]j)}jjadsbc.__mark_inode_dirtyasbuh1hhjwdubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwdubjI)}(hinodeh]hinode}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwdubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjsdubjC)}(h int flagsh](jf)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjdubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdubjI)}(hflagsh]hflags}(hj ehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjsdubeh}(h]h ]h"]h$]h&]j`jauh1j<hj:dhhhjLdhMl ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj6dhhhjLdhMl ubah}(h]j1dah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjLdhMl hj3dhhubjw)}(hhh]h)}(h(internal function to mark an inode dirtyh]h(internal function to mark an inode dirty}(hj3ehhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMl hj0ehhubah}(h]h ]h"]h$]h&]uh1jvhj3dhhhjLdhMl ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKejjKejjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct inode *inode`` inode to mark ``int flags`` what kind of dirty, e.g. I_DIRTY_SYNC. This can be a combination of multiple I_DIRTY_* flags, except that I_DIRTY_TIME can't be combined with I_DIRTY_PAGES. **Description** Mark an inode as dirty. We notify the filesystem, then update the inode's dirty flags. Then, if needed we add the inode to the appropriate dirty list. Most callers should use mark_inode_dirty() or mark_inode_dirty_sync() instead of calling this directly. CAREFUL! We only add the inode to the dirty list if it is hashed or if it refers to a blockdev. Unhashed inodes will never be added to the dirty list even if they are later hashed, as they will have been marked dirty already. In short, ensure you hash any inodes _before_ you start marking them dirty. Note that for blockdevs, inode->dirtied_when represents the dirtying time of the block-special inode (/dev/hda1) itself. And the ->dirtied_when field of the kernel-internal blockdev inode represents the dirtying time of the blockdev's pages. This is why for I_DIRTY_PAGES we always use page->mapping->host, so the page-dirtying time is recorded in the internal blockdev inode.h](h)}(h**Parameters**h]j)}(hjUeh]h Parameters}(hjWehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSeubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMp hjOeubj)}(hhh](j)}(h&``struct inode *inode`` inode to mark h](j)}(h``struct inode *inode``h]j)}(hjteh]hstruct inode *inode}(hjvehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjreubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMn hjneubj)}(hhh]h)}(h inode to markh]h inode to mark}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMn hjeubah}(h]h ]h"]h$]h&]uh1jhjneubeh}(h]h ]h"]h$]h&]uh1jhjehMn hjkeubj)}(h``int flags`` what kind of dirty, e.g. I_DIRTY_SYNC. This can be a combination of multiple I_DIRTY_* flags, except that I_DIRTY_TIME can't be combined with I_DIRTY_PAGES. h](j)}(h ``int flags``h]j)}(hjeh]h int flags}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMq hjeubj)}(hhh]h)}(hwhat kind of dirty, e.g. I_DIRTY_SYNC. This can be a combination of multiple I_DIRTY_* flags, except that I_DIRTY_TIME can't be combined with I_DIRTY_PAGES.h]hwhat kind of dirty, e.g. I_DIRTY_SYNC. This can be a combination of multiple I_DIRTY_* flags, except that I_DIRTY_TIME can’t be combined with I_DIRTY_PAGES.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMo hjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMq hjkeubeh}(h]h ]h"]h$]h&]uh1jhjOeubh)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMs hjOeubh)}(hMark an inode as dirty. We notify the filesystem, then update the inode's dirty flags. Then, if needed we add the inode to the appropriate dirty list.h]hMark an inode as dirty. We notify the filesystem, then update the inode’s dirty flags. Then, if needed we add the inode to the appropriate dirty list.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMr hjOeubh)}(hgMost callers should use mark_inode_dirty() or mark_inode_dirty_sync() instead of calling this directly.h]hgMost callers should use mark_inode_dirty() or mark_inode_dirty_sync() instead of calling this directly.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMu hjOeubh)}(hCAREFUL! We only add the inode to the dirty list if it is hashed or if it refers to a blockdev. Unhashed inodes will never be added to the dirty list even if they are later hashed, as they will have been marked dirty already.h]hCAREFUL! We only add the inode to the dirty list if it is hashed or if it refers to a blockdev. Unhashed inodes will never be added to the dirty list even if they are later hashed, as they will have been marked dirty already.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chMx hjOeubh)}(hKIn short, ensure you hash any inodes _before_ you start marking them dirty.h]hKIn short, ensure you hash any inodes _before_ you start marking them dirty.}(hj,fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM| hjOeubh)}(hXzNote that for blockdevs, inode->dirtied_when represents the dirtying time of the block-special inode (/dev/hda1) itself. And the ->dirtied_when field of the kernel-internal blockdev inode represents the dirtying time of the blockdev's pages. This is why for I_DIRTY_PAGES we always use page->mapping->host, so the page-dirtying time is recorded in the internal blockdev inode.h]hX|Note that for blockdevs, inode->dirtied_when represents the dirtying time of the block-special inode (/dev/hda1) itself. And the ->dirtied_when field of the kernel-internal blockdev inode represents the dirtying time of the blockdev’s pages. This is why for I_DIRTY_PAGES we always use page->mapping->host, so the page-dirtying time is recorded in the internal blockdev inode.}(hj;fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM~ hjOeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #writeback_inodes_sb_nr (C function)c.writeback_inodes_sb_nrhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h]void writeback_inodes_sb_nr (struct super_block *sb, unsigned long nr, enum wb_reason reason)h]j)}(h\void writeback_inodes_sb_nr(struct super_block *sb, unsigned long nr, enum wb_reason reason)h](jf)}(hvoidh]hvoid}(hjjfhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjffhhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM ubj2)}(h h]h }(hjyfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjffhhhjxfhM ubjC)}(hwriteback_inodes_sb_nrh]jI)}(hwriteback_inodes_sb_nrh]hwriteback_inodes_sb_nr}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjffhhhjxfhM ubj=)}(hA(struct super_block *sb, unsigned long nr, enum wb_reason reason)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjfubj2)}(h h]h }(hjfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfubh)}(hhh]jI)}(h super_blockh]h super_block}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj )}j ]j)}jjfsbc.writeback_inodes_sb_nrasbuh1hhjfubj2)}(h h]h }(hjfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjI)}(hsbh]hsb}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjfubjC)}(hunsigned long nrh](jf)}(hunsignedh]hunsigned}(hjghhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjgubj2)}(h h]h }(hj'ghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubjf)}(hlongh]hlong}(hj5ghhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjgubj2)}(h h]h }(hjCghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubjI)}(hnrh]hnr}(hjQghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjfubjC)}(henum wb_reason reasonh](j )}(hj#h]henum}(hjjghhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjfgubj2)}(h h]h }(hjwghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfgubh)}(hhh]jI)}(h wb_reasonh]h wb_reason}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj )}j ]jfc.writeback_inodes_sb_nrasbuh1hhjfgubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfgubjI)}(hreasonh]hreason}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjfubeh}(h]h ]h"]h$]h&]j`jauh1j<hjffhhhjxfhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjbfhhhjxfhM ubah}(h]j]fah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjxfhM hj_fhhubjw)}(hhh]h)}(h-writeback dirty inodes from given super_blockh]h-writeback dirty inodes from given super_block}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjghhubah}(h]h ]h"]h$]h&]uh1jvhj_fhhhjxfhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1jhhhjVhNhNubj)}(hX|**Parameters** ``struct super_block *sb`` the superblock ``unsigned long nr`` the number of pages to write ``enum wb_reason reason`` reason why some writeback work initiated **Description** Start writeback on some inodes on this super_block. No guarantees are made on how many (if any) will be written, and this function does not wait for IO completion of submitted IO.h](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjgubj)}(hhh](j)}(h*``struct super_block *sb`` the superblock h](j)}(h``struct super_block *sb``h]j)}(hjhh]hstruct super_block *sb}(hj!hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjhubj)}(hhh]h)}(hthe superblockh]hthe superblock}(hj8hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hhM hj5hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj4hhM hjhubj)}(h2``unsigned long nr`` the number of pages to write h](j)}(h``unsigned long nr``h]j)}(hjXhh]hunsigned long nr}(hjZhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjRhubj)}(hhh]h)}(hthe number of pages to writeh]hthe number of pages to write}(hjqhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhhM hjnhubah}(h]h ]h"]h$]h&]uh1jhjRhubeh}(h]h ]h"]h$]h&]uh1jhjmhhM hjhubj)}(hC``enum wb_reason reason`` reason why some writeback work initiated h](j)}(h``enum wb_reason reason``h]j)}(hjhh]henum wb_reason reason}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjhubj)}(hhh]h)}(h(reason why some writeback work initiatedh]h(reason why some writeback work initiated}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhM hjhubeh}(h]h ]h"]h$]h&]uh1jhjgubh)}(h**Description**h]j)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjgubh)}(hStart writeback on some inodes on this super_block. No guarantees are made on how many (if any) will be written, and this function does not wait for IO completion of submitted IO.h]hStart writeback on some inodes on this super_block. No guarantees are made on how many (if any) will be written, and this function does not wait for IO completion of submitted IO.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  writeback_inodes_sb (C function)c.writeback_inodes_sbhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hHvoid writeback_inodes_sb (struct super_block *sb, enum wb_reason reason)h]j)}(hGvoid writeback_inodes_sb(struct super_block *sb, enum wb_reason reason)h](jf)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ihhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM ubj2)}(h h]h }(hj ihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ihhhjihM ubjC)}(hwriteback_inodes_sbh]jI)}(hwriteback_inodes_sbh]hwriteback_inodes_sb}(hj2ihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.iubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj ihhhjihM ubj=)}(h/(struct super_block *sb, enum wb_reason reason)h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjNihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJiubj2)}(h h]h }(hj[ihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJiubh)}(hhh]jI)}(h super_blockh]h super_block}(hjlihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnimodnameN classnameNjj )}j ]j)}jj4isbc.writeback_inodes_sbasbuh1hhjJiubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJiubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJiubjI)}(hsbh]hsb}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJiubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFiubjC)}(henum wb_reason reasonh](j )}(hj#h]henum}(hjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjiubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubh)}(hhh]jI)}(h wb_reasonh]h wb_reason}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj )}j ]jic.writeback_inodes_sbasbuh1hhjiubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjiubjI)}(hreasonh]hreason}(hj jhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFiubeh}(h]h ]h"]h$]h&]j`jauh1j<hj ihhhjihM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj ihhhjihM ubah}(h]jiah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjihM hjihhubjw)}(hhh]h)}(h-writeback dirty inodes from given super_blockh]h-writeback dirty inodes from given super_block}(hj4jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hj1jhhubah}(h]h ]h"]h$]h&]uh1jvhjihhhjihM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjjLjjjjuh1jhhhjVhNhNubj)}(hXK**Parameters** ``struct super_block *sb`` the superblock ``enum wb_reason reason`` reason why some writeback work was initiated **Description** Start writeback on some inodes on this super_block. No guarantees are made on how many (if any) will be written, and this function does not wait for IO completion of submitted IO.h](h)}(h**Parameters**h]j)}(hjVjh]h Parameters}(hjXjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjPjubj)}(hhh](j)}(h*``struct super_block *sb`` the superblock h](j)}(h``struct super_block *sb``h]j)}(hjujh]hstruct super_block *sb}(hjwjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjojubj)}(hhh]h)}(hthe superblockh]hthe superblock}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM hjjubah}(h]h ]h"]h$]h&]uh1jhjojubeh}(h]h ]h"]h$]h&]uh1jhjjhM hjljubj)}(hG``enum wb_reason reason`` reason why some writeback work was initiated h](j)}(h``enum wb_reason reason``h]j)}(hjjh]henum wb_reason reason}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjjubj)}(hhh]h)}(h,reason why some writeback work was initiatedh]h,reason why some writeback work was initiated}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM hjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhM hjljubeh}(h]h ]h"]h$]h&]uh1jhjPjubh)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjPjubh)}(hStart writeback on some inodes on this super_block. No guarantees are made on how many (if any) will be written, and this function does not wait for IO completion of submitted IO.h]hStart writeback on some inodes on this super_block. No guarantees are made on how many (if any) will be written, and this function does not wait for IO completion of submitted IO.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjPjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'try_to_writeback_inodes_sb (C function)c.try_to_writeback_inodes_sbhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hOvoid try_to_writeback_inodes_sb (struct super_block *sb, enum wb_reason reason)h]j)}(hNvoid try_to_writeback_inodes_sb(struct super_block *sb, enum wb_reason reason)h](jf)}(hvoidh]hvoid}(hj.khhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj*khhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM ubj2)}(h h]h }(hj=khhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*khhhjah"]h$]h&]uh1j1hjgkubh)}(hhh]jI)}(h super_blockh]h super_block}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj )}j ]j)}jjQksbc.try_to_writeback_inodes_sbasbuh1hhjgkubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgkubjI)}(hsbh]hsb}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgkubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjckubjC)}(henum wb_reason reasonh](j )}(hj#h]henum}(hjkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjkubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjkubh)}(hhh]jI)}(h wb_reasonh]h wb_reason}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj )}j ]jkc.try_to_writeback_inodes_sbasbuh1hhjkubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjkubjI)}(hreasonh]hreason}(hj'lhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjkubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjckubeh}(h]h ]h"]h$]h&]j`jauh1j<hj*khhhjah"]h$]h&]uh1j1hjGmhhhjYmhM ubjC)}(hsync_inodes_sbh]jI)}(hsync_inodes_sbh]hsync_inodes_sb}(hjlmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhmubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjGmhhhjYmhM ubj=)}(h(struct super_block *sb)h]jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjmubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubh)}(hhh]jI)}(h super_blockh]h super_block}(hjmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj )}j ]j)}jjnmsbc.sync_inodes_sbasbuh1hhjmubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjI)}(hsbh]hsb}(hjmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjmubah}(h]h ]h"]h$]h&]j`jauh1j<hjGmhhhjYmhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjCmhhhjYmhM ubah}(h]j>mah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjYmhM hj@mhhubjw)}(hhh]h)}(hsync sb inode pagesh]hsync sb inode pages}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjnhhubah}(h]h ]h"]h$]h&]uh1jvhj@mhhhjYmhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#njj#njjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct super_block *sb`` the superblock **Description** This function writes and waits on any dirty inode belonging to this super_block.h](h)}(h**Parameters**h]j)}(hj-nh]h Parameters}(hj/nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+nubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hj'nubj)}(hhh]j)}(h*``struct super_block *sb`` the superblock h](j)}(h``struct super_block *sb``h]j)}(hjLnh]hstruct super_block *sb}(hjNnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJnubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjFnubj)}(hhh]h)}(hthe superblockh]hthe superblock}(hjenhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjanhM hjbnubah}(h]h ]h"]h$]h&]uh1jhjFnubeh}(h]h ]h"]h$]h&]uh1jhjanhM hjCnubah}(h]h ]h"]h$]h&]uh1jhj'nubh)}(h**Description**h]j)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hj'nubh)}(hPThis function writes and waits on any dirty inode belonging to this super_block.h]hPThis function writes and waits on any dirty inode belonging to this super_block.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hj'nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j write_inode_now (C function)c.write_inode_nowhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h3int write_inode_now (struct inode *inode, int sync)h]j)}(h2int write_inode_now(struct inode *inode, int sync)h](jf)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjnhhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM ubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnhhhjnhM ubjC)}(hwrite_inode_nowh]jI)}(hwrite_inode_nowh]hwrite_inode_now}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjnhhhjnhM ubj=)}(h(struct inode *inode, int sync)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj ohhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjoubj2)}(h h]h }(hjohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjoubh)}(hhh]jI)}(hinodeh]hinode}(hj'ohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$oubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)omodnameN classnameNjj )}j ]j)}jjnsbc.write_inode_nowasbuh1hhjoubj2)}(h h]h }(hjGohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjoubj)}(hjh]h*}(hjUohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjI)}(hinodeh]hinode}(hjbohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjoubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjoubjC)}(hint synch](jf)}(hinth]hint}(hj{ohhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjwoubj2)}(h h]h }(hjohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwoubjI)}(hsynch]hsync}(hjohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwoubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjoubeh}(h]h ]h"]h$]h&]j`jauh1j<hjnhhhjnhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjnhhhjnhM ubah}(h]jnah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjnhM hjnhhubjw)}(hhh]h)}(hwrite an inode to diskh]hwrite an inode to disk}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjohhubah}(h]h ]h"]h$]h&]uh1jvhjnhhhjnhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jhhhjVhNhNubj)}(hXE**Parameters** ``struct inode *inode`` inode to write to disk ``int sync`` whether the write should be synchronous or not **Description** This function commits an inode to disk immediately if it is dirty. This is primarily needed by knfsd. The caller must either have a ref on the inode or must have set I_WILL_FREE.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjoubj)}(hhh](j)}(h/``struct inode *inode`` inode to write to disk h](j)}(h``struct inode *inode``h]j)}(hjph]hstruct inode *inode}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjoubj)}(hhh]h)}(hinode to write to diskh]hinode to write to disk}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM hjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjphM hjoubj)}(h<``int sync`` whether the write should be synchronous or not h](j)}(h ``int sync``h]j)}(hj;ph]hint sync}(hj=phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9pubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hj5pubj)}(hhh]h)}(h.whether the write should be synchronous or noth]h.whether the write should be synchronous or not}(hjTphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPphM hjQpubah}(h]h ]h"]h$]h&]uh1jhj5pubeh}(h]h ]h"]h$]h&]uh1jhjPphM hjoubeh}(h]h ]h"]h$]h&]uh1jhjoubh)}(h**Description**h]j)}(hjvph]h Description}(hjxphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtpubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjoubh)}(heThis function commits an inode to disk immediately if it is dirty. This is primarily needed by knfsd.h]heThis function commits an inode to disk immediately if it is dirty. This is primarily needed by knfsd.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjoubh)}(hLThe caller must either have a ref on the inode or must have set I_WILL_FREE.h]hLThe caller must either have a ref on the inode or must have set I_WILL_FREE.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  sync_inode_metadata (C function)c.sync_inode_metadatahNtauh1hhjVhhhNhNubj)}(hhh](j)}(h7int sync_inode_metadata (struct inode *inode, int wait)h]j)}(h6int sync_inode_metadata(struct inode *inode, int wait)h](jf)}(hinth]hint}(hjphhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjphhhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM ubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjphhhjphM ubjC)}(hsync_inode_metadatah]jI)}(hsync_inode_metadatah]hsync_inode_metadata}(hjphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjphhhjphM ubj=)}(h(struct inode *inode, int wait)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjqubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqubh)}(hhh]jI)}(hinodeh]hinode}(hj%qhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"qubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'qmodnameN classnameNjj )}j ]j)}jjpsbc.sync_inode_metadataasbuh1hhjqubj2)}(h h]h }(hjEqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqubj)}(hjh]h*}(hjSqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjI)}(hinodeh]hinode}(hj`qhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjqubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjpubjC)}(hint waith](jf)}(hinth]hint}(hjyqhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjuqubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjuqubjI)}(hwaith]hwait}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjuqubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjpubeh}(h]h ]h"]h$]h&]j`jauh1j<hjphhhjphM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjphhhjphM ubah}(h]jpah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjphM hjphhubjw)}(hhh]h)}(hwrite an inode to diskh]hwrite an inode to disk}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjqhhubah}(h]h ]h"]h$]h&]uh1jvhjphhhjphM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjVhNhNubj)}(hX **Parameters** ``struct inode *inode`` the inode to sync ``int wait`` wait for I/O to complete. **Description** Write an inode to disk and adjust its dirty state after completion. **Note** only writes the actual inode, no associated data or other metadata.h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjqubj)}(hhh](j)}(h*``struct inode *inode`` the inode to sync h](j)}(h``struct inode *inode``h]j)}(hjrh]hstruct inode *inode}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjqubj)}(hhh]h)}(hthe inode to synch]hthe inode to sync}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM hjrubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjqubj)}(h'``int wait`` wait for I/O to complete. h](j)}(h ``int wait``h]j)}(hj9rh]hint wait}(hj;rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7rubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hj3rubj)}(hhh]h)}(hwait for I/O to complete.h]hwait for I/O to complete.}(hjRrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNrhM hjOrubah}(h]h ]h"]h$]h&]uh1jhj3rubeh}(h]h ]h"]h$]h&]uh1jhjNrhM hjqubeh}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hjtrh]h Description}(hjvrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrrubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjqubh)}(hCWrite an inode to disk and adjust its dirty state after completion.h]hCWrite an inode to disk and adjust its dirty state after completion.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjqubh)}(h**Note**h]j)}(hjrh]hNote}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjqubh)}(hConly writes the actual inode, no associated data or other metadata.h]hConly writes the actual inode, no associated data or other metadata.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/fs-writeback.chM hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j anon_inode_getfile (C function)c.anon_inode_getfilehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hnstruct file * anon_inode_getfile (const char *name, const struct file_operations *fops, void *priv, int flags)h]j)}(hlstruct file *anon_inode_getfile(const char *name, const struct file_operations *fops, void *priv, int flags)h](j )}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjrhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrhhhjrhKubh)}(hhh]jI)}(hfileh]hfile}(hjrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj )}j ]j)}janon_inode_getfilesbc.anon_inode_getfileasbuh1hhjrhhhjrhKubj2)}(h h]h }(hj shhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrhhhjrhKubj)}(hjh]h*}(hj.shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjrhKubjC)}(hanon_inode_getfileh]jI)}(hjsh]hanon_inode_getfile}(hj?shhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;subah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjrhhhjrhKubj=)}(hM(const char *name, const struct file_operations *fops, void *priv, int flags)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjZshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjVsubj2)}(h h]h }(hjgshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVsubjf)}(hcharh]hchar}(hjushhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjVsubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVsubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVsubjI)}(hnameh]hname}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVsubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRsubjC)}(h"const struct file_operations *fopsh](j )}(hjh]hconst}(hjshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjsubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubj )}(hjh]hstruct}(hjshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjsubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubh)}(hhh]jI)}(hfile_operationsh]hfile_operations}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj )}j ]jsc.anon_inode_getfileasbuh1hhjsubj2)}(h h]h }(hjthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjI)}(hfopsh]hfops}(hj)thhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRsubjC)}(h void *privh](jf)}(hvoidh]hvoid}(hjBthhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj>tubj2)}(h h]h }(hjPthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>tubj)}(hjh]h*}(hj^thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>tubjI)}(hprivh]hpriv}(hjkthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>tubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRsubjC)}(h int flagsh](jf)}(hinth]hint}(hjthhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjtubj2)}(h h]h }(hjthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjtubjI)}(hflagsh]hflags}(hjthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjtubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRsubeh}(h]h ]h"]h$]h&]j`jauh1j<hjrhhhjrhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjrhhhjrhKubah}(h]jrah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjrhKhjrhhubjw)}(hhh]h)}(hvcreates a new file instance by hooking it up to an anonymous inode, and a dentry that describe the "class" of the fileh]hzcreates a new file instance by hooking it up to an anonymous inode, and a dentry that describe the “class” of the file}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjthhubah}(h]h ]h"]h$]h&]uh1jvhjrhhhjrhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``const char *name`` [in] name of the "class" of the new file ``const struct file_operations *fops`` [in] file operations for the new file ``void *priv`` [in] private data for the new file (will be file's private_data) ``int flags`` [in] flags **Description** Creates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfile() will share a single inode, hence saving memory and avoiding code duplication for the file/inode/dentry setup. Returns the newly created file* or an error pointer.h](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjtubj)}(hhh](j)}(hA``const char *name`` [in] name of the "class" of the new file h](j)}(h``const char *name``h]j)}(hj uh]hconst char *name}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj uubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjuubj)}(hhh]h)}(h+[in] name of the "class" of the new fileh]h/[in] name of the “class” of the new file}(hj$uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj uhKhj!uubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhj uhKhjuubj)}(hP``const struct file_operations *fops`` [in] file operations for the new file h](j)}(h&``const struct file_operations *fops``h]j)}(hjDuh]h"const struct file_operations *fops}(hjFuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBuubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj>uubj)}(hhh]h)}(h([in] file operations for the new fileh]h([in] file operations for the new file}(hj]uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYuhKhjZuubah}(h]h ]h"]h$]h&]uh1jhj>uubeh}(h]h ]h"]h$]h&]uh1jhjYuhKhjuubj)}(hS``void *priv`` [in] private data for the new file (will be file's private_data) h](j)}(h``void *priv``h]j)}(hj}uh]h void *priv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{uubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjwuubj)}(hhh]h)}(hC[in] private data for the new file (will be file's private_data)h]hE[in] private data for the new file (will be file’s private_data)}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhKhjuubah}(h]h ]h"]h$]h&]uh1jhjwuubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjuubj)}(h``int flags`` [in] flags h](j)}(h ``int flags``h]j)}(hjuh]h int flags}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjuubj)}(hhh]h)}(h [in] flagsh]h [in] flags}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhKhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjuubeh}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjtubh)}(hXmCreates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfile() will share a single inode, hence saving memory and avoiding code duplication for the file/inode/dentry setup. Returns the newly created file* or an error pointer.h]hXmCreates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfile() will share a single inode, hence saving memory and avoiding code duplication for the file/inode/dentry setup. Returns the newly created file* or an error pointer.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %anon_inode_getfile_fmode (C function)c.anon_inode_getfile_fmodehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hstruct file * anon_inode_getfile_fmode (const char *name, const struct file_operations *fops, void *priv, int flags, fmode_t f_mode)h]j)}(hstruct file *anon_inode_getfile_fmode(const char *name, const struct file_operations *fops, void *priv, int flags, fmode_t f_mode)h](j )}(hjh]hstruct}(hj6vhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj2vhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKubj2)}(h h]h }(hjDvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj2vhhhjCvhKubh)}(hhh]jI)}(hfileh]hfile}(hjUvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWvmodnameN classnameNjj )}j ]j)}janon_inode_getfile_fmodesbc.anon_inode_getfile_fmodeasbuh1hhj2vhhhjCvhKubj2)}(h h]h }(hjvvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj2vhhhjCvhKubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2vhhhjCvhKubjC)}(hanon_inode_getfile_fmodeh]jI)}(hjsvh]hanon_inode_getfile_fmode}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj2vhhhjCvhKubj=)}(h](const char *name, const struct file_operations *fops, void *priv, int flags, fmode_t f_mode)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjvhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjvubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvubjf)}(hcharh]hchar}(hjvhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjvubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjI)}(hnameh]hname}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(h"const struct file_operations *fopsh](j )}(hjh]hconst}(hj whhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj wubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj wubj )}(hjh]hstruct}(hj(whhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj wubj2)}(h h]h }(hj5whhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj wubh)}(hhh]jI)}(hfile_operationsh]hfile_operations}(hjFwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHwmodnameN classnameNjj )}j ]jqvc.anon_inode_getfile_fmodeasbuh1hhj wubj2)}(h h]h }(hjdwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj wubj)}(hjh]h*}(hjrwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj wubjI)}(hfopsh]hfops}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj wubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(h void *privh](jf)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjwubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjI)}(hprivh]hpriv}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(h int flagsh](jf)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjwubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjwubjI)}(hflagsh]hflags}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(hfmode_t f_modeh](h)}(hhh]jI)}(hfmode_th]hfmode_t}(hjxhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj )}j ]jqvc.anon_inode_getfile_fmodeasbuh1hhj xubj2)}(h h]h }(hj0xhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj xubjI)}(hf_modeh]hf_mode}(hj>xhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj xubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubeh}(h]h ]h"]h$]h&]j`jauh1j<hj2vhhhjCvhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj.vhhhjCvhKubah}(h]j)vah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjCvhKhj+vhhubjw)}(hhh]h)}(hvcreates a new file instance by hooking it up to an anonymous inode, and a dentry that describe the "class" of the fileh]hzcreates a new file instance by hooking it up to an anonymous inode, and a dentry that describe the “class” of the file}(hjhxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjexhhubah}(h]h ]h"]h$]h&]uh1jvhj+vhhhjCvhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``const char *name`` [in] name of the "class" of the new file ``const struct file_operations *fops`` [in] file operations for the new file ``void *priv`` [in] private data for the new file (will be file's private_data) ``int flags`` [in] flags ``fmode_t f_mode`` [in] fmode **Description** Creates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfile() will share a single inode, hence saving memory and avoiding code duplication for the file/inode/dentry setup. Allows setting the fmode. Returns the newly created file* or an error pointer.h](h)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjxubj)}(hhh](j)}(hA``const char *name`` [in] name of the "class" of the new file h](j)}(h``const char *name``h]j)}(hjxh]hconst char *name}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjxubj)}(hhh]h)}(h+[in] name of the "class" of the new fileh]h/[in] name of the “class” of the new file}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjxubj)}(hP``const struct file_operations *fops`` [in] file operations for the new file h](j)}(h&``const struct file_operations *fops``h]j)}(hjxh]h"const struct file_operations *fops}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjxubj)}(hhh]h)}(h([in] file operations for the new fileh]h([in] file operations for the new file}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjxubj)}(hS``void *priv`` [in] private data for the new file (will be file's private_data) h](j)}(h``void *priv``h]j)}(hjyh]h void *priv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjyubj)}(hhh]h)}(hC[in] private data for the new file (will be file's private_data)h]hE[in] private data for the new file (will be file’s private_data)}(hj4yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0yhKhj1yubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhj0yhKhjxubj)}(h``int flags`` [in] flags h](j)}(h ``int flags``h]j)}(hjTyh]h int flags}(hjVyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRyubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjNyubj)}(hhh]h)}(h [in] flagsh]h [in] flags}(hjmyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiyhKhjjyubah}(h]h ]h"]h$]h&]uh1jhjNyubeh}(h]h ]h"]h$]h&]uh1jhjiyhKhjxubj)}(h!``fmode_t f_mode`` [in] fmode h](j)}(h``fmode_t f_mode``h]j)}(hjyh]hfmode_t f_mode}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjyubj)}(hhh]h)}(h [in] fmodeh]h [in] fmode}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhKhjxubeh}(h]h ]h"]h$]h&]uh1jhjxubh)}(h**Description**h]j)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjxubh)}(hXCreates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfile() will share a single inode, hence saving memory and avoiding code duplication for the file/inode/dentry setup. Allows setting the fmode. Returns the newly created file* or an error pointer.h]hXCreates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfile() will share a single inode, hence saving memory and avoiding code duplication for the file/inode/dentry setup. Allows setting the fmode. Returns the newly created file* or an error pointer.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j &anon_inode_create_getfile (C function)c.anon_inode_create_getfilehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hstruct file * anon_inode_create_getfile (const char *name, const struct file_operations *fops, void *priv, int flags, const struct inode *context_inode)h]j)}(hstruct file *anon_inode_create_getfile(const char *name, const struct file_operations *fops, void *priv, int flags, const struct inode *context_inode)h](j )}(hjh]hstruct}(hj zhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj zhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj zhhhjzhKubh)}(hhh]jI)}(hfileh]hfile}(hj,zhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)zubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.zmodnameN classnameNjj )}j ]j)}janon_inode_create_getfilesbc.anon_inode_create_getfileasbuh1hhj zhhhjzhKubj2)}(h h]h }(hjMzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj zhhhjzhKubj)}(hjh]h*}(hj[zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj zhhhjzhKubjC)}(hanon_inode_create_getfileh]jI)}(hjJzh]hanon_inode_create_getfile}(hjlzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhzubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj zhhhjzhKubj=)}(hp(const char *name, const struct file_operations *fops, void *priv, int flags, const struct inode *context_inode)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubjf)}(hcharh]hchar}(hjzhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjzubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjI)}(hnameh]hname}(hjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjzubjC)}(h"const struct file_operations *fopsh](j )}(hjh]hconst}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj )}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hj {hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubh)}(hhh]jI)}(hfile_operationsh]hfile_operations}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj )}j ]jHzc.anon_inode_create_getfileasbuh1hhjzubj2)}(h h]h }(hj;{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj)}(hjh]h*}(hjI{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjI)}(hfopsh]hfops}(hjV{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjzubjC)}(h void *privh](jf)}(hvoidh]hvoid}(hjo{hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjk{ubj2)}(h h]h }(hj}{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjk{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk{ubjI)}(hprivh]hpriv}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjk{ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjzubjC)}(h int flagsh](jf)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj{ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj{ubjI)}(hflagsh]hflags}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjzubjC)}(h!const struct inode *context_inodeh](j )}(hjh]hconst}(hj{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj{ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj{ubj )}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj{ubj2)}(h h]h }(hj|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj{ubh)}(hhh]jI)}(hinodeh]hinode}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!|modnameN classnameNjj )}j ]jHzc.anon_inode_create_getfileasbuh1hhj{ubj2)}(h h]h }(hj=|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj{ubj)}(hjh]h*}(hjK|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubjI)}(h context_inodeh]h context_inode}(hjX|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjzubeh}(h]h ]h"]h$]h&]j`jauh1j<hj zhhhjzhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjzhhhjzhKubah}(h]jzah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjzhKhjzhhubjw)}(hhh]h)}(hLike anon_inode_getfile(), but creates a new !S_PRIVATE anon inode rather than reuse the singleton anon inode and calls the inode_init_security_anon() LSM hook.h]hLike anon_inode_getfile(), but creates a new !S_PRIVATE anon inode rather than reuse the singleton anon inode and calls the inode_init_security_anon() LSM hook.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj|hhubah}(h]h ]h"]h$]h&]uh1jvhjzhhhjzhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjVhNhNubj)}(hXT**Parameters** ``const char *name`` [in] name of the "class" of the new file ``const struct file_operations *fops`` [in] file operations for the new file ``void *priv`` [in] private data for the new file (will be file's private_data) ``int flags`` [in] flags ``const struct inode *context_inode`` [in] the logical relationship with the new inode (optional) **Description** Create a new anonymous inode and file pair. This can be done for two reasons: - for the inode to have its own security context, so that LSMs can enforce policy on the inode's creation; - if the caller needs a unique inode, for example in order to customize the size returned by fstat() The LSM may use **context_inode** in inode_init_security_anon(), but a reference to it is not held. Returns the newly created file* or an error pointer.h](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj|ubj)}(hhh](j)}(hA``const char *name`` [in] name of the "class" of the new file h](j)}(h``const char *name``h]j)}(hj|h]hconst char *name}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj|ubj)}(hhh]h)}(h+[in] name of the "class" of the new fileh]h/[in] name of the “class” of the new file}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hKhj|ubj)}(hP``const struct file_operations *fops`` [in] file operations for the new file h](j)}(h&``const struct file_operations *fops``h]j)}(hj|h]h"const struct file_operations *fops}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj|ubj)}(hhh]h)}(h([in] file operations for the new fileh]h([in] file operations for the new file}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKhj}ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj|ubj)}(hS``void *priv`` [in] private data for the new file (will be file's private_data) h](j)}(h``void *priv``h]j)}(hj5}h]h void *priv}(hj7}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3}ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj/}ubj)}(hhh]h)}(hC[in] private data for the new file (will be file's private_data)h]hE[in] private data for the new file (will be file’s private_data)}(hjN}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ}hKhjK}ubah}(h]h ]h"]h$]h&]uh1jhj/}ubeh}(h]h ]h"]h$]h&]uh1jhjJ}hKhj|ubj)}(h``int flags`` [in] flags h](j)}(h ``int flags``h]j)}(hjn}h]h int flags}(hjp}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl}ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhjh}ubj)}(hhh]h)}(h [in] flagsh]h [in] flags}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKhj}ubah}(h]h ]h"]h$]h&]uh1jhjh}ubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj|ubj)}(he``const struct inode *context_inode`` [in] the logical relationship with the new inode (optional) h](j)}(h%``const struct inode *context_inode``h]j)}(hj}h]h!const struct inode *context_inode}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj}ubj)}(hhh]h)}(h>[in] the logical relationship with the new inode (optional)h]h>[in] the logical relationship with the new inode (optional)}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj|ubh)}(hNCreate a new anonymous inode and file pair. This can be done for two reasons:h]hNCreate a new anonymous inode and file pair. This can be done for two reasons:}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj|ubjD)}(hhh](jD)}(hifor the inode to have its own security context, so that LSMs can enforce policy on the inode's creation; h]h)}(hhfor the inode to have its own security context, so that LSMs can enforce policy on the inode's creation;h]hjfor the inode to have its own security context, so that LSMs can enforce policy on the inode’s creation;}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chKhj ~ubah}(h]h ]h"]h$]h&]uh1jDhj~ubjD)}(hcif the caller needs a unique inode, for example in order to customize the size returned by fstat() h]h)}(hbif the caller needs a unique inode, for example in order to customize the size returned by fstat()h]hbif the caller needs a unique inode, for example in order to customize the size returned by fstat()}(hj'~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chMhj#~ubah}(h]h ]h"]h$]h&]uh1jDhj~ubeh}(h]h ]h"]h$]h&]jDj!uh1jDhj~hKhj|ubh)}(hcThe LSM may use **context_inode** in inode_init_security_anon(), but a reference to it is not held.h](hThe LSM may use }(hjB~hhhNhNubj)}(h**context_inode**h]h context_inode}(hjJ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB~ubhB in inode_init_security_anon(), but a reference to it is not held.}(hjB~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chMhj|ubh)}(h4Returns the newly created file* or an error pointer.h]h4Returns the newly created file* or an error pointer.}(hjc~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j anon_inode_getfd (C function)c.anon_inode_getfdhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hbint anon_inode_getfd (const char *name, const struct file_operations *fops, void *priv, int flags)h]j)}(haint anon_inode_getfd(const char *name, const struct file_operations *fops, void *priv, int flags)h](jf)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj~hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chMubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj~hhhj~hMubjC)}(hanon_inode_getfdh]jI)}(hanon_inode_getfdh]hanon_inode_getfd}(hj~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj~ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj~hhhj~hMubj=)}(hM(const char *name, const struct file_operations *fops, void *priv, int flags)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hj~hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj~ubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj~ubjf)}(hcharh]hchar}(hj~hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj~ubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj~ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj~ubjC)}(h"const struct file_operations *fopsh](j )}(hjh]hconst}(hj,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubj )}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(ubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubh)}(hhh]jI)}(hfile_operationsh]hfile_operations}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj )}j ]j)}jj~sbc.anon_inode_getfdasbuh1hhj(ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjI)}(hfopsh]hfops}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj~ubjC)}(h void *privh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hprivh]hpriv}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj~ubjC)}(h int flagsh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj~ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj~hhhj~hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj~hhhj~hMubah}(h]j~ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj~hMhj~hhubjw)}(hhh]h)}(hucreates a new file instance by hooking it up to an anonymous inode and a dentry that describe the "class" of the fileh]hycreates a new file instance by hooking it up to an anonymous inode and a dentry that describe the “class” of the file}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jvhj~hhhj~hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``const char *name`` [in] name of the "class" of the new file ``const struct file_operations *fops`` [in] file operations for the new file ``void *priv`` [in] private data for the new file (will be file's private_data) ``int flags`` [in] flags **Description** Creates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfd() will use the same singleton inode, reducing memory use and avoiding code duplication for the file/inode/dentry setup. Returns a newly created file descriptor or an error code.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chM"hj]ubj)}(hhh](j)}(hA``const char *name`` [in] name of the "class" of the new file h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chM"hj|ubj)}(hhh]h)}(h+[in] name of the "class" of the new fileh]h/[in] name of the “class” of the new file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjyubj)}(hP``const struct file_operations *fops`` [in] file operations for the new file h](j)}(h&``const struct file_operations *fops``h]j)}(hjh]h"const struct file_operations *fops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chM#hjubj)}(hhh]h)}(h([in] file operations for the new fileh]h([in] file operations for the new file}(hjԀhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjЀhM#hjрubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjЀhM#hjyubj)}(hS``void *priv`` [in] private data for the new file (will be file's private_data) h](j)}(h``void *priv``h]j)}(hjh]h void *priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chM$hjubj)}(hhh]h)}(hC[in] private data for the new file (will be file's private_data)h]hE[in] private data for the new file (will be file’s private_data)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM$hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM$hjyubj)}(h``int flags`` [in] flags h](j)}(h ``int flags``h]j)}(hj-h]h int flags}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chM%hj'ubj)}(hhh]h)}(h [in] flagsh]h [in] flags}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM%hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM%hjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chM'hj]ubh)}(hXyCreates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfd() will use the same singleton inode, reducing memory use and avoiding code duplication for the file/inode/dentry setup. Returns a newly created file descriptor or an error code.h]hXyCreates a new file by hooking it on a single inode. This is useful for files that do not need to have a full-fledged inode in order to operate correctly. All the files created with anon_inode_getfd() will use the same singleton inode, reducing memory use and avoiding code duplication for the file/inode/dentry setup. Returns a newly created file descriptor or an error code.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/anon_inodes.chM&hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %setattr_should_drop_sgid (C function)c.setattr_should_drop_sgidhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hQint setattr_should_drop_sgid (struct mnt_idmap *idmap, const struct inode *inode)h]j)}(hPint setattr_should_drop_sgid(struct mnt_idmap *idmap, const struct inode *inode)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhKubjC)}(hsetattr_should_drop_sgidh]jI)}(hsetattr_should_drop_sgidh]hsetattr_should_drop_sgid}(hj΁hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjʁubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhKubj=)}(h4(struct mnt_idmap *idmap, const struct inode *inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j)}jjЁsbc.setattr_should_drop_sgidasbuh1hhjubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hj\hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjXubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXubj )}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjXubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j$c.setattr_should_drop_sgidasbuh1hhjXubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjI)}(hinodeh]hinode}(hj΂hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjhhubjw)}(hhh]h)}(h4determine whether the setgid bit needs to be removedh]h4determine whether the setgid bit needs to be removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from ``const struct inode *inode`` inode to check **Description** This function determines whether the setgid bit needs to be removed. We retain backwards compatibility and require setgid bit to be removed unconditionally if S_IXGRP is set. Otherwise we have the exact same requirements as setattr_prepare() and setattr_copy(). **Return** ATTR_KILL_SGID if setgid bit needs to be removed, 0 otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj9h]hstruct mnt_idmap *idmap}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhj3ubj)}(hhh]h)}(h+idmap of the mount **inode** was found fromh](hidmap of the mount }(hjRhhhNhNubj)}(h **inode**h]hinode}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh was found from}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhKhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhKhj0ubj)}(h-``const struct inode *inode`` inode to check h](j)}(h``const struct inode *inode``h]j)}(hjh]hconst struct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhj~ubj)}(hhh]h)}(hinode to checkh]hinode to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj0ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubh)}(hXThis function determines whether the setgid bit needs to be removed. We retain backwards compatibility and require setgid bit to be removed unconditionally if S_IXGRP is set. Otherwise we have the exact same requirements as setattr_prepare() and setattr_copy().h]hXThis function determines whether the setgid bit needs to be removed. We retain backwards compatibility and require setgid bit to be removed unconditionally if S_IXGRP is set. Otherwise we have the exact same requirements as setattr_prepare() and setattr_copy().}(hjՃhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubh)}(h>ATTR_KILL_SGID if setgid bit needs to be removed, 0 otherwise.h]h>ATTR_KILL_SGID if setgid bit needs to be removed, 0 otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j (setattr_should_drop_suidgid (C function)c.setattr_should_drop_suidgidhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hNint setattr_should_drop_suidgid (struct mnt_idmap *idmap, struct inode *inode)h]j)}(hMint setattr_should_drop_suidgid(struct mnt_idmap *idmap, struct inode *inode)h](jf)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj'hhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chK1ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'hhhj9hK1ubjC)}(hsetattr_should_drop_suidgidh]jI)}(hsetattr_should_drop_suidgidh]hsetattr_should_drop_suidgid}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj'hhhj9hK1ubj=)}(h.(struct mnt_idmap *idmap, struct inode *inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjdubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjNsbc.setattr_should_drop_suidgidasbuh1hhjdubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjڄhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjքubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjքubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.setattr_should_drop_suidgidasbuh1hhjքubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjքubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjքubjI)}(hinodeh]hinode}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjքubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj'hhhj9hK1ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj#hhhj9hK1ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj9hK1hj hhubjw)}(hhh]h)}(h8determine whether the set{g,u}id bit needs to be droppedh]h8determine whether the set{g,u}id bit needs to be dropped}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chK1hjXhhubah}(h]h ]h"]h$]h&]uh1jvhj hhhj9hK1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1jhhhjVhNhNubj)}(hX(**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from ``struct inode *inode`` inode to check **Description** This function determines whether the set{g,u}id bits need to be removed. If the setuid bit needs to be removed ATTR_KILL_SUID is returned. If the setgid bit needs to be removed ATTR_KILL_SGID is returned. If both set{g,u}id bits need to be removed the corresponding mask of both flags is returned. **Return** A mask of ATTR_KILL_S{G,U}ID indicating which - if any - setid bits to remove, 0 otherwise.h](h)}(h**Parameters**h]j)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chK5hjwubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chK3hjubj)}(hhh]h)}(h+idmap of the mount **inode** was found fromh](hidmap of the mount }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was found from}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK3hjubj)}(h'``struct inode *inode`` inode to check h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chK4hjubj)}(hhh]h)}(hinode to checkh]hinode to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chK6hjwubh)}(hX)This function determines whether the set{g,u}id bits need to be removed. If the setuid bit needs to be removed ATTR_KILL_SUID is returned. If the setgid bit needs to be removed ATTR_KILL_SGID is returned. If both set{g,u}id bits need to be removed the corresponding mask of both flags is returned.h]hX)This function determines whether the set{g,u}id bits need to be removed. If the setuid bit needs to be removed ATTR_KILL_SUID is returned. If the setgid bit needs to be removed ATTR_KILL_SGID is returned. If both set{g,u}id bits need to be removed the corresponding mask of both flags is returned.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chK5hjwubh)}(h **Return**h]j)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chK;hjwubh)}(h[A mask of ATTR_KILL_S{G,U}ID indicating which - if any - setid bits to remove, 0 otherwise.h]h[A mask of ATTR_KILL_S{G,U}ID indicating which - if any - setid bits to remove, 0 otherwise.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKah"]h$]h&]uh1j1hjhhhjhKubjC)}(hsetattr_prepareh]jI)}(hsetattr_prepareh]hsetattr_prepare}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhKubj=)}(hD(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *attr)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjˆhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjdžubj2)}(h h]h }(hj؆hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdžubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.setattr_prepareasbuh1hhjdžubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdžubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdžubjI)}(hidmaph]hidmap}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdžubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjÆubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj9ubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9ubh)}(hhh]jI)}(hdentryh]hdentry}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj )}j ]jc.setattr_prepareasbuh1hhj9ubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjÆubjC)}(hstruct iattr *attrh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hiattrh]hiattr}(hjˇhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjȇubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj͇modnameN classnameNjj )}j ]jc.setattr_prepareasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjÆubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjhhubjw)}(hhh]h)}(h2check if attribute changes to a dentry are allowedh]h2check if attribute changes to a dentry are allowed}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhj+hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct dentry *dentry`` dentry to check ``struct iattr *attr`` attributes to change **Description** Check if we are allowed to change the attributes contained in **attr** in the given dentry. This includes the normal unix access permission checks, as well as checks for rlimits and others. The function also clears SGID bit from mode if user is not allowed to set it. Also file capabilities and IMA extended attributes are cleared if ATTR_KILL_PRIV is set. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**. Should be called as the first thing in ->setattr implementations, possibly after taking additional locks.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjJubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjoh]hstruct mnt_idmap *idmap}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjiubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubj)}(h*``struct dentry *dentry`` dentry to check h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubj)}(hhh]h)}(hdentry to checkh]hdentry to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubj)}(h,``struct iattr *attr`` attributes to change h](j)}(h``struct iattr *attr``h]j)}(hjh]hstruct iattr *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߈ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjۈubj)}(hhh]h)}(hattributes to changeh]hattributes to change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjۈubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubeh}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjJubh)}(hXeCheck if we are allowed to change the attributes contained in **attr** in the given dentry. This includes the normal unix access permission checks, as well as checks for rlimits and others. The function also clears SGID bit from mode if user is not allowed to set it. Also file capabilities and IMA extended attributes are cleared if ATTR_KILL_PRIV is set.h](h>Check if we are allowed to change the attributes contained in }(hj2hhhNhNubj)}(h**attr**h]hattr}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubhX in the given dentry. This includes the normal unix access permission checks, as well as checks for rlimits and others. The function also clears SGID bit from mode if user is not allowed to set it. Also file capabilities and IMA extended attributes are cleared if ATTR_KILL_PRIV is set.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjJubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjShhhNhNubj)}(h **idmap**h]hidmap}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhB. This function will then take care to map the inode according to }(hjShhhNhNubj)}(h **idmap**h]hidmap}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjShhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjJubh)}(hiShould be called as the first thing in ->setattr implementations, possibly after taking additional locks.h]hiShould be called as the first thing in ->setattr implementations, possibly after taking additional locks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j inode_newsize_ok (C function)c.inode_newsize_okhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h?int inode_newsize_ok (const struct inode *inode, loff_t offset)h]j)}(h>int inode_newsize_ok(const struct inode *inode, loff_t offset)h](jf)}(hinth]hint}(hjljhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjÉhhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKubj2)}(h h]h }(hj։hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjÉhhhjՉhKubjC)}(hinode_newsize_okh]jI)}(hinode_newsize_okh]hinode_newsize_ok}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjÉhhhjՉhKubj=)}(h*(const struct inode *inode, loff_t offset)h](jC)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj )}j ]j)}jjsbc.inode_newsize_okasbuh1hhjubj2)}(h h]h }(hj]hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjxhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t offseth](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jYc.inode_newsize_okasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjÉhhhjՉhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjՉhKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjՉhKhjhhubjw)}(hhh]h)}(h+may this inode be truncated to a given sizeh]h+may this inode be truncated to a given size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjՉhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX}**Parameters** ``const struct inode *inode`` the inode to be truncated ``loff_t offset`` the new size to assign to the inode **Description** inode_newsize_ok must be called with i_rwsem held exclusively. inode_newsize_ok will check filesystem limits and ulimits to check that the new inode size is within limits. inode_newsize_ok will also send SIGXFSZ when necessary. Caller must not proceed with inode size change if failure is returned. **inode** must be a file (not directory), with appropriate permissions to allow truncate (inode_newsize_ok does NOT check these conditions). **Return** 0 on success, -ve errno on failureh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubj)}(hhh](j)}(h8``const struct inode *inode`` the inode to be truncated h](j)}(h``const struct inode *inode``h]j)}(hj+h]hconst struct inode *inode}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhj%ubj)}(hhh]h)}(hthe inode to be truncatedh]hthe inode to be truncated}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hKhj"ubj)}(h6``loff_t offset`` the new size to assign to the inode h](j)}(h``loff_t offset``h]j)}(hjdh]h loff_t offset}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhj^ubj)}(hhh]h)}(h#the new size to assign to the inodeh]h#the new size to assign to the inode}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhKhj"ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubh)}(h>inode_newsize_ok must be called with i_rwsem held exclusively.h]h>inode_newsize_ok must be called with i_rwsem held exclusively.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubh)}(hXxinode_newsize_ok will check filesystem limits and ulimits to check that the new inode size is within limits. inode_newsize_ok will also send SIGXFSZ when necessary. Caller must not proceed with inode size change if failure is returned. **inode** must be a file (not directory), with appropriate permissions to allow truncate (inode_newsize_ok does NOT check these conditions).h](hinode_newsize_ok will check filesystem limits and ulimits to check that the new inode size is within limits. inode_newsize_ok will also send SIGXFSZ when necessary. Caller must not proceed with inode size change if failure is returned. }(hjċhhhNhNubj)}(h **inode**h]hinode}(hj̋hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjċubh must be a file (not directory), with appropriate permissions to allow truncate (inode_newsize_ok does NOT check these conditions).}(hjċhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubh)}(h"0 on success, -ve errno on failureh]h"0 on success, -ve errno on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j setattr_copy (C function)c.setattr_copyhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hZvoid setattr_copy (struct mnt_idmap *idmap, struct inode *inode, const struct iattr *attr)h]j)}(hYvoid setattr_copy(struct mnt_idmap *idmap, struct inode *inode, const struct iattr *attr)h](jf)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj(hhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chM>ubj2)}(h h]h }(hj;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(hhhj:hM>ubjC)}(h setattr_copyh]jI)}(h setattr_copyh]h setattr_copy}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj(hhhj:hM>ubj=)}(hH(struct mnt_idmap *idmap, struct inode *inode, const struct iattr *attr)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjOsbc.setattr_copyasbuh1hhjeubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjI)}(hidmaph]hidmap}(hjŒhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjیhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj׌ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj׌ubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.setattr_copyasbuh1hhj׌ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj׌ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׌ubjI)}(hinodeh]hinode}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj׌ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubjC)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hjKhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjGubj2)}(h h]h }(hjXhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjGubj )}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjGubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjGubh)}(hhh]jI)}(hiattrh]hiattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.setattr_copyasbuh1hhjGubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjGubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjI)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubeh}(h]h ]h"]h$]h&]j`jauh1j<hj(hhhj:hM>ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj$hhhj:hM>ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj:hM>hj!hhubjw)}(hhh]h)}(h3copy simple metadata updates into the generic inodeh]h3copy simple metadata updates into the generic inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chM>hjhhubah}(h]h ]h"]h$]h&]uh1jvhj!hhhj:hM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct inode *inode`` the inode to be updated ``const struct iattr *attr`` the new attributes **Description** setattr_copy must be called with i_rwsem held exclusively. setattr_copy updates the inode's metadata with that specified in attr on idmapped mounts. Necessary permission checks to determine whether or not the S_ISGID property needs to be removed are performed with the correct idmapped mount permission helpers. Noticeably missing is inode size update, which is more complex as it requires pagecache updates. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**. The inode is not marked as dirty after this operation. The rationale is that for "simple" filesystems, the struct inode is the inode storage. The caller is free to mark the inode dirty afterwards if needed.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMBhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hj(h]hstruct mnt_idmap *idmap}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chM?hj"ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM?hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hM?hjubj)}(h0``struct inode *inode`` the inode to be updated h](j)}(h``struct inode *inode``h]j)}(hjah]hstruct inode *inode}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chM@hj[ubj)}(hhh]h)}(hthe inode to be updatedh]hthe inode to be updated}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhM@hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhM@hjubj)}(h0``const struct iattr *attr`` the new attributes h](j)}(h``const struct iattr *attr``h]j)}(hjh]hconst struct iattr *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMAhjubj)}(hhh]h)}(hthe new attributesh]hthe new attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjՎh]h Description}(hj׎hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӎubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMChjubh)}(h:setattr_copy must be called with i_rwsem held exclusively.h]h:setattr_copy must be called with i_rwsem held exclusively.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMBhjubh)}(hX]setattr_copy updates the inode's metadata with that specified in attr on idmapped mounts. Necessary permission checks to determine whether or not the S_ISGID property needs to be removed are performed with the correct idmapped mount permission helpers. Noticeably missing is inode size update, which is more complex as it requires pagecache updates.h]hX_setattr_copy updates the inode’s metadata with that specified in attr on idmapped mounts. Necessary permission checks to determine whether or not the S_ISGID property needs to be removed are performed with the correct idmapped mount permission helpers. Noticeably missing is inode size update, which is more complex as it requires pagecache updates.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMDhjubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hj hhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhB. This function will then take care to map the inode according to }(hj hhhNhNubj)}(h **idmap**h]hidmap}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hj hhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMKhjubh)}(hThe inode is not marked as dirty after this operation. The rationale is that for "simple" filesystems, the struct inode is the inode storage. The caller is free to mark the inode dirty afterwards if needed.h]hThe inode is not marked as dirty after this operation. The rationale is that for “simple” filesystems, the struct inode is the inode storage. The caller is free to mark the inode dirty afterwards if needed.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j notify_change (C function)c.notify_changehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hint notify_change (struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *attr, struct delegated_inode *delegated_inode)h]j)}(h~int notify_change(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *attr, struct delegated_inode *delegated_inode)h](jf)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjyhhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyhhhjhMubjC)}(h notify_changeh]jI)}(h notify_changeh]h notify_change}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjyhhhjhMubj=)}(hm(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *attr, struct delegated_inode *delegated_inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjǏhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj؏hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjՏubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjڏmodnameN classnameNjj )}j ]j)}jjsbc.notify_changeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubh)}(hhh]jI)}(hdentryh]hdentry}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj )}j ]jc.notify_changeasbuh1hhj(ubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct iattr *attrh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hiattrh]hiattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.notify_changeasbuh1hhjubj2)}(h h]h }(hjؐhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj )}j ]jc.notify_changeasbuh1hhjubj2)}(h h]h }(hjHhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdelegated_inodeh]hdelegated_inode}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjyhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjuhhhjhMubah}(h]jpah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjrhhubjw)}(hhh]h)}(h(modify attributes of a filesystem objecth]h(modify attributes of a filesystem object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjrhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``struct dentry *dentry`` object affected ``struct iattr *attr`` new attributes ``struct delegated_inode *delegated_inode`` returns inode, if the inode is delegated **Description** The caller must hold the i_rwsem exclusively on the affected object. If notify_change discovers a delegation in need of breaking, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop the i_rwsem before doing so. Alternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported. Also, passing NULL is fine for callers holding the file open for write, as there can be no conflicting delegation in that case. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjΑh]hstruct mnt_idmap *idmap}(hjБhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̑ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjȑubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjȑubeh}(h]h ]h"]h$]h&]uh1jhjhMhjőubj)}(h*``struct dentry *dentry`` object affected h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjubj)}(hhh]h)}(hobject affectedh]hobject affected}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjőubj)}(h&``struct iattr *attr`` new attributes h](j)}(h``struct iattr *attr``h]j)}(hj@h]hstruct iattr *attr}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhj:ubj)}(hhh]h)}(hnew attributesh]hnew attributes}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjőubj)}(hU``struct delegated_inode *delegated_inode`` returns inode, if the inode is delegated h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hjyh]h'struct delegated_inode *delegated_inode}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjsubj)}(hhh]h)}(h(returns inode, if the inode is delegatedh]h(returns inode, if the inode is delegated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjőubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjubh)}(hDThe caller must hold the i_rwsem exclusively on the affected object.h]hDThe caller must hold the i_rwsem exclusively on the affected object.}(hjʒhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjubh)}(hX1If notify_change discovers a delegation in need of breaking, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop the i_rwsem before doing so.h]hX1If notify_change discovers a delegation in need of breaking, it will return -EWOULDBLOCK and return a reference to the inode in delegated_inode. The caller should then break the delegation and retry. Because breaking a delegation may take a long time, the caller should drop the i_rwsem before doing so.}(hjْhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjubh)}(hXAlternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported. Also, passing NULL is fine for callers holding the file open for write, as there can be no conflicting delegation in that case.h]hXAlternatively, a caller may pass NULL for delegated_inode. This may be appropriate for callers that expect the underlying filesystem not to be NFS exported. Also, passing NULL is fine for callers holding the file open for write, as there can be no conflicting delegation in that case.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This function will then take care to map the inode according to }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/attr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j d_path (C function)c.d_pathhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h>char * d_path (const struct path *path, char *buf, int buflen)h]j)}(hah"]h$]h&]uh1j1hjXhhhjjhKubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjjhKubjC)}(hd_pathh]jI)}(hd_pathh]hd_path}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjXhhhjjhKubj=)}(h0(const struct path *path, char *buf, int buflen)h](jC)}(hconst struct path *pathh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjΓhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hpathh]hpath}(hjߓhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjܓubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.d_pathasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hpathh]hpath}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h char *bufh](jf)}(hcharh]hchar}(hj3hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj/ubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/ubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjI)}(hbufh]hbuf}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int buflenh](jf)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjqubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqubjI)}(hbuflenh]hbuflen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjqubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjXhhhjjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjThhhjjhKubah}(h]jOah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjjhKhjQhhubjw)}(hhh]h)}(hreturn the path of a dentryh]hreturn the path of a dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjQhhhjjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjӔjjӔjjjuh1jhhhjVhNhNubj)}(hXK**Parameters** ``const struct path *path`` path to report ``char *buf`` buffer to return value in ``int buflen`` buffer length **Description** Convert a dentry into an ASCII path name. If the entry has been deleted the string " (deleted)" is appended. Note that this is ambiguous. Returns a pointer into the buffer or an error code if the path was too long. Note: Callers should use the returned pointer, not the passed in buffer, to use the name! The implementation often starts at an offset into the buffer, and may leave 0 bytes at the start. "buflen" should be positive.h](h)}(h**Parameters**h]j)}(hjݔh]h Parameters}(hjߔhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۔ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chKhjהubj)}(hhh](j)}(h+``const struct path *path`` path to report h](j)}(h``const struct path *path``h]j)}(hjh]hconst struct path *path}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chKhjubj)}(hhh]h)}(hpath to reporth]hpath to report}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h(``char *buf`` buffer to return value in h](j)}(h ``char *buf``h]j)}(hj5h]h char *buf}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chKhj/ubj)}(hhh]h)}(hbuffer to return value inh]hbuffer to return value in}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKhjubj)}(h``int buflen`` buffer length h](j)}(h``int buflen``h]j)}(hjnh]h int buflen}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chKhjhubj)}(hhh]h)}(h buffer lengthh]h buffer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjהubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chKhjהubh)}(hConvert a dentry into an ASCII path name. If the entry has been deleted the string " (deleted)" is appended. Note that this is ambiguous.h]hConvert a dentry into an ASCII path name. If the entry has been deleted the string “ (deleted)” is appended. Note that this is ambiguous.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chKhjהubh)}(hXReturns a pointer into the buffer or an error code if the path was too long. Note: Callers should use the returned pointer, not the passed in buffer, to use the name! The implementation often starts at an offset into the buffer, and may leave 0 bytes at the start.h]hXReturns a pointer into the buffer or an error code if the path was too long. Note: Callers should use the returned pointer, not the passed in buffer, to use the name! The implementation often starts at an offset into the buffer, and may leave 0 bytes at the start.}(hjΕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chMhjהubh)}(h"buflen" should be positive.h]h “buflen” should be positive.}(hjݕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/d_path.chMhjהubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "dax_folio_reset_order (C function)c.dax_folio_reset_orderhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h/int dax_folio_reset_order (struct folio *folio)h]j)}(h.int dax_folio_reset_order(struct folio *folio)h](jf)}(hinth]hint}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM}ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM}ubjC)}(hdax_folio_reset_orderh]jI)}(hdax_folio_reset_orderh]hdax_folio_reset_order}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM}ubj=)}(h(struct folio *folio)h]jC)}(hstruct folio *folioh](j )}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjEubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEubh)}(hhh]jI)}(hfolioh]hfolio}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj )}j ]j)}jj/sbc.dax_folio_reset_orderasbuh1hhjEubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjI)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjAubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM}ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM}ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM}hjhhubjw)}(hhh]h)}(h+Reset a compound DAX folio to order-0 pagesh]h+Reset a compound DAX folio to order-0 pages}(hj̖hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM}hjɖhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct folio *folio`` The folio to reset **Description** Splits a compound folio back into individual order-0 pages, clearing compound state and restoring pgmap pointers. **Return** the original folio order (0 if already order-0)h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubj)}(hhh]j)}(h+``struct folio *folio`` The folio to reset h](j)}(h``struct folio *folio``h]j)}(hj h]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM~hjubj)}(hhh]h)}(hThe folio to reseth]hThe folio to reset}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM~hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hM~hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubh)}(hqSplits a compound folio back into individual order-0 pages, clearing compound state and restoring pgmap pointers.h]hqSplits a compound folio back into individual order-0 pages, clearing compound state and restoring pgmap pointers.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubh)}(h **Return**h]j)}(hjoh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubh)}(h/the original folio order (0 if already order-0)h]h/the original folio order (0 if already order-0)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'dax_layout_busy_page_range (C function)c.dax_layout_busy_page_rangehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hbstruct page * dax_layout_busy_page_range (struct address_space *mapping, loff_t start, loff_t end)h]j)}(h`struct page *dax_layout_busy_page_range(struct address_space *mapping, loff_t start, loff_t end)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMubj2)}(h h]h }(hj—hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hpageh]hpage}(hjӗhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjЗubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj՗modnameN classnameNjj )}j ]j)}jdax_layout_busy_page_rangesbc.dax_layout_busy_page_rangeasbuh1hhjhhhjhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hdax_layout_busy_page_rangeh]jI)}(hjh]hdax_layout_busy_page_range}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h9(struct address_space *mapping, loff_t start, loff_t end)h](jC)}(hstruct address_space *mappingh](j )}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj*ubj2)}(h h]h }(hj;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*ubh)}(hhh]jI)}(h address_spaceh]h address_space}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj )}j ]jc.dax_layout_busy_page_rangeasbuh1hhj*ubj2)}(h h]h }(hjjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*ubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjI)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&ubjC)}(h loff_t starth](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.dax_layout_busy_page_rangeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hstarth]hstart}(hj͘hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&ubjC)}(h loff_t endh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.dax_layout_busy_page_rangeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hendh]hend}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj&ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h%find first pinned page in **mapping**h](hfind first pinned page in }(hj?hhhNhNubj)}(h **mapping**h]hmapping}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjVhNhNubj)}(hXN**Parameters** ``struct address_space *mapping`` address space to scan for a page with ref count > 1 ``loff_t start`` Starting offset. Page containing 'start' is included. ``loff_t end`` End offset. Page containing 'end' is included. If 'end' is LLONG_MAX, pages from 'start' till the end of file are included. **Description** DAX requires ZONE_DEVICE mapped pages. These pages are never 'onlined' to the page allocator so they are considered idle when page->count == 1. A filesystem uses this interface to determine if any page in the mapping is busy, i.e. for DMA, or other get_user_pages() usages. It is expected that the filesystem is holding locks to block the establishment of new mappings in this address_space. I.e. it expects to be able to run unmap_mapping_range() and subsequently not race mapping_mapped() becoming true.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM hjiubj)}(hhh](j)}(hV``struct address_space *mapping`` address space to scan for a page with ref count > 1 h](j)}(h!``struct address_space *mapping``h]j)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubj)}(hhh]h)}(h3address space to scan for a page with ref count > 1h]h3address space to scan for a page with ref count > 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``loff_t start`` Starting offset. Page containing 'start' is included. h](j)}(h``loff_t start``h]j)}(hjǙh]h loff_t start}(hjəhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjřubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubj)}(hhh]h)}(h5Starting offset. Page containing 'start' is included.h]h9Starting offset. Page containing ‘start’ is included.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܙhMhjݙubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjܙhMhjubj)}(h``loff_t end`` End offset. Page containing 'end' is included. If 'end' is LLONG_MAX, pages from 'start' till the end of file are included. h](j)}(h``loff_t end``h]j)}(hjh]h loff_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM hjubj)}(hhh]h)}(h{End offset. Page containing 'end' is included. If 'end' is LLONG_MAX, pages from 'start' till the end of file are included.h]hEnd offset. Page containing ‘end’ is included. If ‘end’ is LLONG_MAX, pages from ‘start’ till the end of file are included.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjiubh)}(h**Description**h]j)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM hjiubh)}(hXDAX requires ZONE_DEVICE mapped pages. These pages are never 'onlined' to the page allocator so they are considered idle when page->count == 1. A filesystem uses this interface to determine if any page in the mapping is busy, i.e. for DMA, or other get_user_pages() usages.h]hXDAX requires ZONE_DEVICE mapped pages. These pages are never ‘onlined’ to the page allocator so they are considered idle when page->count == 1. A filesystem uses this interface to determine if any page in the mapping is busy, i.e. for DMA, or other get_user_pages() usages.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM hjiubh)}(hIt is expected that the filesystem is holding locks to block the establishment of new mappings in this address_space. I.e. it expects to be able to run unmap_mapping_range() and subsequently not race mapping_mapped() becoming true.h]hIt is expected that the filesystem is holding locks to block the establishment of new mappings in this address_space. I.e. it expects to be able to run unmap_mapping_range() and subsequently not race mapping_mapped() becoming true.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j dax_iomap_rw (C function)c.dax_iomap_rwhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h]ssize_t dax_iomap_rw (struct kiocb *iocb, struct iov_iter *iter, const struct iomap_ops *ops)h]j)}(h\ssize_t dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter, const struct iomap_ops *ops)h](h)}(hhh]jI)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}j dax_iomap_rwsbc.dax_iomap_rwasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h dax_iomap_rwh]jI)}(hjh]h dax_iomap_rw}(hjǚhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjÚubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hH(struct kiocb *iocb, struct iov_iter *iter, const struct iomap_ops *ops)h](jC)}(hstruct kiocb *iocbh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjޚubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjޚubh)}(hhh]jI)}(hkiocbh]hkiocb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.dax_iomap_rwasbuh1hhjޚubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjޚubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޚubjI)}(hiocbh]hiocb}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjޚubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjښubjC)}(hstruct iov_iter *iterh](j )}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjNubj2)}(h h]h }(hj_hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjNubh)}(hhh]jI)}(hiov_iterh]hiov_iter}(hjphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj )}j ]jc.dax_iomap_rwasbuh1hhjNubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjI)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjNubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjښubjC)}(hconst struct iomap_ops *opsh](j )}(hjh]hconst}(hj›hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjϛhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjݛhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h iomap_opsh]h iomap_ops}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.dax_iomap_rwasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hopsh]hops}(hj4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjښubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hPerform I/O to a DAX fileh]hPerform I/O to a DAX file}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct kiocb *iocb`` The control block for this I/O ``struct iov_iter *iter`` The addresses to do I/O from or to ``const struct iomap_ops *ops`` iomap ops passed from the file system **Description** This function performs read and write operations to directly mapped persistent memory. The callers needs to take care of read/write exclusion and evicting any page cache pages in the region under I/O.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjzubj)}(hhh](j)}(h6``struct kiocb *iocb`` The control block for this I/O h](j)}(h``struct kiocb *iocb``h]j)}(hjh]hstruct kiocb *iocb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubj)}(hhh]h)}(hThe control block for this I/Oh]hThe control block for this I/O}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``struct iov_iter *iter`` The addresses to do I/O from or to h](j)}(h``struct iov_iter *iter``h]j)}(hj؜h]hstruct iov_iter *iter}(hjڜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֜ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjҜubj)}(hhh]h)}(h"The addresses to do I/O from or toh]h"The addresses to do I/O from or to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjҜubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``const struct iomap_ops *ops`` iomap ops passed from the file system h](j)}(h``const struct iomap_ops *ops``h]j)}(hjh]hconst struct iomap_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhj ubj)}(hhh]h)}(h%iomap ops passed from the file systemh]h%iomap ops passed from the file system}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjzubh)}(hThis function performs read and write operations to directly mapped persistent memory. The callers needs to take care of read/write exclusion and evicting any page cache pages in the region under I/O.h]hThis function performs read and write operations to directly mapped persistent memory. The callers needs to take care of read/write exclusion and evicting any page cache pages in the region under I/O.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j dax_iomap_fault (C function)c.dax_iomap_faulthNtauh1hhjVhhhNhNubj)}(hhh](j)}(hvm_fault_t dax_iomap_fault (struct vm_fault *vmf, unsigned int order, unsigned long *pfnp, int *iomap_errp, const struct iomap_ops *ops)h]j)}(hvm_fault_t dax_iomap_fault(struct vm_fault *vmf, unsigned int order, unsigned long *pfnp, int *iomap_errp, const struct iomap_ops *ops)h](h)}(hhh]jI)}(h vm_fault_th]h vm_fault_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jdax_iomap_faultsbc.dax_iomap_faultasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM0ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM0ubjC)}(hdax_iomap_faulth]jI)}(hjh]hdax_iomap_fault}(hjȝhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjĝubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM0ubj=)}(hm(struct vm_fault *vmf, unsigned int order, unsigned long *pfnp, int *iomap_errp, const struct iomap_ops *ops)h](jC)}(hstruct vm_fault *vmfh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjߝubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjߝubh)}(hhh]jI)}(hvm_faulth]hvm_fault}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.dax_iomap_faultasbuh1hhjߝubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjߝubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߝubjI)}(hvmfh]hvmf}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjߝubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj۝ubjC)}(hunsigned int orderh](jf)}(hunsignedh]hunsigned}(hjShhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjOubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubjf)}(hinth]hint}(hjohhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjOubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOubjI)}(horderh]horder}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj۝ubjC)}(hunsigned long *pfnph](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjΞhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjܞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hpfnph]hpfnp}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj۝ubjC)}(hint *iomap_errph](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h iomap_errph]h iomap_errp}(hj+hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj۝ubjC)}(hconst struct iomap_ops *opsh](j )}(hjh]hconst}(hjDhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj@ubj2)}(h h]h }(hjQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@ubj )}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj@ubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@ubh)}(hhh]jI)}(h iomap_opsh]h iomap_ops}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.dax_iomap_faultasbuh1hhj@ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjI)}(hopsh]hops}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj۝ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM0ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM0ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM0hjhhubjw)}(hhh]h)}(h!handle a page fault on a DAX fileh]h!handle a page fault on a DAX file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM0hjݟhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXH**Parameters** ``struct vm_fault *vmf`` The description of the fault ``unsigned int order`` Order of the page to fault in ``unsigned long *pfnp`` PFN to insert for synchronous faults if fsync is required ``int *iomap_errp`` Storage for detailed error code in case of error ``const struct iomap_ops *ops`` Iomap ops passed from the file system **Description** When a page fault occurs, filesystems may call this helper in their fault handler for DAX files. dax_iomap_fault() assumes the caller has done all the necessary locking for page fault to proceed successfully.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM4hjubj)}(hhh](j)}(h6``struct vm_fault *vmf`` The description of the fault h](j)}(h``struct vm_fault *vmf``h]j)}(hj!h]hstruct vm_fault *vmf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM1hjubj)}(hhh]h)}(hThe description of the faulth]hThe description of the fault}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM1hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM1hjubj)}(h5``unsigned int order`` Order of the page to fault in h](j)}(h``unsigned int order``h]j)}(hjZh]hunsigned int order}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM2hjTubj)}(hhh]h)}(hOrder of the page to fault inh]hOrder of the page to fault in}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM2hjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohM2hjubj)}(hR``unsigned long *pfnp`` PFN to insert for synchronous faults if fsync is required h](j)}(h``unsigned long *pfnp``h]j)}(hjh]hunsigned long *pfnp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM3hjubj)}(hhh]h)}(h9PFN to insert for synchronous faults if fsync is requiredh]h9PFN to insert for synchronous faults if fsync is required}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(hE``int *iomap_errp`` Storage for detailed error code in case of error h](j)}(h``int *iomap_errp``h]j)}(hj̠h]hint *iomap_errp}(hjΠhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʠubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM4hjƠubj)}(hhh]h)}(h0Storage for detailed error code in case of errorh]h0Storage for detailed error code in case of error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjƠubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubj)}(hF``const struct iomap_ops *ops`` Iomap ops passed from the file system h](j)}(h``const struct iomap_ops *ops``h]j)}(hjh]hconst struct iomap_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM5hjubj)}(hhh]h)}(h%Iomap ops passed from the file systemh]h%Iomap ops passed from the file system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM7hjubh)}(hWhen a page fault occurs, filesystems may call this helper in their fault handler for DAX files. dax_iomap_fault() assumes the caller has done all the necessary locking for page fault to proceed successfully.h]hWhen a page fault occurs, filesystems may call this helper in their fault handler for DAX files. dax_iomap_fault() assumes the caller has done all the necessary locking for page fault to proceed successfully.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "dax_finish_sync_fault (C function)c.dax_finish_sync_faulthNtauh1hhjVhhhNhNubj)}(hhh](j)}(h^vm_fault_t dax_finish_sync_fault (struct vm_fault *vmf, unsigned int order, unsigned long pfn)h]j)}(h]vm_fault_t dax_finish_sync_fault(struct vm_fault *vmf, unsigned int order, unsigned long pfn)h](h)}(hhh]jI)}(h vm_fault_th]h vm_fault_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jdax_finish_sync_faultsbc.dax_finish_sync_faultasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMzubjC)}(hdax_finish_sync_faulth]jI)}(hjh]hdax_finish_sync_fault}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMzubj=)}(h=(struct vm_fault *vmf, unsigned int order, unsigned long pfn)h](jC)}(hstruct vm_fault *vmfh](j )}(hjh]hstruct}(hjסhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjӡubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjӡubh)}(hhh]jI)}(hvm_faulth]hvm_fault}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.dax_finish_sync_faultasbuh1hhjӡubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjӡubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӡubjI)}(hvmfh]hvmf}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjӡubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjϡubjC)}(hunsigned int orderh](jf)}(hunsignedh]hunsigned}(hjGhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjCubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjCubjf)}(hinth]hint}(hjchhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjCubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjCubjI)}(horderh]horder}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjϡubjC)}(hunsigned long pfnh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj¢hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hpfnh]hpfn}(hjТhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjϡubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMzubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj}hhhjhMzubah}(h]jxah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMzhjzhhubjw)}(hhh]h)}(hfinish synchronous page faulth]hfinish synchronous page fault}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMzhjhhubah}(h]h ]h"]h$]h&]uh1jvhjzhhhjhMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXW**Parameters** ``struct vm_fault *vmf`` The description of the fault ``unsigned int order`` Order of entry to be inserted ``unsigned long pfn`` PFN to insert **Description** This function ensures that the file range touched by the page fault is stored persistently on the media and handles inserting of appropriate page table entry.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM~hjubj)}(hhh](j)}(h6``struct vm_fault *vmf`` The description of the fault h](j)}(h``struct vm_fault *vmf``h]j)}(hj;h]hstruct vm_fault *vmf}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM{hj5ubj)}(hhh]h)}(hThe description of the faulth]hThe description of the fault}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM{hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM{hj2ubj)}(h5``unsigned int order`` Order of entry to be inserted h](j)}(h``unsigned int order``h]j)}(hjth]hunsigned int order}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM|hjnubj)}(hhh]h)}(hOrder of entry to be insertedh]hOrder of entry to be inserted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM|hj2ubj)}(h$``unsigned long pfn`` PFN to insert h](j)}(h``unsigned long pfn``h]j)}(hjh]hunsigned long pfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM}hjubj)}(hhh]h)}(h PFN to inserth]h PFN to insert}(hjƣhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj£hM}hjãubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj£hM}hj2ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chMhjubh)}(hThis function ensures that the file range touched by the page fault is stored persistently on the media and handles inserting of appropriate page table entry.h]hThis function ensures that the file range touched by the page fault is stored persistently on the media and handles inserting of appropriate page table entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/dax.chM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $simple_rename_timestamp (C function)c.simple_rename_timestamphNtauh1hhjVhhhNhNubj)}(hhh](j)}(hvoid simple_rename_timestamp (struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry)h]j)}(hvoid simple_rename_timestamp(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry)h](jf)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj)hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM9ubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj)hhhj;hM9ubjC)}(hsimple_rename_timestamph]jI)}(hsimple_rename_timestamph]hsimple_rename_timestamp}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj)hhhj;hM9ubj=)}(hd(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry)h](jC)}(hstruct inode *old_dirh](j )}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjfubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjPsbc.simple_rename_timestampasbuh1hhjfubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjI)}(hold_dirh]hold_dir}(hjähhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbubjC)}(hstruct dentry *old_dentryh](j )}(hjh]hstruct}(hjܤhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjؤubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjؤubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.simple_rename_timestampasbuh1hhjؤubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjؤubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؤubjI)}(h old_dentryh]h old_dentry}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjؤubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbubjC)}(hstruct inode *new_dirh](j )}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjHubj2)}(h h]h }(hjYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHubh)}(hhh]jI)}(hinodeh]hinode}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj )}j ]jc.simple_rename_timestampasbuh1hhjHubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjI)}(hnew_dirh]hnew_dir}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjHubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbubjC)}(hstruct dentry *new_dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjɥhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjڥhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjץubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjܥmodnameN classnameNjj )}j ]jc.simple_rename_timestampasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h new_dentryh]h new_dentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbubeh}(h]h ]h"]h$]h&]j`jauh1j<hj)hhhj;hM9ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj%hhhj;hM9ubah}(h]j ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj;hM9hj"hhubjw)}(hhh]h)}(h.update the various inode timestamps for renameh]h.update the various inode timestamps for rename}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM9hj:hhubah}(h]h ]h"]h$]h&]uh1jvhj"hhhj;hM9ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct inode *old_dir`` old parent directory ``struct dentry *old_dentry`` dentry that is being renamed ``struct inode *new_dir`` new parent directory ``struct dentry *new_dentry`` target for rename **Description** POSIX mandates that the old and new parent directories have their ctime and mtime updated, and that inodes of **old_dentry** and **new_dentry** (if any), have their ctime updated.h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM=hjYubj)}(hhh](j)}(h/``struct inode *old_dir`` old parent directory h](j)}(h``struct inode *old_dir``h]j)}(hj~h]hstruct inode *old_dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM:hjxubj)}(hhh]h)}(hold parent directoryh]hold parent directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjuubj)}(h;``struct dentry *old_dentry`` dentry that is being renamed h](j)}(h``struct dentry *old_dentry``h]j)}(hjh]hstruct dentry *old_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM;hjubj)}(hhh]h)}(hdentry that is being renamedh]hdentry that is being renamed}(hjЦhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̦hM;hjͦubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̦hM;hjuubj)}(h/``struct inode *new_dir`` new parent directory h](j)}(h``struct inode *new_dir``h]j)}(hjh]hstruct inode *new_dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM<hjubj)}(hhh]h)}(hnew parent directoryh]hnew parent directory}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjuubj)}(h0``struct dentry *new_dentry`` target for rename h](j)}(h``struct dentry *new_dentry``h]j)}(hj)h]hstruct dentry *new_dentry}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM=hj#ubj)}(hhh]h)}(htarget for renameh]htarget for rename}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM=hj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hM=hjuubeh}(h]h ]h"]h$]h&]uh1jhjYubh)}(h**Description**h]j)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM?hjYubh)}(hPOSIX mandates that the old and new parent directories have their ctime and mtime updated, and that inodes of **old_dentry** and **new_dentry** (if any), have their ctime updated.h](hnPOSIX mandates that the old and new parent directories have their ctime and mtime updated, and that inodes of }(hjzhhhNhNubj)}(h**old_dentry**h]h old_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh and }(hjzhhhNhNubj)}(h**new_dentry**h]h new_dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh$ (if any), have their ctime updated.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM>hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j simple_setattr (C function)c.simple_setattrhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hXint simple_setattr (struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *iattr)h]j)}(hWint simple_setattr(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *iattr)h](jf)}(hinth]hint}(hjͧhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjɧhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjܧhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjɧhhhjۧhMubjC)}(hsimple_setattrh]jI)}(hsimple_setattrh]hsimple_setattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjɧhhhjۧhMubj=)}(hE(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *iattr)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj )}j ]j)}jjsbc.simple_setattrasbuh1hhjubj2)}(h h]h }(hjHhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjxubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jDc.simple_setattrasbuh1hhjxubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubj)}(hjh]h*}(hjƨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjI)}(hdentryh]hdentry}(hjӨhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjxubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct iattr *iattrh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hiattrh]hiattr}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]jDc.simple_setattrasbuh1hhjubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hiattrh]hiattr}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjɧhhhjۧhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjŧhhhjۧhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjۧhMhj§hhubjw)}(hhh]h)}(hsetattr for simple filesystemh]hsetattr for simple filesystem}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jvhj§hhhjۧhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the target mount ``struct dentry *dentry`` dentry ``struct iattr *iattr`` iattr structure **Description** Returns 0 on success, -error on failure. simple_setattr is a simple ->setattr implementation without a proper implementation of size changes. It can either be used for in-memory filesystems or special files on simple regular filesystems. Anything that needs to change on-disk or wire state on size changes needs its own setattr method.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh](j)}(h6``struct mnt_idmap *idmap`` idmap of the target mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hidmap of the target mounth]hidmap of the target mount}(hjǩhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjéhMhjĩubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjéhMhjubj)}(h!``struct dentry *dentry`` dentry h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``struct iattr *iattr`` iattr structure h](j)}(h``struct iattr *iattr``h]j)}(hj h]hstruct iattr *iattr}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hiattr structureh]hiattr structure}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(h(Returns 0 on success, -error on failure.h]h(Returns 0 on success, -error on failure.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hdsimple_setattr is a simple ->setattr implementation without a proper implementation of size changes.h]hdsimple_setattr is a simple ->setattr implementation without a proper implementation of size changes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hIt can either be used for in-memory filesystems or special files on simple regular filesystems. Anything that needs to change on-disk or wire state on size changes needs its own setattr method.h]hIt can either be used for in-memory filesystems or special files on simple regular filesystems. Anything that needs to change on-disk or wire state on size changes needs its own setattr method.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $simple_read_from_buffer (C function)c.simple_read_from_bufferhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hqssize_t simple_read_from_buffer (void __user *to, size_t count, loff_t *ppos, const void *from, size_t available)h]j)}(hpssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos, const void *from, size_t available)h](h)}(hhh]jI)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjêmodnameN classnameNjj )}j ]j)}jsimple_read_from_buffersbc.simple_read_from_bufferasbuh1hhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMjubjC)}(hsimple_read_from_bufferh]jI)}(hjߪh]hsimple_read_from_buffer}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMjubj=)}(hQ(void __user *to, size_t count, loff_t *ppos, const void *from, size_t available)h](jC)}(hvoid __user *toh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh__user}(hj hhhNhNubj2)}(h h]h }(hj0hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(htoh]hto}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h size_t counth](h)}(hhh]jI)}(hsize_th]hsize_t}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj )}j ]jݪc.simple_read_from_bufferasbuh1hhj`ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`ubjI)}(hcounth]hcount}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jݪc.simple_read_from_bufferasbuh1hhjubj2)}(h h]h }(hjͫhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj۫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst void *fromh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfromh]hfrom}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hsize_t availableh](h)}(hhh]jI)}(hsize_th]hsize_t}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj )}j ]jݪc.simple_read_from_bufferasbuh1hhjZubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubjI)}(h availableh]h available}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMjubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMjubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMjhjhhubjw)}(hhh]h)}(h'copy data from the buffer to user spaceh]h'copy data from the buffer to user space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMjhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMjubeh}(h]h ](jfunctioneh"]h$]h&]jjjjϬjjϬjjjuh1jhhhjVhNhNubj)}(hXS**Parameters** ``void __user *to`` the user space buffer to read to ``size_t count`` the maximum number of bytes to read ``loff_t *ppos`` the current position in the buffer ``const void *from`` the buffer to read from ``size_t available`` the size of the buffer **Description** The simple_read_from_buffer() function reads up to **count** bytes from the buffer **from** at offset **ppos** into the user space address starting at **to**. On success, the number of bytes read is returned and the offset **ppos** is advanced by this number, or negative value is returned on error.h](h)}(h**Parameters**h]j)}(hj٬h]h Parameters}(hj۬hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׬ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMnhjӬubj)}(hhh](j)}(h5``void __user *to`` the user space buffer to read to h](j)}(h``void __user *to``h]j)}(hjh]hvoid __user *to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMkhjubj)}(hhh]h)}(h the user space buffer to read toh]h the user space buffer to read to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMkhjubj)}(h5``size_t count`` the maximum number of bytes to read h](j)}(h``size_t count``h]j)}(hj1h]h size_t count}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMlhj+ubj)}(hhh]h)}(h#the maximum number of bytes to readh]h#the maximum number of bytes to read}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMlhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMlhjubj)}(h4``loff_t *ppos`` the current position in the buffer h](j)}(h``loff_t *ppos``h]j)}(hjjh]h loff_t *ppos}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMmhjdubj)}(hhh]h)}(h"the current position in the bufferh]h"the current position in the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjubj)}(h-``const void *from`` the buffer to read from h](j)}(h``const void *from``h]j)}(hjh]hconst void *from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMnhjubj)}(hhh]h)}(hthe buffer to read fromh]hthe buffer to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubj)}(h,``size_t available`` the size of the buffer h](j)}(h``size_t available``h]j)}(hjܭh]hsize_t available}(hjޭhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڭubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMohj֭ubj)}(hhh]h)}(hthe size of the bufferh]hthe size of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMohjubah}(h]h ]h"]h$]h&]uh1jhj֭ubeh}(h]h ]h"]h$]h&]uh1jhjhMohjubeh}(h]h ]h"]h$]h&]uh1jhjӬubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMqhjӬubh)}(hThe simple_read_from_buffer() function reads up to **count** bytes from the buffer **from** at offset **ppos** into the user space address starting at **to**.h](h3The simple_read_from_buffer() function reads up to }(hj-hhhNhNubj)}(h **count**h]hcount}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh bytes from the buffer }(hj-hhhNhNubj)}(h**from**h]hfrom}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh at offset }(hj-hhhNhNubj)}(h**ppos**h]hppos}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh) into the user space address starting at }(hj-hhhNhNubj)}(h**to**h]hto}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMphjӬubh)}(hOn success, the number of bytes read is returned and the offset **ppos** is advanced by this number, or negative value is returned on error.h](h@On success, the number of bytes read is returned and the offset }(hjhhhNhNubj)}(h**ppos**h]hppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhD is advanced by this number, or negative value is returned on error.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMshjӬubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #simple_write_to_buffer (C function)c.simple_write_to_bufferhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hpssize_t simple_write_to_buffer (void *to, size_t available, loff_t *ppos, const void __user *from, size_t count)h]j)}(hossize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos, const void __user *from, size_t count)h](h)}(hhh]jI)}(hssize_th]hssize_t}(hjȮhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjŮubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjʮmodnameN classnameNjj )}j ]j)}jsimple_write_to_buffersbc.simple_write_to_bufferasbuh1hhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hsimple_write_to_bufferh]jI)}(hjh]hsimple_write_to_buffer}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hQ(void *to, size_t available, loff_t *ppos, const void __user *from, size_t count)h](jC)}(hvoid *toh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(htoh]hto}(hj@hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hsize_t availableh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj )}j ]jc.simple_write_to_bufferasbuh1hhjUubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjUubjI)}(h availableh]h available}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.simple_write_to_bufferasbuh1hhjubj2)}(h h]h }(hj¯hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjЯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hpposh]hppos}(hjݯhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst void __user *fromh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh__user}(hjhhhNhNubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfromh]hfrom}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h size_t counth](h)}(hhh]jI)}(hsize_th]hsize_t}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj )}j ]jc.simple_write_to_bufferasbuh1hhjaubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjaubjI)}(hcounth]hcount}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjaubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h'copy data from user space to the bufferh]h'copy data from user space to the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjְjjְjjjuh1jhhhjVhNhNubj)}(hXV**Parameters** ``void *to`` the buffer to write to ``size_t available`` the size of the buffer ``loff_t *ppos`` the current position in the buffer ``const void __user *from`` the user space buffer to read from ``size_t count`` the maximum number of bytes to read **Description** The simple_write_to_buffer() function reads up to **count** bytes from the user space address starting at **from** into the buffer **to** at offset **ppos**. On success, the number of bytes written is returned and the offset **ppos** is advanced by this number, or negative value is returned on error.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjްubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjڰubj)}(hhh](j)}(h$``void *to`` the buffer to write to h](j)}(h ``void *to``h]j)}(hjh]hvoid *to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hthe buffer to write toh]hthe buffer to write to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``size_t available`` the size of the buffer h](j)}(h``size_t available``h]j)}(hj8h]hsize_t available}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj2ubj)}(hhh]h)}(hthe size of the bufferh]hthe size of the buffer}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjubj)}(h4``loff_t *ppos`` the current position in the buffer h](j)}(h``loff_t *ppos``h]j)}(hjqh]h loff_t *ppos}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjkubj)}(hhh]h)}(h"the current position in the bufferh]h"the current position in the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h?``const void __user *from`` the user space buffer to read from h](j)}(h``const void __user *from``h]j)}(hjh]hconst void __user *from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h"the user space buffer to read fromh]h"the user space buffer to read from}(hjñhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``size_t count`` the maximum number of bytes to read h](j)}(h``size_t count``h]j)}(hjh]h size_t count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjݱubj)}(hhh]h)}(h#the maximum number of bytes to readh]h#the maximum number of bytes to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjݱubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjڰubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjڰubh)}(hThe simple_write_to_buffer() function reads up to **count** bytes from the user space address starting at **from** into the buffer **to** at offset **ppos**.h](h2The simple_write_to_buffer() function reads up to }(hj4hhhNhNubj)}(h **count**h]hcount}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh/ bytes from the user space address starting at }(hj4hhhNhNubj)}(h**from**h]hfrom}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh into the buffer }(hj4hhhNhNubj)}(h**to**h]hto}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh at offset }(hj4hhhNhNubj)}(h**ppos**h]hppos}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjڰubh)}(hOn success, the number of bytes written is returned and the offset **ppos** is advanced by this number, or negative value is returned on error.h](hCOn success, the number of bytes written is returned and the offset }(hjhhhNhNubj)}(h**ppos**h]hppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhD is advanced by this number, or negative value is returned on error.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjڰubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $memory_read_from_buffer (C function)c.memory_read_from_bufferhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hjssize_t memory_read_from_buffer (void *to, size_t count, loff_t *ppos, const void *from, size_t available)h]j)}(hissize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos, const void *from, size_t available)h](h)}(hhh]jI)}(hssize_th]hssize_t}(hjϲhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj̲ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjѲmodnameN classnameNjj )}j ]j)}jmemory_read_from_buffersbc.memory_read_from_bufferasbuh1hhjȲhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjȲhhhjhMubjC)}(hmemory_read_from_bufferh]jI)}(hjh]hmemory_read_from_buffer}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjȲhhhjhMubj=)}(hJ(void *to, size_t count, loff_t *ppos, const void *from, size_t available)h](jC)}(hvoid *toh](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(htoh]hto}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h size_t counth](h)}(hhh]jI)}(hsize_th]hsize_t}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj )}j ]jc.memory_read_from_bufferasbuh1hhj\ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\ubjI)}(hcounth]hcount}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.memory_read_from_bufferasbuh1hhjubj2)}(h h]h }(hjɳhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj׳hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst void *fromh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfromh]hfrom}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hsize_t availableh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj]hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj )}j ]jc.memory_read_from_bufferasbuh1hhjVubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubjI)}(h availableh]h available}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjȲhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjIJhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hcopy data from the bufferh]hcopy data from the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj˴jj˴jjjuh1jhhhjVhNhNubj)}(hXP**Parameters** ``void *to`` the kernel space buffer to read to ``size_t count`` the maximum number of bytes to read ``loff_t *ppos`` the current position in the buffer ``const void *from`` the buffer to read from ``size_t available`` the size of the buffer **Description** The memory_read_from_buffer() function reads up to **count** bytes from the buffer **from** at offset **ppos** into the kernel space address starting at **to**. On success, the number of bytes read is returned and the offset **ppos** is advanced by this number, or negative value is returned on error.h](h)}(h**Parameters**h]j)}(hjմh]h Parameters}(hj״hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӴubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjϴubj)}(hhh](j)}(h0``void *to`` the kernel space buffer to read to h](j)}(h ``void *to``h]j)}(hjh]hvoid *to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h"the kernel space buffer to read toh]h"the kernel space buffer to read to}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h5``size_t count`` the maximum number of bytes to read h](j)}(h``size_t count``h]j)}(hj-h]h size_t count}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj'ubj)}(hhh]h)}(h#the maximum number of bytes to readh]h#the maximum number of bytes to read}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubj)}(h4``loff_t *ppos`` the current position in the buffer h](j)}(h``loff_t *ppos``h]j)}(hjfh]h loff_t *ppos}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj`ubj)}(hhh]h)}(h"the current position in the bufferh]h"the current position in the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjubj)}(h-``const void *from`` the buffer to read from h](j)}(h``const void *from``h]j)}(hjh]hconst void *from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hthe buffer to read fromh]hthe buffer to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``size_t available`` the size of the buffer h](j)}(h``size_t available``h]j)}(hjصh]hsize_t available}(hjڵhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjֵubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjҵubj)}(hhh]h)}(hthe size of the bufferh]hthe size of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjҵubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjϴubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjϴubh)}(hThe memory_read_from_buffer() function reads up to **count** bytes from the buffer **from** at offset **ppos** into the kernel space address starting at **to**.h](h3The memory_read_from_buffer() function reads up to }(hj)hhhNhNubj)}(h **count**h]hcount}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh bytes from the buffer }(hj)hhhNhNubj)}(h**from**h]hfrom}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh at offset }(hj)hhhNhNubj)}(h**ppos**h]hppos}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh+ into the kernel space address starting at }(hj)hhhNhNubj)}(h**to**h]hto}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjϴubh)}(hOn success, the number of bytes read is returned and the offset **ppos** is advanced by this number, or negative value is returned on error.h](h@On success, the number of bytes read is returned and the offset }(hjhhhNhNubj)}(h**ppos**h]hppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhD is advanced by this number, or negative value is returned on error.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjϴubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $generic_encode_ino32_fh (C function)c.generic_encode_ino32_fhhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h`int generic_encode_ino32_fh (struct inode *inode, __u32 *fh, int *max_len, struct inode *parent)h]j)}(h_int generic_encode_ino32_fh(struct inode *inode, __u32 *fh, int *max_len, struct inode *parent)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjжhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj϶hMubjC)}(hgeneric_encode_ino32_fhh]jI)}(hgeneric_encode_ino32_fhh]hgeneric_encode_ino32_fh}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj޶ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj϶hMubj=)}(hD(struct inode *inode, __u32 *fh, int *max_len, struct inode *parent)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.generic_encode_ino32_fhasbuh1hhjubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h __u32 *fhh](h)}(hhh]jI)}(h__u32h]h__u32}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj )}j ]j8c.generic_encode_ino32_fhasbuh1hhjlubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjI)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int *max_lenh](jf)}(hinth]hint}(hjŷhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjӷhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hmax_lenh]hmax_len}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj )}j ]j8c.generic_encode_ino32_fhasbuh1hhjubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj϶hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj϶hMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj϶hMhjhhubjw)}(hhh]h)}(h-generic export_operations->encode_fh functionh]h-generic export_operations->encode_fh function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj϶hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct inode *inode`` the object to encode ``__u32 *fh`` where to store the file handle fragment ``int *max_len`` maximum length to store there (in 4 byte units) ``struct inode *parent`` parent directory inode, if wanted **Description** This generic encode_fh function assumes that the 32 inode number is suitable for locating an inode, and that the generation number can be used to check that it is still valid. It places them in the filehandle fragment where export_decode_fh expects to find them.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh](j)}(h-``struct inode *inode`` the object to encode h](j)}(h``struct inode *inode``h]j)}(hjɸh]hstruct inode *inode}(hj˸hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǸubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjøubj)}(hhh]h)}(hthe object to encodeh]hthe object to encode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj޸hMhj߸ubah}(h]h ]h"]h$]h&]uh1jhjøubeh}(h]h ]h"]h$]h&]uh1jhj޸hMhjubj)}(h6``__u32 *fh`` where to store the file handle fragment h](j)}(h ``__u32 *fh``h]j)}(hjh]h __u32 *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h'where to store the file handle fragmenth]h'where to store the file handle fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``int *max_len`` maximum length to store there (in 4 byte units) h](j)}(h``int *max_len``h]j)}(hj;h]h int *max_len}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj5ubj)}(hhh]h)}(h/maximum length to store there (in 4 byte units)h]h/maximum length to store there (in 4 byte units)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubj)}(h;``struct inode *parent`` parent directory inode, if wanted h](j)}(h``struct inode *parent``h]j)}(hjth]hstruct inode *parent}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjnubj)}(hhh]h)}(h!parent directory inode, if wantedh]h!parent directory inode, if wanted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hXThis generic encode_fh function assumes that the 32 inode number is suitable for locating an inode, and that the generation number can be used to check that it is still valid. It places them in the filehandle fragment where export_decode_fh expects to find them.h]hXThis generic encode_fh function assumes that the 32 inode number is suitable for locating an inode, and that the generation number can be used to check that it is still valid. It places them in the filehandle fragment where export_decode_fh expects to find them.}(hjŹhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !generic_fh_to_dentry (C function)c.generic_fh_to_dentryhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hstruct dentry * generic_fh_to_dentry (struct super_block *sb, struct fid *fid, int fh_len, int fh_type, struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen))h]j)}(hstruct dentry *generic_fh_to_dentry(struct super_block *sb, struct fid *fid, int fh_len, int fh_type, struct inode *(*get_inode)(struct super_block *sb, u64 ino, u32 gen))h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jgeneric_fh_to_dentrysbc.generic_fh_to_dentryasbuh1hhjhhhjhMubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hgeneric_fh_to_dentryh]jI)}(hj1h]hgeneric_fh_to_dentry}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct super_block *sb, struct fid *fid, int fh_len, int fh_type, struct inode *(*get_inode)(struct super_block *sb, u64 ino, u32 gen))h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjjubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j/c.generic_fh_to_dentryasbuh1hhjjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjI)}(hsbh]hsb}(hjźhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjfubjC)}(hstruct fid *fidh](j )}(hjh]hstruct}(hj޺hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjںubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjںubh)}(hhh]jI)}(hfidh]hfid}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j/c.generic_fh_to_dentryasbuh1hhjںubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjںubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjںubjI)}(hfidh]hfid}(hj5hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjںubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjfubjC)}(h int fh_lenh](jf)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjJubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubjI)}(hfh_lenh]hfh_len}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjfubjC)}(h int fh_typeh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hfh_typeh]hfh_type}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjfubjC)}(hDstruct inode *(*get_inode)(struct super_block *sb, u64 ino, u32 gen)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjŻhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjֻhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjӻubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjػmodnameN classnameNjj )}j ]j/c.generic_fh_to_dentryasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h get_inodeh]h get_inode}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj )}j ]j/c.generic_fh_to_dentryasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjühhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hu64h]hu64}(hjԼhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjѼubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjּmodnameN classnameNjj )}j ]j/c.generic_fh_to_dentryasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hinoh]hino}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hu32h]hu32}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj )}j ]j/c.generic_fh_to_dentryasbuh1hhjubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hgenh]hgen}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjfubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h4generic helper for the fh_to_dentry export operationh]h4generic helper for the fh_to_dentry export operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX(**Parameters** ``struct super_block *sb`` filesystem to do the file handle conversion on ``struct fid *fid`` file handle to convert ``int fh_len`` length of the file handle in bytes ``int fh_type`` type of file handle ``struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)`` filesystem callback to retrieve inode **Description** This function decodes **fid** as long as it has one of the well-known Linux filehandle types and calls **get_inode** on it to retrieve the inode for the object specified in the file handle.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh](j)}(hJ``struct super_block *sb`` filesystem to do the file handle conversion on h](j)}(h``struct super_block *sb``h]j)}(hjнh]hstruct super_block *sb}(hjҽhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjνubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjʽubj)}(hhh]h)}(h.filesystem to do the file handle conversion onh]h.filesystem to do the file handle conversion on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjʽubeh}(h]h ]h"]h$]h&]uh1jhjhMhjǽubj)}(h+``struct fid *fid`` file handle to convert h](j)}(h``struct fid *fid``h]j)}(hj h]hstruct fid *fid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hfile handle to converth]hfile handle to convert}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjǽubj)}(h2``int fh_len`` length of the file handle in bytes h](j)}(h``int fh_len``h]j)}(hjBh]h int fh_len}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj<ubj)}(hhh]h)}(h"length of the file handle in bytesh]h"length of the file handle in bytes}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjǽubj)}(h$``int fh_type`` type of file handle h](j)}(h``int fh_type``h]j)}(hj{h]h int fh_type}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjuubj)}(hhh]h)}(htype of file handleh]htype of file handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjǽubj)}(hp``struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)`` filesystem callback to retrieve inode h](j)}(hI``struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)``h]j)}(hjh]hEstruct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h%filesystem callback to retrieve inodeh]h%filesystem callback to retrieve inode}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjɾhMhjʾubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɾhMhjǽubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hThis function decodes **fid** as long as it has one of the well-known Linux filehandle types and calls **get_inode** on it to retrieve the inode for the object specified in the file handle.h](hThis function decodes }(hjhhhNhNubj)}(h**fid**h]hfid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhJ as long as it has one of the well-known Linux filehandle types and calls }(hjhhhNhNubj)}(h **get_inode**h]h get_inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhI on it to retrieve the inode for the object specified in the file handle.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !generic_fh_to_parent (C function)c.generic_fh_to_parenthNtauh1hhjVhhhNhNubj)}(hhh](j)}(hstruct dentry * generic_fh_to_parent (struct super_block *sb, struct fid *fid, int fh_len, int fh_type, struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen))h]j)}(hstruct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid, int fh_len, int fh_type, struct inode *(*get_inode)(struct super_block *sb, u64 ino, u32 gen))h](j )}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjThhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjThhhjehMubh)}(hhh]jI)}(hdentryh]hdentry}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj )}j ]j)}jgeneric_fh_to_parentsbc.generic_fh_to_parentasbuh1hhjThhhjehMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjThhhjehMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjehMubjC)}(hgeneric_fh_to_parenth]jI)}(hjh]hgeneric_fh_to_parent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjThhhjehMubj=)}(h(struct super_block *sb, struct fid *fid, int fh_len, int fh_type, struct inode *(*get_inode)(struct super_block *sb, u64 ino, u32 gen))h](jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hjҿhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjοubj2)}(h h]h }(hj߿hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjοubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_fh_to_parentasbuh1hhjοubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjοubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjοubjI)}(hsbh]hsb}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjοubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjʿubjC)}(hstruct fid *fidh](j )}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj>ubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubh)}(hhh]jI)}(hfidh]hfid}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj )}j ]jc.generic_fh_to_parentasbuh1hhj>ubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjI)}(hfidh]hfid}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjʿubjC)}(h int fh_lenh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hfh_lenh]hfh_len}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjʿubjC)}(h int fh_typeh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hfh_typeh]hfh_type}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjʿubjC)}(hDstruct inode *(*get_inode)(struct super_block *sb, u64 ino, u32 gen)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj)hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj )}j ]jc.generic_fh_to_parentasbuh1hhjubj2)}(h h]h }(hjXhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h get_inodeh]h get_inode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_fh_to_parentasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hsbh]hsb}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hj3h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hu64h]hu64}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj )}j ]jc.generic_fh_to_parentasbuh1hhjubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hinoh]hino}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hj3h]h,}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_fh_to_parentasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hgenh]hgen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjʿubeh}(h]h ]h"]h$]h&]j`jauh1j<hjThhhjehMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjPhhhjehMubah}(h]jKah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjehMhjMhhubjw)}(hhh]h)}(h4generic helper for the fh_to_parent export operationh]h4generic helper for the fh_to_parent export operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjMhhhjehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjVhNhNubj)}(hXj**Parameters** ``struct super_block *sb`` filesystem to do the file handle conversion on ``struct fid *fid`` file handle to convert ``int fh_len`` length of the file handle in bytes ``int fh_type`` type of file handle ``struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)`` filesystem callback to retrieve inode **Description** This function decodes **fid** as long as it has one of the well-known Linux filehandle types and calls **get_inode** on it to retrieve the inode for the _parent_ object specified in the file handle if it is specified in the file handle, or NULL otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh](j)}(hJ``struct super_block *sb`` filesystem to do the file handle conversion on h](j)}(h``struct super_block *sb``h]j)}(hj4h]hstruct super_block *sb}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj.ubj)}(hhh]h)}(h.filesystem to do the file handle conversion onh]h.filesystem to do the file handle conversion on}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhj+ubj)}(h+``struct fid *fid`` file handle to convert h](j)}(h``struct fid *fid``h]j)}(hjmh]hstruct fid *fid}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjgubj)}(hhh]h)}(hfile handle to converth]hfile handle to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubj)}(h2``int fh_len`` length of the file handle in bytes h](j)}(h``int fh_len``h]j)}(hjh]h int fh_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h"length of the file handle in bytesh]h"length of the file handle in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubj)}(h$``int fh_type`` type of file handle h](j)}(h``int fh_type``h]j)}(hjh]h int fh_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(htype of file handleh]htype of file handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubj)}(hp``struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)`` filesystem callback to retrieve inode h](j)}(hI``struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)``h]j)}(hjh]hEstruct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h%filesystem callback to retrieve inodeh]h%filesystem callback to retrieve inode}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hThis function decodes **fid** as long as it has one of the well-known Linux filehandle types and calls **get_inode** on it to retrieve the inode for the _parent_ object specified in the file handle if it is specified in the file handle, or NULL otherwise.h](hThis function decodes }(hjihhhNhNubj)}(h**fid**h]hfid}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubhJ as long as it has one of the well-known Linux filehandle types and calls }(hjihhhNhNubj)}(h **get_inode**h]h get_inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh on it to retrieve the inode for the _parent_ object specified in the file handle if it is specified in the file handle, or NULL otherwise.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !simple_fsync_noflush (C function)c.simple_fsync_noflushhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hTint simple_fsync_noflush (struct file *file, loff_t start, loff_t end, int datasync)h]j)}(hSint simple_fsync_noflush(struct file *file, loff_t start, loff_t end, int datasync)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hsimple_fsync_noflushh]jI)}(hsimple_fsync_noflushh]hsimple_fsync_noflush}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h;(struct file *file, loff_t start, loff_t end, int datasync)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.simple_fsync_noflushasbuh1hhjubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfileh]hfile}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t starth](h)}(hhh]jI)}(hloff_th]hloff_t}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj )}j ]j3c.simple_fsync_noflushasbuh1hhjgubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubjI)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t endh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j3c.simple_fsync_noflushasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hendh]hend}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int datasynch](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hdatasynch]hdatasync}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h3generic fsync implementation for simple filesystemsh]h3generic fsync implementation for simple filesystems}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhjVhNhNubj)}(hXq**Parameters** ``struct file *file`` file to synchronize ``loff_t start`` start offset in bytes ``loff_t end`` end offset in bytes (inclusive) ``int datasync`` only synchronize essential metadata if true **Description** This function is an fsync handler for simple filesystems. It writes out dirty data, inode (if dirty), but does not issue a cache flush.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM hj]ubj)}(hhh](j)}(h*``struct file *file`` file to synchronize h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj|ubj)}(hhh]h)}(hfile to synchronizeh]hfile to synchronize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(h'``loff_t start`` start offset in bytes h](j)}(h``loff_t start``h]j)}(hjh]h loff_t start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hstart offset in bytesh]hstart offset in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(h/``loff_t end`` end offset in bytes (inclusive) h](j)}(h``loff_t end``h]j)}(hjh]h loff_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM hjubj)}(hhh]h)}(hend offset in bytes (inclusive)h]hend offset in bytes (inclusive)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjyubj)}(h=``int datasync`` only synchronize essential metadata if true h](j)}(h``int datasync``h]j)}(hj-h]h int datasync}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM hj'ubj)}(hhh]h)}(h+only synchronize essential metadata if trueh]h+only synchronize essential metadata if true}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM hj]ubh)}(hThis function is an fsync handler for simple filesystems. It writes out dirty data, inode (if dirty), but does not issue a cache flush.h]hThis function is an fsync handler for simple filesystems. It writes out dirty data, inode (if dirty), but does not issue a cache flush.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j simple_fsync (C function)c.simple_fsynchNtauh1hhjVhhhNhNubj)}(hhh](j)}(hLint simple_fsync (struct file *file, loff_t start, loff_t end, int datasync)h]j)}(hKint simple_fsync(struct file *file, loff_t start, loff_t end, int datasync)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM-ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM-ubjC)}(h simple_fsynch]jI)}(h simple_fsynch]h simple_fsync}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM-ubj=)}(h;(struct file *file, loff_t start, loff_t end, int datasync)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j)}jjsbc.simple_fsyncasbuh1hhjubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfileh]hfile}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t starth](h)}(hhh]jI)}(hloff_th]hloff_t}(hj_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj )}j ]j$c.simple_fsyncasbuh1hhjXubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXubjI)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t endh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j$c.simple_fsyncasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hendh]hend}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int datasynch](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hdatasynch]hdatasync}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM-ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM-ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM-hjhhubjw)}(hhh]h)}(h6fsync implementation for simple filesystems with flushh]h6fsync implementation for simple filesystems with flush}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM-hj/hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM-ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhjVhNhNubj)}(hXi**Parameters** ``struct file *file`` file to synchronize ``loff_t start`` start offset in bytes ``loff_t end`` end offset in bytes (inclusive) ``int datasync`` only synchronize essential metadata if true **Description** This function is an fsync handler for simple filesystems. It writes out dirty data, inode (if dirty), and issues a cache flush.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM1hjNubj)}(hhh](j)}(h*``struct file *file`` file to synchronize h](j)}(h``struct file *file``h]j)}(hjsh]hstruct file *file}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM.hjmubj)}(hhh]h)}(hfile to synchronizeh]hfile to synchronize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjjubj)}(h'``loff_t start`` start offset in bytes h](j)}(h``loff_t start``h]j)}(hjh]h loff_t start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM/hjubj)}(hhh]h)}(hstart offset in bytesh]hstart offset in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjjubj)}(h/``loff_t end`` end offset in bytes (inclusive) h](j)}(h``loff_t end``h]j)}(hjh]h loff_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM0hjubj)}(hhh]h)}(hend offset in bytes (inclusive)h]hend offset in bytes (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjjubj)}(h=``int datasync`` only synchronize essential metadata if true h](j)}(h``int datasync``h]j)}(hjh]h int datasync}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM1hjubj)}(hhh]h)}(h+only synchronize essential metadata if trueh]h+only synchronize essential metadata if true}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM1hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM1hjjubeh}(h]h ]h"]h$]h&]uh1jhjNubh)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM3hjNubh)}(hThis function is an fsync handler for simple filesystems. It writes out dirty data, inode (if dirty), and issues a cache flush.h]hThis function is an fsync handler for simple filesystems. It writes out dirty data, inode (if dirty), and issues a cache flush.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM2hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j &generic_check_addressable (C function)c.generic_check_addressablehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hGint generic_check_addressable (unsigned blocksize_bits, u64 num_blocks)h]j)}(hFint generic_check_addressable(unsigned blocksize_bits, u64 num_blocks)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMCubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMCubjC)}(hgeneric_check_addressableh]jI)}(hgeneric_check_addressableh]hgeneric_check_addressable}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMCubj=)}(h)(unsigned blocksize_bits, u64 num_blocks)h](jC)}(hunsigned blocksize_bitsh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hblocksize_bitsh]hblocksize_bits}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hu64 num_blocksh](h)}(hhh]jI)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.generic_check_addressableasbuh1hhj ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(h num_blocksh]h num_blocks}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMCubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMCubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMChjhhubjw)}(hhh]h)}(h#Check addressability of file systemh]h#Check addressability of file system}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMChjhhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX]**Parameters** ``unsigned blocksize_bits`` log of file system block size ``u64 num_blocks`` number of blocks in file system **Description** Determine whether a file system with **num_blocks** blocks (and a block size of 2****blocksize_bits**) is addressable by the sector_t and page cache of the system. Return 0 if so and -EFBIG otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMGhjubj)}(hhh](j)}(h:``unsigned blocksize_bits`` log of file system block size h](j)}(h``unsigned blocksize_bits``h]j)}(hjh]hunsigned blocksize_bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMDhjubj)}(hhh]h)}(hlog of file system block sizeh]hlog of file system block size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjubj)}(h3``u64 num_blocks`` number of blocks in file system h](j)}(h``u64 num_blocks``h]j)}(hjh]hu64 num_blocks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMEhjubj)}(hhh]h)}(hnumber of blocks in file systemh]hnumber of blocks in file system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMGhjubh)}(hDetermine whether a file system with **num_blocks** blocks (and a block size of 2****blocksize_bits**) is addressable by the sector_t and page cache of the system. Return 0 if so and -EFBIG otherwise.h](h%Determine whether a file system with }(hj6hhhNhNubj)}(h**num_blocks**h]h num_blocks}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh blocks (and a block size of 2****blocksize_bits**) is addressable by the sector_t and page cache of the system. Return 0 if so and -EFBIG otherwise.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j simple_get_link (C function)c.simple_get_linkhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hdconst char * simple_get_link (struct dentry *dentry, struct inode *inode, struct delayed_call *done)h]j)}(hbconst char *simple_get_link(struct dentry *dentry, struct inode *inode, struct delayed_call *done)h](j )}(hjh]hconst}(hjwhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjshhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjshhhjhMubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjshhhjhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjshhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhMubjC)}(hsimple_get_linkh]jI)}(hsimple_get_linkh]hsimple_get_link}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjshhhjhMubj=)}(hG(struct dentry *dentry, struct inode *inode, struct delayed_call *done)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.simple_get_linkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hj5hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(hinodeh]hinode}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]jc.simple_get_linkasbuh1hhjJubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct delayed_call *doneh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h delayed_callh]h delayed_call}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.simple_get_linkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdoneh]hdone}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjshhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjohhhjhMubah}(h]jjah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjlhhubjw)}(hhh]h)}(h3generic helper to get the target of "fast" symlinksh]h7generic helper to get the target of “fast” symlinks}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jvhjlhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1jhhhjVhNhNubj)}(hX+**Parameters** ``struct dentry *dentry`` not used here ``struct inode *inode`` the symlink inode ``struct delayed_call *done`` not used here **Description** Generic helper for filesystems to use for symlink inodes where a pointer to the symlink target is stored in ->i_link. NOTE: this isn't normally called, since as an optimization the path lookup code uses any non-NULL ->i_link directly, without calling ->get_link(). But ->get_link() still must be set, to mark the inode_operations as being for a symlink. **Return** the symlink targeth](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj[ubj)}(hhh](j)}(h(``struct dentry *dentry`` not used here h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjzubj)}(hhh]h)}(h not used hereh]h not used here}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h*``struct inode *inode`` the symlink inode h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hthe symlink inodeh]hthe symlink inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h,``struct delayed_call *done`` not used here h](j)}(h``struct delayed_call *done``h]j)}(hjh]hstruct delayed_call *done}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h not used hereh]h not used here}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubh)}(h**Description**h]j)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj[ubh)}(hXcGeneric helper for filesystems to use for symlink inodes where a pointer to the symlink target is stored in ->i_link. NOTE: this isn't normally called, since as an optimization the path lookup code uses any non-NULL ->i_link directly, without calling ->get_link(). But ->get_link() still must be set, to mark the inode_operations as being for a symlink.h]hXeGeneric helper for filesystems to use for symlink inodes where a pointer to the symlink target is stored in ->i_link. NOTE: this isn’t normally called, since as an optimization the path lookup code uses any non-NULL ->i_link directly, without calling ->get_link(). But ->get_link() still must be set, to mark the inode_operations as being for a symlink.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj[ubh)}(h **Return**h]j)}(hjTh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj[ubh)}(hthe symlink targeth]hthe symlink target}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !generic_ci_d_compare (C function)c.generic_ci_d_comparehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hrint generic_ci_d_compare (const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name)h]j)}(hqint generic_ci_d_compare(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hgeneric_ci_d_compareh]jI)}(hgeneric_ci_d_compareh]hgeneric_ci_d_compare}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hY(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name)h](jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.generic_ci_d_compareasbuh1hhjubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hunsigned int lenh](jf)}(hunsignedh]hunsigned}(hjchhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj_ubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj_ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubjI)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *strh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hstrh]hstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj )}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hqstrh]hqstr}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj )}j ]j+c.generic_ci_d_compareasbuh1hhj ubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hah"]h$]h&]uh1j1hjhhhj'hM7ubjC)}(hgeneric_ci_d_hashh]jI)}(hgeneric_ci_d_hashh]hgeneric_ci_d_hash}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj'hM7ubj=)}(h/(const struct dentry *dentry, struct qstr *str)h](jC)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjVhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubj2)}(h h]h }(hjchhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubj )}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jj<sbc.generic_ci_d_hashasbuh1hhjRubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjNubjC)}(hstruct qstr *strh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_ci_d_hashasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hstrh]hstr}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjNubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj'hM7ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj'hM7ubah}(h]j ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj'hM7hjhhubjw)}(hhh]h)}(h9generic d_hash implementation for casefolding filesystemsh]h9generic d_hash implementation for casefolding filesystems}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM7hjahhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj'hM7ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``const struct dentry *dentry`` dentry of the parent directory ``struct qstr *str`` qstr of name whose hash we should fill in **Return** 0 if hash was successful or unchanged, and -EINVAL on errorh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM;hjubj)}(hhh](j)}(h?``const struct dentry *dentry`` dentry of the parent directory h](j)}(h``const struct dentry *dentry``h]j)}(hjh]hconst struct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM8hjubj)}(hhh]h)}(hdentry of the parent directoryh]hdentry of the parent directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hjubj)}(h?``struct qstr *str`` qstr of name whose hash we should fill in h](j)}(h``struct qstr *str``h]j)}(hjh]hstruct qstr *str}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM9hjubj)}(hhh]h)}(h)qstr of name whose hash we should fill inh]h)qstr of name whose hash we should fill in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM;hjubh)}(h;0 if hash was successful or unchanged, and -EINVAL on errorh]h;0 if hash was successful or unchanged, and -EINVAL on error}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j generic_ci_match (C function)c.generic_ci_matchhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hint generic_ci_match (const struct inode *parent, const struct qstr *name, const struct qstr *folded_name, const u8 *de_name, u32 de_name_len)h]j)}(hint generic_ci_match(const struct inode *parent, const struct qstr *name, const struct qstr *folded_name, const u8 *de_name, u32 de_name_len)h](jf)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjZhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMWubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZhhhjlhMWubjC)}(hgeneric_ci_matchh]jI)}(hgeneric_ci_matchh]hgeneric_ci_match}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjZhhhjlhMWubj=)}(hy(const struct inode *parent, const struct qstr *name, const struct qstr *folded_name, const u8 *de_name, u32 de_name_len)h](jC)}(hconst struct inode *parenth](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.generic_ci_matchasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hj(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj$ubj2)}(h h]h }(hj5hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubj )}(hjh]hstruct}(hjChhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj$ubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubh)}(hhh]jI)}(hqstrh]hqstr}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj )}j ]jc.generic_ci_matchasbuh1hhj$ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct qstr *folded_nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hqstrh]hqstr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_ci_matchasbuh1hhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h folded_nameh]h folded_name}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst u8 *de_nameh](j )}(hjh]hconst}(hj>hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj:ubj2)}(h h]h }(hjKhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubh)}(hhh]jI)}(hu8h]hu8}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj )}j ]jc.generic_ci_matchasbuh1hhj:ubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjI)}(hde_nameh]hde_name}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hu32 de_name_lenh](h)}(hhh]jI)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_ci_matchasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(h de_name_lenh]h de_name_len}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjZhhhjlhMWubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjVhhhjlhMWubah}(h]jQah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjlhMWhjShhubjw)}(hhh]h)}(hMatch a name (case-insensitively) with a dirent. This is a filesystem helper for comparison with directory entries. generic_ci_d_compare should be used in VFS' ->d_compare instead.h]hMatch a name (case-insensitively) with a dirent. This is a filesystem helper for comparison with directory entries. generic_ci_d_compare should be used in VFS’ ->d_compare instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMWhjhhubah}(h]h ]h"]h$]h&]uh1jvhjShhhjlhMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXQ**Parameters** ``const struct inode *parent`` Inode of the parent of the dirent under comparison ``const struct qstr *name`` name under lookup. ``const struct qstr *folded_name`` Optional pre-folded name under lookup ``const u8 *de_name`` Dirent name. ``u32 de_name_len`` dirent name length. **Description** Test whether a case-insensitive directory entry matches the filename being searched. If **folded_name** is provided, it is used instead of recalculating the casefold of **name**. **Return** > 0 if the directory entry matches, 0 if it doesn't match, or < 0 on error.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM[hj#ubj)}(hhh](j)}(hR``const struct inode *parent`` Inode of the parent of the dirent under comparison h](j)}(h``const struct inode *parent``h]j)}(hjHh]hconst struct inode *parent}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM[hjBubj)}(hhh]h)}(h2Inode of the parent of the dirent under comparisonh]h2Inode of the parent of the dirent under comparison}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hM[hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hM[hj?ubj)}(h/``const struct qstr *name`` name under lookup. h](j)}(h``const struct qstr *name``h]j)}(hjh]hconst struct qstr *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM\hj{ubj)}(hhh]h)}(hname under lookup.h]hname under lookup.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhM\hj?ubj)}(hI``const struct qstr *folded_name`` Optional pre-folded name under lookup h](j)}(h"``const struct qstr *folded_name``h]j)}(hjh]hconst struct qstr *folded_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM]hjubj)}(hhh]h)}(h%Optional pre-folded name under lookuph]h%Optional pre-folded name under lookup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hj?ubj)}(h#``const u8 *de_name`` Dirent name. h](j)}(h``const u8 *de_name``h]j)}(hjh]hconst u8 *de_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM^hjubj)}(hhh]h)}(h Dirent name.h]h Dirent name.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM^hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hj?ubj)}(h(``u32 de_name_len`` dirent name length. h](j)}(h``u32 de_name_len``h]j)}(hj,h]hu32 de_name_len}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM_hj&ubj)}(hhh]h)}(hdirent name length.h]hdirent name length.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM_hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM_hj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMahj#ubh)}(hTest whether a case-insensitive directory entry matches the filename being searched. If **folded_name** is provided, it is used instead of recalculating the casefold of **name**.h](hYTest whether a case-insensitive directory entry matches the filename being searched. If }(hj}hhhNhNubj)}(h**folded_name**h]h folded_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubhB is provided, it is used instead of recalculating the casefold of }(hj}hhhNhNubj)}(h**name**h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chM`hj#ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMdhj#ubh)}(hK> 0 if the directory entry matches, 0 if it doesn't match, or < 0 on error.h]hM> 0 if the directory entry matches, 0 if it doesn’t match, or < 0 on error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMehj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !generic_set_sb_d_ops (C function)c.generic_set_sb_d_opshNtauh1hhjVhhhNhNubj)}(hhh](j)}(h2void generic_set_sb_d_ops (struct super_block *sb)h]j)}(h1void generic_set_sb_d_ops(struct super_block *sb)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hgeneric_set_sb_d_opsh]jI)}(hgeneric_set_sb_d_opsh]hgeneric_set_sb_d_ops}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct super_block *sb)h]jC)}(hstruct super_block *sbh](j )}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0ubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubh)}(hhh]jI)}(h super_blockh]h super_block}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj )}j ]j)}jjsbc.generic_set_sb_d_opsasbuh1hhj0ubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjI)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj,ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hYhelper for choosing the set of filesystem-wide dentry operations for the enabled featuresh]hYhelper for choosing the set of filesystem-wide dentry operations for the enabled features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct super_block *sb`` superblock to be configured **Description** Filesystems supporting casefolding and/or fscrypt can call this helper at mount-time to configure default dentry_operations to the best set of dentry operations required for the enabled features. The helper must be called after these have been configured, but before the root dentry is created.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]j)}(h7``struct super_block *sb`` superblock to be configured h](j)}(h``struct super_block *sb``h]j)}(hjh]hstruct super_block *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hsuperblock to be configuredh]hsuperblock to be configured}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hX&Filesystems supporting casefolding and/or fscrypt can call this helper at mount-time to configure default dentry_operations to the best set of dentry operations required for the enabled features. The helper must be called after these have been configured, but before the root dentry is created.h]hX&Filesystems supporting casefolding and/or fscrypt can call this helper at mount-time to configure default dentry_operations to the best set of dentry operations required for the enabled features. The helper must be called after these have been configured, but before the root dentry is created.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %inode_maybe_inc_iversion (C function)c.inode_maybe_inc_iversionhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h?bool inode_maybe_inc_iversion (struct inode *inode, bool force)h]j)}(h>bool inode_maybe_inc_iversion(struct inode *inode, bool force)h](jf)}(hjih]hbool}(hjxhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjthhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjthhhjhMubjC)}(hinode_maybe_inc_iversionh]jI)}(hinode_maybe_inc_iversionh]hinode_maybe_inc_iversion}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjthhhjhMubj=)}(h!(struct inode *inode, bool force)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.inode_maybe_inc_iversionasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h bool forceh](jf)}(hjih]hbool}(hj&hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj"ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj"ubjI)}(hforceh]hforce}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjthhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjphhhjhMubah}(h]jkah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjmhhubjw)}(hhh]h)}(hincrements i_versionh]hincrements i_version}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjhhhubah}(h]h ]h"]h$]h&]uh1jvhjmhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXT**Parameters** ``struct inode *inode`` inode with the i_version that should be updated ``bool force`` increment the counter even if it's not necessary? **Description** Every time the inode is modified, the i_version field must be seen to have changed by any observer. If "force" is set or the QUERIED flag is set, then ensure that we increment the value, and clear the queried flag. In the common case where neither is set, then we can return "false" without updating i_version. If this function returns false, and no other metadata has changed, then we can avoid logging the metadata.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh](j)}(hH``struct inode *inode`` inode with the i_version that should be updated h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h/inode with the i_version that should be updatedh]h/inode with the i_version that should be updated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``bool force`` increment the counter even if it's not necessary? h](j)}(h``bool force``h]j)}(hjh]h bool force}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h1increment the counter even if it's not necessary?h]h3increment the counter even if it’s not necessary?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hcEvery time the inode is modified, the i_version field must be seen to have changed by any observer.h]hcEvery time the inode is modified, the i_version field must be seen to have changed by any observer.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hrIf "force" is set or the QUERIED flag is set, then ensure that we increment the value, and clear the queried flag.h]hvIf “force” is set or the QUERIED flag is set, then ensure that we increment the value, and clear the queried flag.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(h_In the common case where neither is set, then we can return "false" without updating i_version.h]hcIn the common case where neither is set, then we can return “false” without updating i_version.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hjIf this function returns false, and no other metadata has changed, then we can avoid logging the metadata.h]hjIf this function returns false, and no other metadata has changed, then we can avoid logging the metadata.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !inode_query_iversion (C function)c.inode_query_iversionhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h.u64 inode_query_iversion (struct inode *inode)h]j)}(h-u64 inode_query_iversion(struct inode *inode)h](h)}(hhh]jI)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jinode_query_iversionsbc.inode_query_iversionasbuh1hhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hinode_query_iversionh]jI)}(hjh]hinode_query_iversion}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.inode_query_iversionasbuh1hhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hread i_version for later useh]hread i_version for later use}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}jj}jjjuh1jhhhjVhNhNubj)}(hX:**Parameters** ``struct inode *inode`` inode from which i_version should be read **Description** Read the inode i_version counter. This should be used by callers that wish to store the returned i_version for later comparison. This will guarantee that a later query of the i_version will result in a different value if anything has changed. In this implementation, we fetch the current value, set the QUERIED flag and then try to swap it into place with a cmpxchg, if it wasn't already set. If that fails, we try again with the newly fetched value from the cmpxchg.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]j)}(hB``struct inode *inode`` inode from which i_version should be read h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(h)inode from which i_version should be readh]h)inode from which i_version should be read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hRead the inode i_version counter. This should be used by callers that wish to store the returned i_version for later comparison. This will guarantee that a later query of the i_version will result in a different value if anything has changed.h]hRead the inode i_version counter. This should be used by callers that wish to store the returned i_version for later comparison. This will guarantee that a later query of the i_version will result in a different value if anything has changed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubh)}(hIn this implementation, we fetch the current value, set the QUERIED flag and then try to swap it into place with a cmpxchg, if it wasn't already set. If that fails, we try again with the newly fetched value from the cmpxchg.h]hIn this implementation, we fetch the current value, set the QUERIED flag and then try to swap it into place with a cmpxchg, if it wasn’t already set. If that fails, we try again with the newly fetched value from the cmpxchg.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !simple_inode_init_ts (C function)c.simple_inode_init_tshNtauh1hhjVhhhNhNubj)}(hhh](j)}(hah"]h$]h&]uh1j1hj1hhhjBhMGubh)}(hhh]jI)}(h timespec64h]h timespec64}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj )}j ]j)}jsimple_inode_init_tssbc.simple_inode_init_tsasbuh1hhj1hhhjBhMGubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1hhhjBhMGubjC)}(hsimple_inode_init_tsh]jI)}(hjrh]hsimple_inode_init_ts}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj1hhhjBhMGubj=)}(h(struct inode *inode)h]jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jpc.simple_inode_init_tsasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hj1hhhjBhMGubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj-hhhjBhMGubah}(h]j(ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjBhMGhj*hhubjw)}(hhh]h)}(h)initialize the timestamps for a new inodeh]h)initialize the timestamps for a new inode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMGhj hhubah}(h]h ]h"]h$]h&]uh1jvhj*hhhjBhMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct inode *inode`` inode to be initialized **Description** When a new inode is created, most filesystems set the timestamps to the current time. Add a helper to do this.h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMKhj?ubj)}(hhh]j)}(h0``struct inode *inode`` inode to be initialized h](j)}(h``struct inode *inode``h]j)}(hjdh]hstruct inode *inode}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMHhj^ubj)}(hhh]h)}(hinode to be initializedh]hinode to be initialized}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMHhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMHhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMJhj?ubh)}(hnWhen a new inode is created, most filesystems set the timestamps to the current time. Add a helper to do this.h]hnWhen a new inode is created, most filesystems set the timestamps to the current time. Add a helper to do this.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMIhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "simple_start_creating (C function)c.simple_start_creatinghNtauh1hhjVhhhNhNubj)}(hhh](j)}(hOstruct dentry * simple_start_creating (struct dentry *parent, const char *name)h]j)}(hMstruct dentry *simple_start_creating(struct dentry *parent, const char *name)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jsimple_start_creatingsbc.simple_start_creatingasbuh1hhjhhhjhMubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hsimple_start_creatingh]jI)}(hj!h]hsimple_start_creating}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h)(struct dentry *parent, const char *name)h](jC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubh)}(hhh]jI)}(hdentryh]hdentry}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj )}j ]jc.simple_start_creatingasbuh1hhjZubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjVubjC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjVubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hprepare to create a given nameh]hprepare to create a given name}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct dentry *parent`` directory in which to prepare to create the name ``const char *name`` the name to be created **Description** Required lock is taken and a lookup in performed prior to creating an object in a directory. No permission checking is performed. **Return** a negative dentry on which vfs_create() or similar may be attempted, or an error.h](h)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjXubj)}(hhh](j)}(hK``struct dentry *parent`` directory in which to prepare to create the name h](j)}(h``struct dentry *parent``h]j)}(hj}h]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjwubj)}(hhh]h)}(h0directory in which to prepare to create the nameh]h0directory in which to prepare to create the name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubj)}(h,``const char *name`` the name to be created h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjubj)}(hhh]h)}(hthe name to be createdh]hthe name to be created}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubeh}(h]h ]h"]h$]h&]uh1jhjXubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjXubh)}(hRequired lock is taken and a lookup in performed prior to creating an object in a directory. No permission checking is performed.h]hRequired lock is taken and a lookup in performed prior to creating an object in a directory. No permission checking is performed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjXubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjXubh)}(hQa negative dentry on which vfs_create() or similar may be attempted, or an error.h]hQa negative dentry on which vfs_create() or similar may be attempted, or an error.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/libfs.chMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j posix_acl_chmod (C function)c.posix_acl_chmodhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hSint posix_acl_chmod (struct mnt_idmap *idmap, struct dentry *dentry, umode_t mode)h]j)}(hQint posix_acl_chmod(struct mnt_idmap *idmap, struct dentry *dentry, umode_t mode)h](jf)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjYhhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMVubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjYhhhjkhMVubjC)}(hposix_acl_chmodh]jI)}(hposix_acl_chmodh]hposix_acl_chmod}(hj~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjYhhhjkhMVubj=)}(h>(struct mnt_idmap *idmap, struct dentry *dentry, umode_t mode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.posix_acl_chmodasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj )}j ]jc.posix_acl_chmodasbuh1hhjubj2)}(h h]h }(hjHhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.posix_acl_chmodasbuh1hhjxubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjxubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjYhhhjkhMVubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjUhhhjkhMVubah}(h]jPah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjkhMVhjRhhubjw)}(hhh]h)}(hchmod a posix aclh]hchmod a posix acl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMVhjhhubah}(h]h ]h"]h$]h&]uh1jvhjRhhhjkhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX#**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from ``struct dentry *dentry`` dentry to check permissions on ``umode_t mode`` the new mode of **inode** **Description** If the dentry has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMZhjubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMXhjubj)}(hhh]h)}(h+idmap of the mount **inode** was found fromh](hidmap of the mount }(hj/hhhNhNubj)}(h **inode**h]hinode}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh was found from}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hMXhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMXhj ubj)}(h9``struct dentry *dentry`` dentry to check permissions on h](j)}(h``struct dentry *dentry``h]j)}(hjah]hstruct dentry *dentry}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMYhj[ubj)}(hhh]h)}(hdentry to check permissions onh]hdentry to check permissions on}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMYhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMYhj ubj)}(h+``umode_t mode`` the new mode of **inode** h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMZhjubj)}(hhh]h)}(hthe new mode of **inode**h](hthe new mode of }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMZhj ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM\hjubh)}(hXMIf the dentry has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hhIf the dentry has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This function will then take care to map the inode according to }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "posix_acl_update_mode (C function)c.posix_acl_update_modehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hqint posix_acl_update_mode (struct mnt_idmap *idmap, struct inode *inode, umode_t *mode_p, struct posix_acl **acl)h]j)}(hpint posix_acl_update_mode(struct mnt_idmap *idmap, struct inode *inode, umode_t *mode_p, struct posix_acl **acl)h](jf)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjZhhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZhhhjlhMubjC)}(hposix_acl_update_modeh]jI)}(hposix_acl_update_modeh]hposix_acl_update_mode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjZhhhjlhMubj=)}(hW(struct mnt_idmap *idmap, struct inode *inode, umode_t *mode_p, struct posix_acl **acl)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.posix_acl_update_modeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hinodeh]hinode}(hj+hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj )}j ]jc.posix_acl_update_modeasbuh1hhj ubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hinodeh]hinode}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(humode_t *mode_ph](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.posix_acl_update_modeasbuh1hhjyubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjI)}(hmode_ph]hmode_p}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct posix_acl **aclh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h posix_aclh]h posix_acl}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.posix_acl_update_modeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(haclh]hacl}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjZhhhjlhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjVhhhjlhMubah}(h]jQah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjlhMhjShhubjw)}(hhh]h)}(hupdate mode in set_aclh]hupdate mode in set_acl}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jvhjShhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from ``struct inode *inode`` target inode ``umode_t *mode_p`` mode (pointer) for update ``struct posix_acl **acl`` acl pointer **Description** Update the file mode when setting an ACL: compute the new file permission bits based on the ACL. In addition, if the ACL is equivalent to the new file mode, set ***acl** to NULL to indicate that no ACL should be set. As with chmod, clear the setgid bit if the caller is not in the owning group or capable of CAP_FSETID (see inode_change_ok). If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**. Called from set_acl inode operations.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj|ubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubj)}(hhh]h)}(h+idmap of the mount **inode** was found fromh](hidmap of the mount }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was found from}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``struct inode *inode`` target inode h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubj)}(hhh]h)}(h target inodeh]h target inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``umode_t *mode_p`` mode (pointer) for update h](j)}(h``umode_t *mode_p``h]j)}(hj%h]humode_t *mode_p}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubj)}(hhh]h)}(hmode (pointer) for updateh]hmode (pointer) for update}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h'``struct posix_acl **acl`` acl pointer h](j)}(h``struct posix_acl **acl``h]j)}(hj^h]hstruct posix_acl **acl}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjXubj)}(hhh]h)}(h acl pointerh]h acl pointer}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj|ubh)}(hUpdate the file mode when setting an ACL: compute the new file permission bits based on the ACL. In addition, if the ACL is equivalent to the new file mode, set ***acl** to NULL to indicate that no ACL should be set.h](hUpdate the file mode when setting an ACL: compute the new file permission bits based on the ACL. In addition, if the ACL is equivalent to the new file mode, set }(hjhhhNhNubj)}(h***acl**h]h*acl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ to NULL to indicate that no ACL should be set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj|ubh)}(h|As with chmod, clear the setgid bit if the caller is not in the owning group or capable of CAP_FSETID (see inode_change_ok).h]h|As with chmod, clear the setgid bit if the caller is not in the owning group or capable of CAP_FSETID (see inode_change_ok).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj|ubh)}(hXLIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This function will then take care to map the inode according to }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj|ubh)}(h%Called from set_acl inode operations.h]h%Called from set_acl inode operations.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !posix_acl_from_xattr (C function)c.posix_acl_from_xattrhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hgstruct posix_acl * posix_acl_from_xattr (struct user_namespace *userns, const void *value, size_t size)h]j)}(hestruct posix_acl *posix_acl_from_xattr(struct user_namespace *userns, const void *value, size_t size)h](j )}(hjh]hstruct}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOhhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOhhhj`hMubh)}(hhh]jI)}(h posix_aclh]h posix_acl}(hjrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj )}j ]j)}jposix_acl_from_xattrsbc.posix_acl_from_xattrasbuh1hhjOhhhj`hMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjOhhhj`hMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhj`hMubjC)}(hposix_acl_from_xattrh]jI)}(hjh]hposix_acl_from_xattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjOhhhj`hMubj=)}(h?(struct user_namespace *userns, const void *value, size_t size)h](jC)}(hstruct user_namespace *usernsh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(huser_namespaceh]huser_namespace}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.posix_acl_from_xattrasbuh1hhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(husernsh]huserns}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst void *valueh](j )}(hjh]hconst}(hj=hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj9ubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9ubjf)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj9ubj2)}(h h]h }(hjfhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9ubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjI)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h size_t sizeh](h)}(hhh]jI)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.posix_acl_from_xattrasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjOhhhj`hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjKhhhj`hMubah}(h]jFah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj`hMhjHhhubjw)}(hhh]h)}(h3convert POSIX ACLs from backing store to VFS formath]h3convert POSIX ACLs from backing store to VFS format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjHhhhj`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct user_namespace *userns`` the filesystem's idmapping ``const void *value`` the uapi representation of POSIX ACLs ``size_t size`` the size of **void** **Description** Filesystems that store POSIX ACLs in the unaltered uapi format should use posix_acl_from_xattr() when reading them from the backing store and converting them into the struct posix_acl VFS format. The helper is specifically intended to be called from the acl inode operation. The posix_acl_from_xattr() function will map the raw {g,u}id values stored in ACL_{GROUP,USER} entries into idmapping in **userns**. Note that posix_acl_from_xattr() does not take idmapped mounts into account. If it did it calling it from the get acl inode operation would return POSIX ACLs mapped according to an idmapped mount which would mean that the value couldn't be cached for the filesystem. Idmapped mounts are taken into account on the fly during permission checking or right at the VFS - userspace boundary before reporting them to the user. **Return** Allocated struct posix_acl on success, NULL for a valid header but without actual POSIX ACL entries, or ERR_PTR() encoded error code.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubj)}(hhh](j)}(h=``struct user_namespace *userns`` the filesystem's idmapping h](j)}(h!``struct user_namespace *userns``h]j)}(hj4h]hstruct user_namespace *userns}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj.ubj)}(hhh]h)}(hthe filesystem's idmappingh]hthe filesystem’s idmapping}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhj+ubj)}(h<``const void *value`` the uapi representation of POSIX ACLs h](j)}(h``const void *value``h]j)}(hjmh]hconst void *value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjgubj)}(hhh]h)}(h%the uapi representation of POSIX ACLsh]h%the uapi representation of POSIX ACLs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubj)}(h%``size_t size`` the size of **void** h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubj)}(hhh]h)}(hthe size of **void**h](h the size of }(hjhhhNhNubj)}(h**void**h]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubh)}(hXFilesystems that store POSIX ACLs in the unaltered uapi format should use posix_acl_from_xattr() when reading them from the backing store and converting them into the struct posix_acl VFS format. The helper is specifically intended to be called from the acl inode operation.h]hXFilesystems that store POSIX ACLs in the unaltered uapi format should use posix_acl_from_xattr() when reading them from the backing store and converting them into the struct posix_acl VFS format. The helper is specifically intended to be called from the acl inode operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubh)}(hThe posix_acl_from_xattr() function will map the raw {g,u}id values stored in ACL_{GROUP,USER} entries into idmapping in **userns**.h](hyThe posix_acl_from_xattr() function will map the raw {g,u}id values stored in ACL_{GROUP,USER} entries into idmapping in }(hjhhhNhNubj)}(h **userns**h]huserns}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubh)}(hXNote that posix_acl_from_xattr() does not take idmapped mounts into account. If it did it calling it from the get acl inode operation would return POSIX ACLs mapped according to an idmapped mount which would mean that the value couldn't be cached for the filesystem. Idmapped mounts are taken into account on the fly during permission checking or right at the VFS - userspace boundary before reporting them to the user.h]hXNote that posix_acl_from_xattr() does not take idmapped mounts into account. If it did it calling it from the get acl inode operation would return POSIX ACLs mapped according to an idmapped mount which would mean that the value couldn’t be cached for the filesystem. Idmapped mounts are taken into account on the fly during permission checking or right at the VFS - userspace boundary before reporting them to the user.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubh)}(h **Return**h]j)}(hjFh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubh)}(hAllocated struct posix_acl on success, NULL for a valid header but without actual POSIX ACL entries, or ERR_PTR() encoded error code.h]hAllocated struct posix_acl on success, NULL for a valid header but without actual POSIX ACL entries, or ERR_PTR() encoded error code.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_set_acl (C function) c.vfs_set_aclhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hnint vfs_set_acl (struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)h]j)}(hmint vfs_set_acl(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM;ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM;ubjC)}(h vfs_set_aclh]jI)}(h vfs_set_aclh]h vfs_set_acl}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM;ubj=)}(h^(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsb c.vfs_set_aclasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj6ubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubh)}(hhh]jI)}(hdentryh]hdentry}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj )}j ]j c.vfs_set_aclasbuh1hhj6ubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *acl_nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hacl_nameh]hacl_name}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct posix_acl *kaclh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h posix_aclh]h posix_acl}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj )}j ]j c.vfs_set_aclasbuh1hhjubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hkaclh]hkacl}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM;ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM;ubah}(h]j~ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM;hjhhubjw)}(hhh]h)}(hset posix aclsh]hset posix acls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM;hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM;ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` the dentry based on which to set the posix acls ``const char *acl_name`` the name of the posix acl ``struct posix_acl *kacl`` the posix acls in the appropriate VFS format **Description** This function sets **kacl**. The caller must all posix_acl_release() on **kacl** afterwards. **Return** On success 0, on error negative errno.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM?hjubj)}(hhh](j)}(h/``struct mnt_idmap *idmap`` idmap of the mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM<hjubj)}(hhh]h)}(hidmap of the mounth]hidmap of the mount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubj)}(hJ``struct dentry *dentry`` the dentry based on which to set the posix acls h](j)}(h``struct dentry *dentry``Sh]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM=hjubj)}(hhh]h)}(h/the dentry based on which to set the posix aclsh]h/the dentry based on which to set the posix acls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubj)}(h3``const char *acl_name`` the name of the posix acl h](j)}(h``const char *acl_name``h]j)}(hj;h]hconst char *acl_name}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM>hj5ubj)}(hhh]h)}(hthe name of the posix aclh]hthe name of the posix acl}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM>hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM>hjubj)}(hH``struct posix_acl *kacl`` the posix acls in the appropriate VFS format h](j)}(h``struct posix_acl *kacl``h]j)}(hjth]hstruct posix_acl *kacl}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM?hjnubj)}(hhh]h)}(h,the posix acls in the appropriate VFS formath]h,the posix acls in the appropriate VFS format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMAhjubh)}(h\This function sets **kacl**. The caller must all posix_acl_release() on **kacl** afterwards.h](hThis function sets }(hjhhhNhNubj)}(h**kacl**h]hkacl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh-. The caller must all posix_acl_release() on }(hjhhhNhNubj)}(h**kacl**h]hkacl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh afterwards.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chM@hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMChjubh)}(h&On success 0, on error negative errno.h]h&On success 0, on error negative errno.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_get_acl (C function) c.vfs_get_aclhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hestruct posix_acl * vfs_get_acl (struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)h]j)}(hcstruct posix_acl *vfs_get_acl(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)h](j )}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj;hhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;hhhjLhMubh)}(hhh]jI)}(h posix_aclh]h posix_acl}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj )}j ]j)}j vfs_get_aclsb c.vfs_get_aclasbuh1hhj;hhhjLhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;hhhjLhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhjLhMubjC)}(h vfs_get_aclh]jI)}(hj|h]h vfs_get_acl}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj;hhhjLhMubj=)}(hF(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jz c.vfs_get_aclasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubh)}(hhh]jI)}(hdentryh]hdentry}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj )}j ]jz c.vfs_get_aclasbuh1hhj%ubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *acl_nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hacl_nameh]hacl_name}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj;hhhjLhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj7hhhjLhMubah}(h]j2ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjLhMhj4hhubjw)}(hhh]h)}(hget posix aclsh]hget posix acls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj4hhhjLhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` the dentry based on which to retrieve the posix acls ``const char *acl_name`` the name of the posix acl **Description** This function retrieves **kacl** from the filesystem. The caller must all posix_acl_release() on **kacl**. **Return** On success POSIX ACLs in VFS format, on error negative errno.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj#ubj)}(hhh](j)}(h/``struct mnt_idmap *idmap`` idmap of the mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjHh]hstruct mnt_idmap *idmap}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjBubj)}(hhh]h)}(hidmap of the mounth]hidmap of the mount}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj?ubj)}(hO``struct dentry *dentry`` the dentry based on which to retrieve the posix acls h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj{ubj)}(hhh]h)}(h4the dentry based on which to retrieve the posix aclsh]h4the dentry based on which to retrieve the posix acls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubj)}(h3``const char *acl_name`` the name of the posix acl h](j)}(h``const char *acl_name``h]j)}(hjh]hconst char *acl_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubj)}(hhh]h)}(hthe name of the posix aclh]hthe name of the posix acl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj#ubh)}(hjThis function retrieves **kacl** from the filesystem. The caller must all posix_acl_release() on **kacl**.h](hThis function retrieves }(hj hhhNhNubj)}(h**kacl**h]hkacl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhA from the filesystem. The caller must all posix_acl_release() on }(hj hhhNhNubj)}(h**kacl**h]hkacl}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj#ubh)}(h **Return**h]j)}(hj@h]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj#ubh)}(h=On success POSIX ACLs in VFS format, on error negative errno.h]h=On success POSIX ACLs in VFS format, on error negative errno.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_remove_acl (C function)c.vfs_remove_aclhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hYint vfs_remove_acl (struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)h]j)}(hXint vfs_remove_acl(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hvfs_remove_aclh]jI)}(hvfs_remove_aclh]hvfs_remove_acl}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hF(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.vfs_remove_aclasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0ubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubh)}(hhh]jI)}(hdentryh]hdentry}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj )}j ]jc.vfs_remove_aclasbuh1hhj0ubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *acl_nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hacl_nameh]hacl_name}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj}hhhjhMubah}(h]jxah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjzhhubjw)}(hhh]h)}(hremove posix aclsh]hremove posix acls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjzhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jhhhjVhNhNubj)}(hX0**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` the dentry based on which to retrieve the posix acls ``const char *acl_name`` the name of the posix acl **Description** This function removes posix acls. **Return** On success 0, on error negative errno.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj.ubj)}(hhh](j)}(h/``struct mnt_idmap *idmap`` idmap of the mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjSh]hstruct mnt_idmap *idmap}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjMubj)}(hhh]h)}(hidmap of the mounth]hidmap of the mount}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjJubj)}(hO``struct dentry *dentry`` the dentry based on which to retrieve the posix acls h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubj)}(hhh]h)}(h4the dentry based on which to retrieve the posix aclsh]h4the dentry based on which to retrieve the posix acls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(h3``const char *acl_name`` the name of the posix acl h](j)}(h``const char *acl_name``h]j)}(hjh]hconst char *acl_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhjubj)}(hhh]h)}(hthe name of the posix aclh]hthe name of the posix acl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj.ubh)}(h!This function removes posix acls.h]h!This function removes posix acls.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj.ubh)}(h **Return**h]j)}(hj'h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj.ubh)}(h&On success 0, on error negative errno.h]h&On success 0, on error negative errno.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:89: ./fs/posix_acl.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j fill_mg_cmtime (C function)c.fill_mg_cmtimehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hOvoid fill_mg_cmtime (struct kstat *stat, u32 request_mask, struct inode *inode)h]j)}(hNvoid fill_mg_cmtime(struct kstat *stat, u32 request_mask, struct inode *inode)h](jf)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhhjzhK ubjC)}(hfill_mg_cmtimeh]jI)}(hfill_mg_cmtimeh]hfill_mg_cmtime}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhhjzhK ubj=)}(h;(struct kstat *stat, u32 request_mask, struct inode *inode)h](jC)}(hstruct kstat *stath](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkstath]hkstat}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.fill_mg_cmtimeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hstath]hstat}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hu32 request_maskh](h)}(hhh]jI)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]jc.fill_mg_cmtimeasbuh1hhjubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(h request_maskh]h request_mask}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjchhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj_ubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubh)}(hhh]jI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.fill_mg_cmtimeasbuh1hhj_ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhhjzhK ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjdhhhjzhK ubah}(h]j_ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjzhK hjahhubjw)}(hhh]h)}(h5Fill in the mtime and ctime and flag ctime as QUERIEDh]h5Fill in the mtime and ctime and flag ctime as QUERIED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK hjhhubah}(h]h ]h"]h$]h&]uh1jvhjahhhjzhK ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX<**Parameters** ``struct kstat *stat`` where to store the resulting values ``u32 request_mask`` STATX_* values requested ``struct inode *inode`` inode from which to grab the c/mtime **Description** Given **inode**, grab the ctime and mtime out if it and store the result in **stat**. When fetching the value, flag it as QUERIED (if not already) so the next write will record a distinct timestamp. NB: The QUERIED flag is tracked in the ctime, but we set it there even if only the mtime was requested, as that ensures that the next mtime change will be distinct.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK$hjubj)}(hhh](j)}(h;``struct kstat *stat`` where to store the resulting values h](j)}(h``struct kstat *stat``h]j)}(hj%h]hstruct kstat *stat}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK!hjubj)}(hhh]h)}(h#where to store the resulting valuesh]h#where to store the resulting values}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hK!hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hK!hjubj)}(h.``u32 request_mask`` STATX_* values requested h](j)}(h``u32 request_mask``h]j)}(hj^h]hu32 request_mask}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK"hjXubj)}(hhh]h)}(hSTATX_* values requestedh]hSTATX_* values requested}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshK"hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshK"hjubj)}(h=``struct inode *inode`` inode from which to grab the c/mtime h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK#hjubj)}(hhh]h)}(h$inode from which to grab the c/mtimeh]h$inode from which to grab the c/mtime}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK#hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK%hjubh)}(hGiven **inode**, grab the ctime and mtime out if it and store the result in **stat**. When fetching the value, flag it as QUERIED (if not already) so the next write will record a distinct timestamp.h](hGiven }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh=, grab the ctime and mtime out if it and store the result in }(hjhhhNhNubj)}(h**stat**h]hstat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhr. When fetching the value, flag it as QUERIED (if not already) so the next write will record a distinct timestamp.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK$hjubh)}(hNB: The QUERIED flag is tracked in the ctime, but we set it there even if only the mtime was requested, as that ensures that the next mtime change will be distinct.h]hNB: The QUERIED flag is tracked in the ctime, but we set it there even if only the mtime was requested, as that ensures that the next mtime change will be distinct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chK(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j generic_fillattr (C function)c.generic_fillattrhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hjvoid generic_fillattr (struct mnt_idmap *idmap, u32 request_mask, struct inode *inode, struct kstat *stat)h]j)}(hivoid generic_fillattr(struct mnt_idmap *idmap, u32 request_mask, struct inode *inode, struct kstat *stat)h](jf)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjFhhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKBubj2)}(h h]h }(hjYhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFhhhjXhKBubjC)}(hgeneric_fillattrh]jI)}(hgeneric_fillattrh]hgeneric_fillattr}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjFhhhjXhKBubj=)}(hT(struct mnt_idmap *idmap, u32 request_mask, struct inode *inode, struct kstat *stat)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjmsbc.generic_fillattrasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hu32 request_maskh](h)}(hhh]jI)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_fillattrasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(h request_maskh]h request_mask}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj=ubj2)}(h h]h }(hjNhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=ubh)}(hhh]jI)}(hinodeh]hinode}(hj_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj )}j ]jc.generic_fillattrasbuh1hhj=ubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjI)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj=ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct kstat *stath](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkstath]hkstat}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_fillattrasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hstath]hstat}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjFhhhjXhKBubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjBhhhjXhKBubah}(h]j=ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjXhKBhj?hhubjw)}(hhh]h)}(h2Fill in the basic attributes from the inode structh]h2Fill in the basic attributes from the inode struct}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKBhj/hhubah}(h]h ]h"]h$]h&]uh1jvhj?hhhjXhKBubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhjVhNhNubj)}(hX **Parameters** ``struct mnt_idmap *idmap`` idmap of the mount the inode was found from ``u32 request_mask`` statx request_mask ``struct inode *inode`` Inode to use as the source ``struct kstat *stat`` Where to fill in the attributes **Description** Fill in the basic attributes in the kstat structure from data that's to be found on the VFS inode structure. This is the default if no getattr inode operation is supplied. If the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before filling in the uid and gid filds. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKFhjNubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjsh]hstruct mnt_idmap *idmap}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKChjmubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKChjjubj)}(h(``u32 request_mask`` statx request_mask h](j)}(h``u32 request_mask``h]j)}(hjh]hu32 request_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKDhjubj)}(hhh]h)}(hstatx request_maskh]hstatx request_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKDhjjubj)}(h3``struct inode *inode`` Inode to use as the source h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKEhjubj)}(hhh]h)}(hInode to use as the sourceh]hInode to use as the source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKEhjjubj)}(h7``struct kstat *stat`` Where to fill in the attributes h](j)}(h``struct kstat *stat``h]j)}(hjh]hstruct kstat *stat}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKFhjubj)}(hhh]h)}(hWhere to fill in the attributesh]hWhere to fill in the attributes}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKFhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKFhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubh)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKHhjNubh)}(hFill in the basic attributes in the kstat structure from data that's to be found on the VFS inode structure. This is the default if no getattr inode operation is supplied.h]hFill in the basic attributes in the kstat structure from data that’s to be found on the VFS inode structure. This is the default if no getattr inode operation is supplied.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKGhjNubh)}(hXXIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through **idmap**. This function will then take care to map the inode according to **idmap** before filling in the uid and gid filds. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass **nop_mnt_idmap**.h](hgIf the inode has been found through an idmapped mount the idmap of the vfsmount must be passed through }(hj~hhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubhB. This function will then take care to map the inode according to }(hj~hhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh before filling in the uid and gid filds. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hj~hhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKKhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $generic_fill_statx_attr (C function)c.generic_fill_statx_attrhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hFvoid generic_fill_statx_attr (struct inode *inode, struct kstat *stat)h]j)}(hEvoid generic_fill_statx_attr(struct inode *inode, struct kstat *stat)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKuubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhKuubjC)}(hgeneric_fill_statx_attrh]jI)}(hgeneric_fill_statx_attrh]hgeneric_fill_statx_attr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhKuubj=)}(h)(struct inode *inode, struct kstat *stat)h](jC)}(hstruct inode *inodeh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hinodeh]hinode}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj )}j ]j)}jjsbc.generic_fill_statx_attrasbuh1hhjubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hinodeh]hinode}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct kstat *stath](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkstath]hkstat}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jZc.generic_fill_statx_attrasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hstath]hstat}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhKuubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhKuubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKuhjhhubjw)}(hhh]h)}(h1Fill in the statx attributes from the inode flagsh]h1Fill in the statx attributes from the inode flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKuhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKuubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct inode *inode`` Inode to use as the source ``struct kstat *stat`` Where to fill in the attribute flags **Description** Fill in the STATX_ATTR_* flags in the kstat structure for properties of the inode that are published on i_flags and enforced by the VFS.h](h)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKyhj/ubj)}(hhh](j)}(h3``struct inode *inode`` Inode to use as the source h](j)}(h``struct inode *inode``h]j)}(hjTh]hstruct inode *inode}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKvhjNubj)}(hhh]h)}(hInode to use as the sourceh]hInode to use as the source}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKvhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihKvhjKubj)}(h<``struct kstat *stat`` Where to fill in the attribute flags h](j)}(h``struct kstat *stat``h]j)}(hjh]hstruct kstat *stat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKwhjubj)}(hhh]h)}(h$Where to fill in the attribute flagsh]h$Where to fill in the attribute flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKwhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKyhj/ubh)}(hFill in the STATX_ATTR_* flags in the kstat structure for properties of the inode that are published on i_flags and enforced by the VFS.h]hFill in the STATX_ATTR_* flags in the kstat structure for properties of the inode that are published on i_flags and enforced by the VFS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKxhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j -generic_fill_statx_atomic_writes (C function)"c.generic_fill_statx_atomic_writeshNtauh1hhjVhhhNhNubj)}(hhh](j)}(hvoid generic_fill_statx_atomic_writes (struct kstat *stat, unsigned int unit_min, unsigned int unit_max, unsigned int unit_max_opt)h]j)}(hvoid generic_fill_statx_atomic_writes(struct kstat *stat, unsigned int unit_min, unsigned int unit_max, unsigned int unit_max_opt)h](jf)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj hhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhjhKubjC)}(h generic_fill_statx_atomic_writesh]jI)}(h generic_fill_statx_atomic_writesh]h generic_fill_statx_atomic_writes}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhjhKubj=)}(h](struct kstat *stat, unsigned int unit_min, unsigned int unit_max, unsigned int unit_max_opt)h](jC)}(hstruct kstat *stath](j )}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubh)}(hhh]jI)}(hkstath]hkstat}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj )}j ]j)}jj0sb"c.generic_fill_statx_atomic_writesasbuh1hhjFubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjI)}(hstath]hstat}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(hunsigned int unit_minh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hunit_minh]hunit_min}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(hunsigned int unit_maxh](jf)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjf)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hunit_maxh]hunit_max}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(hunsigned int unit_max_opth](jf)}(hunsignedh]hunsigned}(hj^hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjZubj2)}(h h]h }(hjlhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubjf)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjZubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZubjI)}(h unit_max_opth]h unit_max_opt}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubeh}(h]h ]h"]h$]h&]j`jauh1j<hj hhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjhhubjw)}(hhh]h)}(h&Fill in atomic writes statx attributesh]h&Fill in atomic writes statx attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct kstat *stat`` Where to fill in the attribute flags ``unsigned int unit_min`` Minimum supported atomic write length in bytes ``unsigned int unit_max`` Maximum supported atomic write length in bytes ``unsigned int unit_max_opt`` Optimised maximum supported atomic write length in bytes **Description** Fill in the STATX{_ATTR}_WRITE_ATOMIC flags in the kstat structure from atomic write unit_min and unit_max values.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjubj)}(hhh](j)}(h<``struct kstat *stat`` Where to fill in the attribute flags h](j)}(h``struct kstat *stat``h]j)}(hjh]hstruct kstat *stat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjubj)}(hhh]h)}(h$Where to fill in the attribute flagsh]h$Where to fill in the attribute flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hI``unsigned int unit_min`` Minimum supported atomic write length in bytes h](j)}(h``unsigned int unit_min``h]j)}(hj:h]hunsigned int unit_min}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhj4ubj)}(hhh]h)}(h.Minimum supported atomic write length in bytesh]h.Minimum supported atomic write length in bytes}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjubj)}(hI``unsigned int unit_max`` Maximum supported atomic write length in bytes h](j)}(h``unsigned int unit_max``h]j)}(hjsh]hunsigned int unit_max}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjmubj)}(hhh]h)}(h.Maximum supported atomic write length in bytesh]h.Maximum supported atomic write length in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hW``unsigned int unit_max_opt`` Optimised maximum supported atomic write length in bytes h](j)}(h``unsigned int unit_max_opt``h]j)}(hjh]hunsigned int unit_max_opt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjubj)}(hhh]h)}(h8Optimised maximum supported atomic write length in bytesh]h8Optimised maximum supported atomic write length in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjubh)}(hrFill in the STATX{_ATTR}_WRITE_ATOMIC flags in the kstat structure from atomic write unit_min and unit_max values.h]hrFill in the STATX{_ATTR}_WRITE_ATOMIC flags in the kstat structure from atomic write unit_min and unit_max values.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_getattr_nosec (C function)c.vfs_getattr_nosechNtauh1hhjVhhhNhNubj)}(hhh](j)}(hoint vfs_getattr_nosec (const struct path *path, struct kstat *stat, u32 request_mask, unsigned int query_flags)h]j)}(hnint vfs_getattr_nosec(const struct path *path, struct kstat *stat, u32 request_mask, unsigned int query_flags)h](jf)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj(hhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKubj2)}(h h]h }(hj;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(hhhj:hKubjC)}(hvfs_getattr_nosech]jI)}(hvfs_getattr_nosech]hvfs_getattr_nosec}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj(hhhj:hKubj=)}(hY(const struct path *path, struct kstat *stat, u32 request_mask, unsigned int query_flags)h](jC)}(hconst struct path *pathh](j )}(hjh]hconst}(hjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubh)}(hhh]jI)}(hpathh]hpath}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjOsbc.vfs_getattr_nosecasbuh1hhjeubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjI)}(hpathh]hpath}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubjC)}(hstruct kstat *stath](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkstath]hkstat}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.vfs_getattr_nosecasbuh1hhjubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hstath]hstat}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubjC)}(hu32 request_maskh](h)}(hhh]jI)}(hu32h]hu32}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj )}j ]jc.vfs_getattr_nosecasbuh1hhjbubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbubjI)}(h request_maskh]h request_mask}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubjC)}(hunsigned int query_flagsh](jf)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(h query_flagsh]h query_flags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjaubeh}(h]h ]h"]h$]h&]j`jauh1j<hj(hhhj:hKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj$hhhj:hKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj:hKhj!hhubjw)}(hhh]h)}(hgetattr without security checksh]hgetattr without security checks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhj hhubah}(h]h ]h"]h$]h&]uh1jvhj!hhhj:hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhjVhNhNubj)}(hX(**Parameters** ``const struct path *path`` file to get attributes from ``struct kstat *stat`` structure to return attributes in ``u32 request_mask`` STATX_xxx flags indicating what the caller wants ``unsigned int query_flags`` Query mode (AT_STATX_SYNC_TYPE) **Description** Get attributes without calling security_inode_getattr. Currently the only caller other than vfs_getattr is internal to the filehandle lookup code, which uses only the inode number and returns no attributes to any user. Any other code probably wants vfs_getattr.h](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhj,ubj)}(hhh](j)}(h8``const struct path *path`` file to get attributes from h](j)}(h``const struct path *path``h]j)}(hjQh]hconst struct path *path}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjKubj)}(hhh]h)}(hfile to get attributes fromh]hfile to get attributes from}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjHubj)}(h9``struct kstat *stat`` structure to return attributes in h](j)}(h``struct kstat *stat``h]j)}(hjh]hstruct kstat *stat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjubj)}(hhh]h)}(h!structure to return attributes inh]h!structure to return attributes in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubj)}(hF``u32 request_mask`` STATX_xxx flags indicating what the caller wants h](j)}(h``u32 request_mask``h]j)}(hjh]hu32 request_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjubj)}(hhh]h)}(h0STATX_xxx flags indicating what the caller wantsh]h0STATX_xxx flags indicating what the caller wants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubj)}(h=``unsigned int query_flags`` Query mode (AT_STATX_SYNC_TYPE) h](j)}(h``unsigned int query_flags``h]j)}(hjh]hunsigned int query_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhjubj)}(hhh]h)}(hQuery mode (AT_STATX_SYNC_TYPE)h]hQuery mode (AT_STATX_SYNC_TYPE)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhj,ubh)}(h6Get attributes without calling security_inode_getattr.h]h6Get attributes without calling security_inode_getattr.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhj,ubh)}(hCurrently the only caller other than vfs_getattr is internal to the filehandle lookup code, which uses only the inode number and returns no attributes to any user. Any other code probably wants vfs_getattr.h]hCurrently the only caller other than vfs_getattr is internal to the filehandle lookup code, which uses only the inode number and returns no attributes to any user. Any other code probably wants vfs_getattr.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:92: ./fs/stat.chKhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_fsync_range (C function)c.vfs_fsync_rangehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hOint vfs_fsync_range (struct file *file, loff_t start, loff_t end, int datasync)h]j)}(hNint vfs_fsync_range(struct file *file, loff_t start, loff_t end, int datasync)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhKubjC)}(hvfs_fsync_rangeh]jI)}(hvfs_fsync_rangeh]hvfs_fsync_range}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhKubj=)}(h;(struct file *file, loff_t start, loff_t end, int datasync)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.vfs_fsync_rangeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfileh]hfile}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t starth](h)}(hhh]jI)}(hloff_th]hloff_t}(hj=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj )}j ]jc.vfs_fsync_rangeasbuh1hhj6ubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubjI)}(hstarth]hstart}(hjihhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t endh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.vfs_fsync_rangeasbuh1hhj~ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj~ubjI)}(hendh]hend}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj~ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int datasynch](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hdatasynch]hdatasync}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhKubah}(h]j~ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjhhubjw)}(hhh]h)}(h1helper to sync a range of data & metadata to diskh]h1helper to sync a range of data & metadata to disk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct file *file`` file to sync ``loff_t start`` offset in bytes of the beginning of data range to sync ``loff_t end`` offset in bytes of the end of data range (inclusive) ``int datasync`` perform only datasync **Description** Write back data in range **start**..**end** and metadata for **file** to disk. If **datasync** is set only metadata needed to access modified file data is written.h](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj,ubj)}(hhh](j)}(h#``struct file *file`` file to sync h](j)}(h``struct file *file``h]j)}(hjQh]hstruct file *file}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhjKubj)}(hhh]h)}(h file to synch]h file to sync}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjHubj)}(hH``loff_t start`` offset in bytes of the beginning of data range to sync h](j)}(h``loff_t start``h]j)}(hjh]h loff_t start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhjubj)}(hhh]h)}(h6offset in bytes of the beginning of data range to synch]h6offset in bytes of the beginning of data range to sync}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubj)}(hD``loff_t end`` offset in bytes of the end of data range (inclusive) h](j)}(h``loff_t end``h]j)}(hjh]h loff_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhjubj)}(hhh]h)}(h4offset in bytes of the end of data range (inclusive)h]h4offset in bytes of the end of data range (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubj)}(h'``int datasync`` perform only datasync h](j)}(h``int datasync``h]j)}(hjh]h int datasync}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhjubj)}(hhh]h)}(hperform only datasynch]hperform only datasync}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hj7 h]h Description}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5 ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj,ubh)}(hWrite back data in range **start**..**end** and metadata for **file** to disk. If **datasync** is set only metadata needed to access modified file data is written.h](hWrite back data in range }(hjM hhhNhNubj)}(h **start**h]hstart}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubh..**end** and metadata for }(hjM hhhNhNubj)}(h**file**h]hfile}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubh to disk. If }(hjM hhhNhNubj)}(h **datasync**h]hdatasync}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubhE is set only metadata needed to access modified file data is written.}(hjM hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_fsync (C function) c.vfs_fsynchNtauh1hhjVhhhNhNubj)}(hhh](j)}(h/int vfs_fsync (struct file *file, int datasync)h]j)}(h.int vfs_fsync(struct file *file, int datasync)h](jf)}(hinth]hint}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj hhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhj hKubjC)}(h vfs_fsynch]jI)}(h vfs_fsynch]h vfs_fsync}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhj hKubj=)}(h!(struct file *file, int datasync)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hfileh]hfile}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j)}jj sb c.vfs_fsyncasbuh1hhj ubj2)}(h h]h }(hj- hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj; hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hfileh]hfile}(hjH hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h int datasynch](jf)}(hinth]hint}(hja hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj] ubj2)}(h h]h }(hjo hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj] ubjI)}(hdatasynch]hdatasync}(hj} hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj] ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj hhhj hKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhj hKubah}(h]j ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hKhj hhubjw)}(hhh]h)}(h&perform a fsync or fdatasync on a fileh]h&perform a fsync or fdatasync on a file}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj hhubah}(h]h ]h"]h$]h&]uh1jvhj hhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct file *file`` file to sync ``int datasync`` only perform a fdatasync operation **Description** Write back data and metadata for **file** to disk. If **datasync** is set only metadata needed to access modified file data is written.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj ubj)}(hhh](j)}(h#``struct file *file`` file to sync h](j)}(h``struct file *file``h]j)}(hj h]hstruct file *file}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj ubj)}(hhh]h)}(h file to synch]h file to sync}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h4``int datasync`` only perform a fdatasync operation h](j)}(h``int datasync``h]j)}(hj! h]h int datasync}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj ubj)}(hhh]h)}(h"only perform a fdatasync operationh]h"only perform a fdatasync operation}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6 hKhj7 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj6 hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj\ h]h Description}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj ubh)}(hWrite back data and metadata for **file** to disk. If **datasync** is set only metadata needed to access modified file data is written.h](h!Write back data and metadata for }(hjr hhhNhNubj)}(h**file**h]hfile}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr ubh to disk. If }(hjr hhhNhNubj)}(h **datasync**h]hdatasync}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr ubhE is set only metadata needed to access modified file data is written.}(hjr hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/sync.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "__vfs_setxattr_locked (C function)c.__vfs_setxattr_lockedhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hint __vfs_setxattr_locked (struct mnt_idmap *idmap, struct dentry *dentry, const char *name, const void *value, size_t size, int flags, struct delegated_inode *delegated_inode)h]j)}(hint __vfs_setxattr_locked(struct mnt_idmap *idmap, struct dentry *dentry, const char *name, const void *value, size_t size, int flags, struct delegated_inode *delegated_inode)h](jf)}(hinth]hint}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhj hMubjC)}(h__vfs_setxattr_lockedh]jI)}(h__vfs_setxattr_lockedh]h__vfs_setxattr_locked}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhj hMubj=)}(h(struct mnt_idmap *idmap, struct dentry *dentry, const char *name, const void *value, size_t size, int flags, struct delegated_inode *delegated_inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj" modnameN classnameNjj )}j ]j)}jj sbc.__vfs_setxattr_lockedasbuh1hhj ubj2)}(h h]h }(hj@ hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hidmaph]hidmap}(hj[ hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjt hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjp ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjp ubh)}(hhh]jI)}(hdentryh]hdentry}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j< c.__vfs_setxattr_lockedasbuh1hhjp ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjp ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubjI)}(hdentryh]hdentry}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjp ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hconst char *nameh](j )}(hjh]hconst}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjf)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hnameh]hname}(hj( hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hconst void *valueh](j )}(hjh]hconst}(hjA hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj= ubj2)}(h h]h }(hjN hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj= ubjf)}(hvoidh]hvoid}(hj\ hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj= ubj2)}(h h]h }(hjj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj= ubj)}(hjh]h*}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= ubjI)}(hvalueh]hvalue}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj= ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h size_t sizeh](h)}(hhh]jI)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j< c.__vfs_setxattr_lockedasbuh1hhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h int flagsh](jf)}(hinth]hint}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj )}j ]j< c.__vfs_setxattr_lockedasbuh1hhjubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdelegated_inodeh]hdelegated_inode}(hjrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj hhhj hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhj hMubah}(h]j ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hMhj hhubjw)}(hhh]h)}(h6set an extended attribute while holding the inode lockh]h6set an extended attribute while holding the inode lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount of the target inode ``struct dentry *dentry`` object to perform setxattr on ``const char *name`` xattr name to set ``const void *value`` value to set **name** to ``size_t size`` size of **value** ``int flags`` flags to pass into filesystem operations ``struct delegated_inode *delegated_inode`` on return, will contain an inode pointer that a delegation was broken on, NULL if none.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM!hjubj)}(hhh](j)}(hC``struct mnt_idmap *idmap`` idmap of the mount of the target inode h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM hjubj)}(hhh]h)}(h&idmap of the mount of the target inodeh]h&idmap of the mount of the target inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h8``struct dentry *dentry`` object to perform setxattr on h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM!hjubj)}(hhh]h)}(hobject to perform setxattr onh]hobject to perform setxattr on}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM!hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM!hjubj)}(h'``const char *name`` xattr name to set h](j)}(h``const char *name``h]j)}(hjOh]hconst char *name}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM"hjIubj)}(hhh]h)}(hxattr name to seth]hxattr name to set}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM"hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhM"hjubj)}(h/``const void *value`` value to set **name** to h](j)}(h``const void *value``h]j)}(hjh]hconst void *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM#hjubj)}(hhh]h)}(hvalue to set **name** toh](h value to set }(hjhhhNhNubj)}(h**name**h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(h"``size_t size`` size of **value** h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM$hjubj)}(hhh]h)}(hsize of **value**h](hsize of }(hjhhhNhNubj)}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(h7``int flags`` flags to pass into filesystem operations h](j)}(h ``int flags``h]j)}(hjh]h int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM%hjubj)}(hhh]h)}(h(flags to pass into filesystem operationsh]h(flags to pass into filesystem operations}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM%hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hM%hjubj)}(h``struct delegated_inode *delegated_inode`` on return, will contain an inode pointer that a delegation was broken on, NULL if none.h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hjSh]h'struct delegated_inode *delegated_inode}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM&hjMubj)}(hhh]h)}(hWon return, will contain an inode pointer that a delegation was broken on, NULL if none.h]hWon return, will contain an inode pointer that a delegation was broken on, NULL if none.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM&hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM&hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_listxattr (C function)c.vfs_listxattrhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hFssize_t vfs_listxattr (struct dentry *dentry, char *list, size_t size)h]j)}(hEssize_t vfs_listxattr(struct dentry *dentry, char *list, size_t size)h](h)}(hhh]jI)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}j vfs_listxattrsbc.vfs_listxattrasbuh1hhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h vfs_listxattrh]jI)}(hjh]h vfs_listxattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h0(struct dentry *dentry, char *list, size_t size)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.vfs_listxattrasbuh1hhjubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h char *listh](jf)}(hcharh]hchar}(hjnhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjjubj2)}(h h]h }(hj|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjI)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h size_t sizeh](h)}(hhh]jI)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.vfs_listxattrasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h)retrieve \0 separated list of xattr namesh]h)retrieve 0 separated list of xattr names}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!jj!jjjuh1jhhhjVhNhNubj)}(hX0**Parameters** ``struct dentry *dentry`` the dentry from whose inode the xattr names are retrieved ``char *list`` buffer to store xattr names into ``size_t size`` size of the buffer **Description** This function returns the names of all xattrs associated with the inode of **dentry**. Note, for legacy reasons the vfs_listxattr() function lists POSIX ACLs as well. Since POSIX ACLs are decoupled from IOP_XATTR the vfs_listxattr() function doesn't check for this flag since a filesystem could implement POSIX ACLs without implementing any other xattrs. However, since all codepaths that remove IOP_XATTR also assign of inode operations that either don't implement or implement a stub ->listxattr() operation. **Return** On success, the size of the buffer that was used. On error a negative error code.h](h)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhj%ubj)}(hhh](j)}(hT``struct dentry *dentry`` the dentry from whose inode the xattr names are retrieved h](j)}(h``struct dentry *dentry``h]j)}(hjJh]hstruct dentry *dentry}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjDubj)}(hhh]h)}(h9the dentry from whose inode the xattr names are retrievedh]h9the dentry from whose inode the xattr names are retrieved}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubj)}(h0``char *list`` buffer to store xattr names into h](j)}(h``char *list``h]j)}(hjh]h char *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhj}ubj)}(hhh]h)}(h buffer to store xattr names intoh]h buffer to store xattr names into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubj)}(h#``size_t size`` size of the buffer h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjubj)}(hhh]h)}(hsize of the bufferh]hsize of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhj%ubh)}(hVThis function returns the names of all xattrs associated with the inode of **dentry**.h](hKThis function returns the names of all xattrs associated with the inode of }(hj hhhNhNubj)}(h **dentry**h]hdentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhj%ubh)}(hX Note, for legacy reasons the vfs_listxattr() function lists POSIX ACLs as well. Since POSIX ACLs are decoupled from IOP_XATTR the vfs_listxattr() function doesn't check for this flag since a filesystem could implement POSIX ACLs without implementing any other xattrs.h]hX Note, for legacy reasons the vfs_listxattr() function lists POSIX ACLs as well. Since POSIX ACLs are decoupled from IOP_XATTR the vfs_listxattr() function doesn’t check for this flag since a filesystem could implement POSIX ACLs without implementing any other xattrs.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhj%ubh)}(hHowever, since all codepaths that remove IOP_XATTR also assign of inode operations that either don't implement or implement a stub ->listxattr() operation.h]hHowever, since all codepaths that remove IOP_XATTR also assign of inode operations that either don’t implement or implement a stub ->listxattr() operation.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhj%ubh)}(h **Return**h]j)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhj%ubh)}(hQOn success, the size of the buffer that was used. On error a negative error code.h]hQOn success, the size of the buffer that was used. On error a negative error code.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %__vfs_removexattr_locked (C function)c.__vfs_removexattr_lockedhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hint __vfs_removexattr_locked (struct mnt_idmap *idmap, struct dentry *dentry, const char *name, struct delegated_inode *delegated_inode)h]j)}(hint __vfs_removexattr_locked(struct mnt_idmap *idmap, struct dentry *dentry, const char *name, struct delegated_inode *delegated_inode)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM&ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM&ubjC)}(h__vfs_removexattr_lockedh]jI)}(h__vfs_removexattr_lockedh]h__vfs_removexattr_locked}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM&ubj=)}(hk(struct mnt_idmap *idmap, struct dentry *dentry, const char *name, struct delegated_inode *delegated_inode)h](jC)}(hstruct mnt_idmap *idmaph](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.__vfs_removexattr_lockedasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hidmaph]hidmap}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj>ubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubh)}(hhh]jI)}(hdentryh]hdentry}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj )}j ]j c.__vfs_removexattr_lockedasbuh1hhj>ubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h'struct delegated_inode *delegated_inodeh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hdelegated_inodeh]hdelegated_inode}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj )}j ]j c.__vfs_removexattr_lockedasbuh1hhj ubj2)}(h h]h }(hjKhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hdelegated_inodeh]hdelegated_inode}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM&ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM&ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM&hjhhubjw)}(hhh]h)}(h6set an extended attribute while holding the inode lockh]h6set an extended attribute while holding the inode lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM&hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hXH**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount of the target inode ``struct dentry *dentry`` object to perform setxattr on ``const char *name`` name of xattr to remove ``struct delegated_inode *delegated_inode`` on return, will contain an inode pointer that a delegation was broken on, NULL if none.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM*hjubj)}(hhh](j)}(hC``struct mnt_idmap *idmap`` idmap of the mount of the target inode h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjh]hstruct mnt_idmap *idmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM)hjubj)}(hhh]h)}(h&idmap of the mount of the target inodeh]h&idmap of the mount of the target inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h8``struct dentry *dentry`` object to perform setxattr on h](j)}(h``struct dentry *dentry``h]j)}(hj h]hstruct dentry *dentry}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM*hjubj)}(hhh]h)}(hobject to perform setxattr onh]hobject to perform setxattr on}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubj)}(h-``const char *name`` name of xattr to remove h](j)}(h``const char *name``h]j)}(hjCh]hconst char *name}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM+hj=ubj)}(hhh]h)}(hname of xattr to removeh]hname of xattr to remove}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM+hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhM+hjubj)}(h``struct delegated_inode *delegated_inode`` on return, will contain an inode pointer that a delegation was broken on, NULL if none.h](j)}(h+``struct delegated_inode *delegated_inode``h]j)}(hj|h]h'struct delegated_inode *delegated_inode}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chM,hjvubj)}(hhh]h)}(hWon return, will contain an inode pointer that a delegation was broken on, NULL if none.h]hWon return, will contain an inode pointer that a delegation was broken on, NULL if none.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j generic_listxattr (C function)c.generic_listxattrhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hSssize_t generic_listxattr (struct dentry *dentry, char *buffer, size_t buffer_size)h]j)}(hRssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)h](h)}(hhh]jI)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jgeneric_listxattrsbc.generic_listxattrasbuh1hhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMsubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMsubjC)}(hgeneric_listxattrh]jI)}(hjh]hgeneric_listxattr}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMsubj=)}(h9(struct dentry *dentry, char *buffer, size_t buffer_size)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj#ubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj#ubh)}(hhh]jI)}(hdentryh]hdentry}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj )}j ]jc.generic_listxattrasbuh1hhj#ubj2)}(h h]h }(hjchhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj#ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjI)}(hdentryh]hdentry}(hj~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj#ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h char *bufferh](jf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hsize_t buffer_sizeh](h)}(hhh]jI)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.generic_listxattrasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(h buffer_sizeh]h buffer_size}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMsubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMsubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMshjhhubjw)}(hhh]h)}(h.run through a dentry's xattr list() operationsh]h0run through a dentry’s xattr list() operations}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMshj/hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhjVhNhNubj)}(hXD**Parameters** ``struct dentry *dentry`` dentry to list the xattrs ``char *buffer`` result buffer ``size_t buffer_size`` size of **buffer** **Description** Combine the results of the list() operation from every xattr_handler in the xattr_handler stack. Note that this will not include the entries for POSIX ACLs.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMwhjNubj)}(hhh](j)}(h4``struct dentry *dentry`` dentry to list the xattrs h](j)}(h``struct dentry *dentry``h]j)}(hjsh]hstruct dentry *dentry}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMthjmubj)}(hhh]h)}(hdentry to list the xattrsh]hdentry to list the xattrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMthjjubj)}(h``char *buffer`` result buffer h](j)}(h``char *buffer``h]j)}(hjh]h char *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMuhjubj)}(hhh]h)}(h result bufferh]h result buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjjubj)}(h*``size_t buffer_size`` size of **buffer** h](j)}(h``size_t buffer_size``h]j)}(hjh]hsize_t buffer_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMvhjubj)}(hhh]h)}(hsize of **buffer**h](hsize of }(hjhhhNhNubj)}(h **buffer**h]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubh)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMxhjNubh)}(h`Combine the results of the list() operation from every xattr_handler in the xattr_handler stack.h]h`Combine the results of the list() operation from every xattr_handler in the xattr_handler stack.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMwhjNubh)}(h;Note that this will not include the entries for POSIX ACLs.h]h;Note that this will not include the entries for POSIX ACLs.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMzhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j xattr_full_name (C function)c.xattr_full_namehNtauh1hhjVhhhNhNubj)}(hhh](j)}(hTconst char * xattr_full_name (const struct xattr_handler *handler, const char *name)h]j)}(hRconst char *xattr_full_name(const struct xattr_handler *handler, const char *name)h](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj~hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj~hhhjhMubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj~hhhjhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj~hhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubjC)}(hxattr_full_nameh]jI)}(hxattr_full_nameh]hxattr_full_name}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj~hhhjhMubj=)}(h7(const struct xattr_handler *handler, const char *name)h](jC)}(h#const struct xattr_handler *handlerh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h xattr_handlerh]h xattr_handler}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj )}j ]j)}jjsbc.xattr_full_nameasbuh1hhjubj2)}(h h]h }(hj@hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hhandlerh]hhandler}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *nameh](j )}(hjh]hconst}(hjthhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjpubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjpubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj~hhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjzhhhjhMubah}(h]juah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjwhhubjw)}(hhh]h)}(h'Compute full attribute name from suffixh]h'Compute full attribute name from suffix}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjwhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``const struct xattr_handler *handler`` handler of the xattr_handler operation ``const char *name`` name passed to the xattr_handler operation **Description** The get and set xattr handler operations are called with the remainder of the attribute name after skipping the handler's prefix: for example, "foo" is passed to the get operation of a handler with prefix "user." to get attribute "user.foo". The full name is still "there" in the name though. **Note** the list xattr handler operation when called from the vfs is passed a NULL name; some file systems use this operation internally, with varying semantics.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjubj)}(hhh](j)}(hO``const struct xattr_handler *handler`` handler of the xattr_handler operation h](j)}(h'``const struct xattr_handler *handler``h]j)}(hj#h]h#const struct xattr_handler *handler}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjubj)}(hhh]h)}(h&handler of the xattr_handler operationh]h&handler of the xattr_handler operation}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubj)}(h@``const char *name`` name passed to the xattr_handler operation h](j)}(h``const char *name``h]j)}(hj\h]hconst char *name}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjVubj)}(hhh]h)}(h*name passed to the xattr_handler operationh]h*name passed to the xattr_handler operation}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjubh)}(hX%The get and set xattr handler operations are called with the remainder of the attribute name after skipping the handler's prefix: for example, "foo" is passed to the get operation of a handler with prefix "user." to get attribute "user.foo". The full name is still "there" in the name though.h]hX7The get and set xattr handler operations are called with the remainder of the attribute name after skipping the handler’s prefix: for example, “foo” is passed to the get operation of a handler with prefix “user.” to get attribute “user.foo”. The full name is still “there” in the name though.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjubh)}(hthe list xattr handler operation when called from the vfs is passed a NULL name; some file systems use this operation internally, with varying semantics.h]hthe list xattr handler operation when called from the vfs is passed a NULL name; some file systems use this operation internally, with varying semantics.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/xattr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !mnt_get_write_access (C function)c.mnt_get_write_accesshNtauh1hhjVhhhNhNubj)}(hhh](j)}(h-int mnt_get_write_access (struct vfsmount *m)h]j)}(h,int mnt_get_write_access(struct vfsmount *m)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hmnt_get_write_accessh]jI)}(hmnt_get_write_accessh]hmnt_get_write_access}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct vfsmount *m)h]jC)}(hstruct vfsmount *mh](j )}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj<ubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj )}j ]j)}jj&sbc.mnt_get_write_accessasbuh1hhj<ubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjI)}(hj*6h]hm}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj8ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h5get write access to a mount without freeze protectionh]h5get write access to a mount without freeze protection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct vfsmount *m`` the mount on which to take a write **Description** This tells the low-level filesystem that a write is about to be performed to it, and makes sure that writes are allowed (mnt it read-write) before returning success. This operation does not protect against filesystem being frozen. When the write operation is finished, mnt_put_write_access() must be called. This is effectively a refcount.:h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjubj)}(hhh]j)}(h:``struct vfsmount *m`` the mount on which to take a write h](j)}(h``struct vfsmount *m``h]j)}(hjh]hstruct vfsmount *m}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjubj)}(hhh]h)}(h"the mount on which to take a writeh]h"the mount on which to take a write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjubh)}(hXSThis tells the low-level filesystem that a write is about to be performed to it, and makes sure that writes are allowed (mnt it read-write) before returning success. This operation does not protect against filesystem being frozen. When the write operation is finished, mnt_put_write_access() must be called. This is effectively a refcount.h]hXSThis tells the low-level filesystem that a write is about to be performed to it, and makes sure that writes are allowed (mnt it read-write) before returning success. This operation does not protect against filesystem being frozen. When the write operation is finished, mnt_put_write_access() must be called. This is effectively a refcount.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j mnt_want_write (C function)c.mnt_want_writehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h'int mnt_want_write (struct vfsmount *m)h]j)}(h&int mnt_want_write(struct vfsmount *m)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hmnt_want_writeh]jI)}(hmnt_want_writeh]hmnt_want_write}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct vfsmount *m)h]jC)}(hstruct vfsmount *mh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.mnt_want_writeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hj*6h]hm}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj{hhhjhMubah}(h]jvah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjxhhubjw)}(hhh]h)}(hget write access to a mounth]hget write access to a mount}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jvhjxhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct vfsmount *m`` the mount on which to take a write **Description** This tells the low-level filesystem that a write is about to be performed to it, and makes sure that writes are allowed (mount is read-write, filesystem is not frozen) before returning success. When the write operation is finished, mnt_drop_write() must be called. This is effectively a refcount.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj^ubj)}(hhh]j)}(h:``struct vfsmount *m`` the mount on which to take a write h](j)}(h``struct vfsmount *m``h]j)}(hjh]hstruct vfsmount *m}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj}ubj)}(hhh]h)}(h"the mount on which to take a writeh]h"the mount on which to take a write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj^ubh)}(hX*This tells the low-level filesystem that a write is about to be performed to it, and makes sure that writes are allowed (mount is read-write, filesystem is not frozen) before returning success. When the write operation is finished, mnt_drop_write() must be called. This is effectively a refcount.h]hX*This tells the low-level filesystem that a write is about to be performed to it, and makes sure that writes are allowed (mount is read-write, filesystem is not frozen) before returning success. When the write operation is finished, mnt_drop_write() must be called. This is effectively a refcount.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  mnt_want_write_file (C function)c.mnt_want_write_filehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h+int mnt_want_write_file (struct file *file)h]j)}(h*int mnt_want_write_file(struct file *file)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hmnt_want_write_fileh]jI)}(hmnt_want_write_fileh]hmnt_want_write_file}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct file *file)h]jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj<ubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubh)}(hhh]jI)}(hfileh]hfile}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj )}j ]j)}jj&sbc.mnt_want_write_fileasbuh1hhj<ubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj<ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj<ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj8ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h"get write access to a file's mounth]h$get write access to a file’s mount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct file *file`` the file who's mount on which to take a write **Description** This is like mnt_want_write, but if the file is already open for writing it skips incrementing mnt_writers (since the open file already has a reference) and instead only does the freeze protection and the check for emergency r/o remounts. This must be paired with mnt_drop_write_file.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjubj)}(hhh]j)}(hD``struct file *file`` the file who's mount on which to take a write h](j)}(h``struct file *file``h]j)}(hj h]hstruct file *file}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjubj)}(hhh]h)}(h-the file who's mount on which to take a writeh]h/the file who’s mount on which to take a write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj? h]h Description}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjubh)}(hXThis is like mnt_want_write, but if the file is already open for writing it skips incrementing mnt_writers (since the open file already has a reference) and instead only does the freeze protection and the check for emergency r/o remounts. This must be paired with mnt_drop_write_file.h]hXThis is like mnt_want_write, but if the file is already open for writing it skips incrementing mnt_writers (since the open file already has a reference) and instead only does the freeze protection and the check for emergency r/o remounts. This must be paired with mnt_drop_write_file.}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !mnt_put_write_access (C function)c.mnt_put_write_accesshNtauh1hhjVhhhNhNubj)}(hhh](j)}(h0void mnt_put_write_access (struct vfsmount *mnt)h]j)}(h/void mnt_put_write_access(struct vfsmount *mnt)h](jf)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM#ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhj hM#ubjC)}(hmnt_put_write_accessh]jI)}(hmnt_put_write_accessh]hmnt_put_write_access}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhj hM#ubj=)}(h(struct vfsmount *mnt)h]jC)}(hstruct vfsmount *mnth](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j)}jj sbc.mnt_put_write_accessasbuh1hhj ubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj !hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hmnth]hmnt}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubah}(h]h ]h"]h$]h&]j`jauh1j<hj hhhj hM#ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj| hhhj hM#ubah}(h]jw ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hM#hjy hhubjw)}(hhh]h)}(hgive up write access to a mounth]hgive up write access to a mount}(hjD!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM#hjA!hhubah}(h]h ]h"]h$]h&]uh1jvhjy hhhj hM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\!jj\!jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct vfsmount *mnt`` the mount on which to give up write access **Description** Tells the low-level filesystem that we are done performing writes to it. Must be matched with mnt_get_write_access() call above.h](h)}(h**Parameters**h]j)}(hjf!h]h Parameters}(hjh!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd!ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM'hj`!ubj)}(hhh]j)}(hD``struct vfsmount *mnt`` the mount on which to give up write access h](j)}(h``struct vfsmount *mnt``h]j)}(hj!h]hstruct vfsmount *mnt}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM$hj!ubj)}(hhh]h)}(h*the mount on which to give up write accessh]h*the mount on which to give up write access}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM$hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM$hj|!ubah}(h]h ]h"]h$]h&]uh1jhj`!ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM&hj`!ubh)}(hTells the low-level filesystem that we are done performing writes to it. Must be matched with mnt_get_write_access() call above.h]hTells the low-level filesystem that we are done performing writes to it. Must be matched with mnt_get_write_access() call above.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM%hj`!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j mnt_drop_write (C function)c.mnt_drop_writehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h*void mnt_drop_write (struct vfsmount *mnt)h]j)}(h)void mnt_drop_write(struct vfsmount *mnt)h](jf)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj"hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM3ubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj"hhhj"hM3ubjC)}(hmnt_drop_writeh]jI)}(hmnt_drop_writeh]hmnt_drop_write}(hj&"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj""ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj"hhhj"hM3ubj=)}(h(struct vfsmount *mnt)h]jC)}(hstruct vfsmount *mnth](j )}(hjh]hstruct}(hjB"hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj>"ubj2)}(h h]h }(hjO"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>"ubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hj`"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjb"modnameN classnameNjj )}j ]j)}jj("sbc.mnt_drop_writeasbuh1hhj>"ubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>"ubjI)}(hmnth]hmnt}(hj"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>"ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj:"ubah}(h]h ]h"]h$]h&]j`jauh1j<hj"hhhj"hM3ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj!hhhj"hM3ubah}(h]j!ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj"hM3hj!hhubjw)}(hhh]h)}(hgive up write access to a mounth]hgive up write access to a mount}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM3hj"hhubah}(h]h ]h"]h$]h&]uh1jvhj!hhhj"hM3ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct vfsmount *mnt`` the mount on which to give up write access **Description** Tells the low-level filesystem that we are done performing writes to it and also allows filesystem to be frozen again. Must be matched with mnt_want_write() call above.h](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM7hj"ubj)}(hhh]j)}(hD``struct vfsmount *mnt`` the mount on which to give up write access h](j)}(h``struct vfsmount *mnt``h]j)}(hj#h]hstruct vfsmount *mnt}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM4hj#ubj)}(hhh]h)}(h*the mount on which to give up write accessh]h*the mount on which to give up write access}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM4hj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hM4hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hjA#h]h Description}(hjC#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?#ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM6hj"ubh)}(hTells the low-level filesystem that we are done performing writes to it and also allows filesystem to be frozen again. Must be matched with mnt_want_write() call above.h]hTells the low-level filesystem that we are done performing writes to it and also allows filesystem to be frozen again. Must be matched with mnt_want_write() call above.}(hjW#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM5hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j vfs_create_mount (C function)c.vfs_create_mounthNtauh1hhjVhhhNhNubj)}(hhh](j)}(h:struct vfsmount * vfs_create_mount (struct fs_context *fc)h]j)}(h8struct vfsmount *vfs_create_mount(struct fs_context *fc)h](j )}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj#hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMubj2)}(h h]h }(hj#hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj#hhhj#hMubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj )}j ]j)}jvfs_create_mountsbc.vfs_create_mountasbuh1hhj#hhhj#hMubj2)}(h h]h }(hj#hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj#hhhj#hMubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMubjC)}(hvfs_create_mounth]jI)}(hj#h]hvfs_create_mount}(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj#ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj#hhhj#hMubj=)}(h(struct fs_context *fc)h]jC)}(hstruct fs_context *fch](j )}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj#ubj2)}(h h]h }(hj $hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj#ubh)}(hhh]jI)}(h fs_contexth]h fs_context}(hj$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj $modnameN classnameNjj )}j ]j#c.vfs_create_mountasbuh1hhj#ubj2)}(h h]h }(hj<$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj#ubj)}(hjh]h*}(hjJ$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjI)}(hfch]hfc}(hjW$hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj#ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj#ubah}(h]h ]h"]h$]h&]j`jauh1j<hj#hhhj#hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj~#hhhj#hMubah}(h]jy#ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj#hMhj{#hhubjw)}(hhh]h)}(h*Create a mount for a configured superblockh]h*Create a mount for a configured superblock}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj~$hhubah}(h]h ]h"]h$]h&]uh1jvhj{#hhhj#hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhjVhNhNubj)}(hX+**Parameters** ``struct fs_context *fc`` The configuration context with the superblock attached **Description** Create a mount to an already configured superblock. If necessary, the caller should invoke vfs_get_tree() before calling this. Note that this does not attach the mount to anything.h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj$ubj)}(hhh]j)}(hQ``struct fs_context *fc`` The configuration context with the superblock attached h](j)}(h``struct fs_context *fc``h]j)}(hj$h]hstruct fs_context *fc}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj$ubj)}(hhh]h)}(h6The configuration context with the superblock attachedh]h6The configuration context with the superblock attached}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubh)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj$ubh)}(hCreate a mount to an already configured superblock. If necessary, the caller should invoke vfs_get_tree() before calling this.h]hCreate a mount to an already configured superblock. If necessary, the caller should invoke vfs_get_tree() before calling this.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj$ubh)}(h5Note that this does not attach the mount to anything.h]h5Note that this does not attach the mount to anything.}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j path_is_mountpoint (C function)c.path_is_mountpointhNtauh1hhjVhhhNhNubj)}(hhh](j)}(h1bool path_is_mountpoint (const struct path *path)h]j)}(h0bool path_is_mountpoint(const struct path *path)h](jf)}(hjih]hbool}(hjQ%hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjM%hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMubj2)}(h h]h }(hj_%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjM%hhhj^%hMubjC)}(hpath_is_mountpointh]jI)}(hpath_is_mountpointh]hpath_is_mountpoint}(hjq%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjm%ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjM%hhhj^%hMubj=)}(h(const struct path *path)h]jC)}(hconst struct path *pathh](j )}(hjh]hconst}(hj%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubj )}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubh)}(hhh]jI)}(hpathh]hpath}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj )}j ]j)}jjs%sbc.path_is_mountpointasbuh1hhj%ubj2)}(h h]h }(hj%hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjI)}(hpathh]hpath}(hj&hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj%ubah}(h]h ]h"]h$]h&]j`jauh1j<hjM%hhhj^%hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjI%hhhj^%hMubah}(h]jD%ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj^%hMhjF%hhubjw)}(hhh]h)}(h2Check if path is a mount in the current namespace.h]h2Check if path is a mount in the current namespace.}(hj+&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj(&hhubah}(h]h ]h"]h$]h&]uh1jvhjF%hhhj^%hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjC&jjC&jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``const struct path *path`` path to check **Description** d_mountpoint() can only be used reliably to establish if a dentry is not mounted in any namespace and that common case is handled inline. d_mountpoint() isn't aware of the possibility there may be multiple mounts using a given dentry in a different namespace. This function checks if the passed in path is a mountpoint rather than the dentry alone.h](h)}(h**Parameters**h]j)}(hjM&h]h Parameters}(hjO&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK&ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjG&ubj)}(hhh]j)}(h*``const struct path *path`` path to check h](j)}(h``const struct path *path``h]j)}(hjl&h]hconst struct path *path}(hjn&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj&ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjf&ubj)}(hhh]h)}(h path to checkh]h path to check}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhjf&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjc&ubah}(h]h ]h"]h$]h&]uh1jhjG&ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhjG&ubj)}(hX\d_mountpoint() can only be used reliably to establish if a dentry is not mounted in any namespace and that common case is handled inline. d_mountpoint() isn't aware of the possibility there may be multiple mounts using a given dentry in a different namespace. This function checks if the passed in path is a mountpoint rather than the dentry alone.h]h)}(hX\d_mountpoint() can only be used reliably to establish if a dentry is not mounted in any namespace and that common case is handled inline. d_mountpoint() isn't aware of the possibility there may be multiple mounts using a given dentry in a different namespace. This function checks if the passed in path is a mountpoint rather than the dentry alone.h]hX^d_mountpoint() can only be used reliably to establish if a dentry is not mounted in any namespace and that common case is handled inline. d_mountpoint() isn’t aware of the possibility there may be multiple mounts using a given dentry in a different namespace. This function checks if the passed in path is a mountpoint rather than the dentry alone.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&hMhjG&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j may_umount_tree (C function)c.may_umount_treehNtauh1hhjVhhhNhNubj)}(hhh](j)}(h(int may_umount_tree (struct vfsmount *m)h]j)}(h'int may_umount_tree(struct vfsmount *m)h](jf)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj&hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM6ubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&hhhj'hM6ubjC)}(hmay_umount_treeh]jI)}(hmay_umount_treeh]hmay_umount_tree}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj&hhhj'hM6ubj=)}(h(struct vfsmount *m)h]jC)}(hstruct vfsmount *mh](j )}(hjh]hstruct}(hj3'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj/'ubj2)}(h h]h }(hj@'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/'ubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hjQ'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjN'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjS'modnameN classnameNjj )}j ]j)}jj'sbc.may_umount_treeasbuh1hhj/'ubj2)}(h h]h }(hjq'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/'ubjI)}(hj*6h]hm}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/'ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj+'ubah}(h]h ]h"]h$]h&]j`jauh1j<hj&hhhj'hM6ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj&hhhj'hM6ubah}(h]j&ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj'hM6hj&hhubjw)}(hhh]h)}(hcheck if a mount tree is busyh]hcheck if a mount tree is busy}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM6hj'hhubah}(h]h ]h"]h$]h&]uh1jvhj&hhhj'hM6ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct vfsmount *m`` root of mount tree **Description** This is called to check if a tree of mounts has any open files, pwds, chroots or sub mounts that are busy.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM:hj'ubj)}(hhh]j)}(h*``struct vfsmount *m`` root of mount tree h](j)}(h``struct vfsmount *m``h]j)}(hj'h]hstruct vfsmount *m}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM7hj'ubj)}(hhh]h)}(hroot of mount treeh]hroot of mount tree}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj (hM7hj (ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj (hM7hj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j)}(hj1(h]h Description}(hj3(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/(ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM9hj'ubh)}(hjThis is called to check if a tree of mounts has any open files, pwds, chroots or sub mounts that are busy.h]hjThis is called to check if a tree of mounts has any open files, pwds, chroots or sub mounts that are busy.}(hjG(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM8hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j may_umount (C function) c.may_umounthNtauh1hhjVhhhNhNubj)}(hhh](j)}(h%int may_umount (struct vfsmount *mnt)h]j)}(h$int may_umount(struct vfsmount *mnt)h](jf)}(hinth]hint}(hjv(hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjr(hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMRubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjr(hhhj(hMRubjC)}(h may_umounth]jI)}(h may_umounth]h may_umount}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjr(hhhj(hMRubj=)}(h(struct vfsmount *mnt)h]jC)}(hstruct vfsmount *mnth](j )}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(ubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hj(hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj )}j ]j)}jj(sb c.may_umountasbuh1hhj(ubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjI)}(hmnth]hmnt}(hj )hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj(ubah}(h]h ]h"]h$]h&]j`jauh1j<hjr(hhhj(hMRubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjn(hhhj(hMRubah}(h]ji(ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj(hMRhjk(hhubjw)}(hhh]h)}(hcheck if a mount point is busyh]hcheck if a mount point is busy}(hj6)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMRhj3)hhubah}(h]h ]h"]h$]h&]uh1jvhjk(hhhj(hMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjN)jjN)jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct vfsmount *mnt`` root of mount **Description** This is called to check if a mount point has any open files, pwds, chroots or sub mounts. If the mount has sub mounts this will return busy regardless of whether the sub mounts are busy. Doesn't take quota and stuff into account. IOW, in some cases it will give false negatives. The main reason why it's here is that we need a non-destructive way to look for easily umountable filesystems.h](h)}(h**Parameters**h]j)}(hjX)h]h Parameters}(hjZ)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMVhjR)ubj)}(hhh]j)}(h'``struct vfsmount *mnt`` root of mount h](j)}(h``struct vfsmount *mnt``h]j)}(hjw)h]hstruct vfsmount *mnt}(hjy)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju)ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMShjq)ubj)}(hhh]h)}(h root of mounth]h root of mount}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMShj)ubah}(h]h ]h"]h$]h&]uh1jhjq)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMShjn)ubah}(h]h ]h"]h$]h&]uh1jhjR)ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMUhjR)ubh)}(hThis is called to check if a mount point has any open files, pwds, chroots or sub mounts. If the mount has sub mounts this will return busy regardless of whether the sub mounts are busy.h]hThis is called to check if a mount point has any open files, pwds, chroots or sub mounts. If the mount has sub mounts this will return busy regardless of whether the sub mounts are busy.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMThjR)ubh)}(hDoesn't take quota and stuff into account. IOW, in some cases it will give false negatives. The main reason why it's here is that we need a non-destructive way to look for easily umountable filesystems.h]hDoesn’t take quota and stuff into account. IOW, in some cases it will give false negatives. The main reason why it’s here is that we need a non-destructive way to look for easily umountable filesystems.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMYhjR)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  clone_private_mount (C function)c.clone_private_mounthNtauh1hhjVhhhNhNubj)}(hhh](j)}(h?struct vfsmount * clone_private_mount (const struct path *path)h]j)}(h=struct vfsmount *clone_private_mount(const struct path *path)h](j )}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj*hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM= ubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*hhhj*hM= ubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hj%*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'*modnameN classnameNjj )}j ]j)}jclone_private_mountsbc.clone_private_mountasbuh1hhj*hhhj*hM= ubj2)}(h h]h }(hjF*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj*hhhj*hM= ubj)}(hjh]h*}(hjT*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hM= ubjC)}(hclone_private_mounth]jI)}(hjC*h]hclone_private_mount}(hje*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhja*ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj*hhhj*hM= ubj=)}(h(const struct path *path)h]jC)}(hconst struct path *pathh](j )}(hjh]hconst}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|*ubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|*ubj )}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|*ubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|*ubh)}(hhh]jI)}(hpathh]hpath}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj )}j ]jA*c.clone_private_mountasbuh1hhj|*ubj2)}(h h]h }(hj*hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|*ubjI)}(hpathh]hpath}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|*ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjx*ubah}(h]h ]h"]h$]h&]j`jauh1j<hj*hhhj*hM= ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj)hhhj*hM= ubah}(h]j)ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj*hM= hj)hhubjw)}(hhh]h)}(h create a private clone of a pathh]h create a private clone of a path}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM= hj+hhubah}(h]h ]h"]h$]h&]uh1jvhj)hhhj*hM= ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4+jj4+jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``const struct path *path`` path to clone **Description** This creates a new vfsmount, which will be the clone of **path**. The new mount will not be attached anywhere in the namespace and will be private (i.e. changes to the originating mount won't be propagated into this). This assumes caller has called or done the equivalent of may_mount(). Release with mntput().h](h)}(h**Parameters**h]j)}(hj>+h]h Parameters}(hj@+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<+ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMA hj8+ubj)}(hhh]j)}(h*``const struct path *path`` path to clone h](j)}(h``const struct path *path``h]j)}(hj]+h]hconst struct path *path}(hj_+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[+ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM> hjW+ubj)}(hhh]h)}(h path to cloneh]h path to clone}(hjv+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr+hM> hjs+ubah}(h]h ]h"]h$]h&]uh1jhjW+ubeh}(h]h ]h"]h$]h&]uh1jhjr+hM> hjT+ubah}(h]h ]h"]h$]h&]uh1jhj8+ubh)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM@ hj8+ubh)}(hThis creates a new vfsmount, which will be the clone of **path**. The new mount will not be attached anywhere in the namespace and will be private (i.e. changes to the originating mount won't be propagated into this).h](h8This creates a new vfsmount, which will be the clone of }(hj+hhhNhNubj)}(h**path**h]hpath}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh. The new mount will not be attached anywhere in the namespace and will be private (i.e. changes to the originating mount won’t be propagated into this).}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chM? hj8+ubh)}(hEThis assumes caller has called or done the equivalent of may_mount().h]hEThis assumes caller has called or done the equivalent of may_mount().}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMC hj8+ubh)}(hRelease with mntput().h]hRelease with mntput().}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chME hj8+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j mnt_set_expiry (C function)c.mnt_set_expiryhNtauh1hhjVhhhNhNubj)}(hhh](j)}(hIvoid mnt_set_expiry (struct vfsmount *mnt, struct list_head *expiry_list)h]j)}(hHvoid mnt_set_expiry(struct vfsmount *mnt, struct list_head *expiry_list)h](jf)}(hvoidh]hvoid}(hj ,hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ,hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMOubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ,hhhj,hMOubjC)}(hmnt_set_expiryh]jI)}(hmnt_set_expiryh]hmnt_set_expiry}(hj.,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj*,ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj ,hhhj,hMOubj=)}(h5(struct vfsmount *mnt, struct list_head *expiry_list)h](jC)}(hstruct vfsmount *mnth](j )}(hjh]hstruct}(hjJ,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjF,ubj2)}(h h]h }(hjW,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjF,ubh)}(hhh]jI)}(hvfsmounth]hvfsmount}(hjh,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhje,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjj,modnameN classnameNjj )}j ]j)}jj0,sbc.mnt_set_expiryasbuh1hhjF,ubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjF,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF,ubjI)}(hmnth]hmnt}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjF,ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjB,ubjC)}(hstruct list_head *expiry_listh](j )}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj,ubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubh)}(hhh]jI)}(h list_headh]h list_head}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj )}j ]j,c.mnt_set_expiryasbuh1hhj,ubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj,ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjI)}(h expiry_listh]h expiry_list}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj,ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjB,ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj ,hhhj,hMOubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj,hhhj,hMOubah}(h]j,ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj,hMOhj,hhubjw)}(hhh]h)}(h!Put a mount on an expiration listh]h!Put a mount on an expiration list}(hj=-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMOhj:-hhubah}(h]h ]h"]h$]h&]uh1jvhj,hhhj,hMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjU-jjU-jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct vfsmount *mnt`` The mount to list. ``struct list_head *expiry_list`` The list to add the mount to.h](h)}(h**Parameters**h]j)}(hj_-h]h Parameters}(hja-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]-ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMShjY-ubj)}(hhh](j)}(h,``struct vfsmount *mnt`` The mount to list. h](j)}(h``struct vfsmount *mnt``h]j)}(hj~-h]hstruct vfsmount *mnt}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMPhjx-ubj)}(hhh]h)}(hThe mount to list.h]hThe mount to list.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMPhj-ubah}(h]h ]h"]h$]h&]uh1jhjx-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMPhju-ubj)}(h?``struct list_head *expiry_list`` The list to add the mount to.h](j)}(h!``struct list_head *expiry_list``h]j)}(hj-h]hstruct list_head *expiry_list}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMRhj-ubj)}(hhh]h)}(hThe list to add the mount to.h]hThe list to add the mount to.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:101: ./fs/namespace.chMQhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMRhju-ubeh}(h]h ]h"]h$]h&]uh1jhjY-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubeh}(h]other-functionsah ]h"]other functionsah$]h&]uh1hhhhhhhhK3ubeh}(h] the-linux-vfsah ]h"] the linux vfsah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hThe proc filesystemh]hThe proc filesystem}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhKiubh)}(hhh](h)}(hsysctl interfaceh]hsysctl interface}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhKlubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j proc_dostring (C function)c.proc_dostringhNtauh1hhj.hhhNhNubj)}(hhh](j)}(hdint proc_dostring (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hcint proc_dostring(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hjC.hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj?.hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKubj2)}(h h]h }(hjR.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj?.hhhjQ.hKubjC)}(h proc_dostringh]jI)}(h proc_dostringh]h proc_dostring}(hjd.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`.ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj?.hhhjQ.hKubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hj.hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|.ubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|.ubj )}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj|.ubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|.ubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj )}j ]j)}jjf.sbc.proc_dostringasbuh1hhj|.ubj2)}(h h]h }(hj.hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj|.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|.ubjI)}(htableh]htable}(hj.hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|.ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjx.ubjC)}(hint dirh](jf)}(hinth]hint}(hj /hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj /ubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj /ubjI)}(hdirh]hdir}(hj)/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj /ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjx.ubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hjB/hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj>/ubj2)}(h h]h }(hjP/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>/ubj)}(hjh]h*}(hj^/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>/ubjI)}(hbufferh]hbuffer}(hjk/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>/ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjx.ubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hj/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj )}j ]j.c.proc_dostringasbuh1hhj/ubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjI)}(hlenph]hlenp}(hj/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjx.ubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hj/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj )}j ]j.c.proc_dostringasbuh1hhj/ubj2)}(h h]h }(hj/hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjI)}(hpposh]hppos}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjx.ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj?.hhhjQ.hKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj;.hhhjQ.hKubah}(h]j6.ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjQ.hKhj8.hhubjw)}(hhh]h)}(hread a string sysctlh]hread a string sysctl}(hj?0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj<0hhubah}(h]h ]h"]h$]h&]uh1jvhj8.hhhjQ.hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjW0jjW0jjjuh1jhhhj.hNhNubj)}(hXo**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** Reads/writes a string from/to the user buffer. If the kernel buffer provided is not large enough to hold the string, the string is truncated. The copied string is ``NULL-terminated``. If the string is being read by the user process, it is copied and a newline '\n' is added. It is truncated if the buffer is not large enough. **Return** ``0`` on success.h](h)}(h**Parameters**h]j)}(hja0h]h Parameters}(hjc0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_0ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj[0ubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hj0h]hconst struct ctl_table *table}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhjz0ubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhjz0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjw0ubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hj0h]hint dir}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj0ubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh& if this is a write to the sysctl file}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjw0ubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hj1h]h void *buffer}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj0ubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hKhjw0ubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hj91h]h size_t *lenp}(hj;1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj71ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj31ubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjR1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN1hKhjO1ubah}(h]h ]h"]h$]h&]uh1jhj31ubeh}(h]h ]h"]h$]h&]uh1jhjN1hKhjw0ubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjr1h]h loff_t *ppos}(hjt1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp1ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhjl1ubj)}(hhh]h)}(h file positionh]h file position}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhjl1ubeh}(h]h ]h"]h$]h&]uh1jhj1hKhjw0ubeh}(h]h ]h"]h$]h&]uh1jhj[0ubh)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj[0ubh)}(hXEReads/writes a string from/to the user buffer. If the kernel buffer provided is not large enough to hold the string, the string is truncated. The copied string is ``NULL-terminated``. If the string is being read by the user process, it is copied and a newline '\n' is added. It is truncated if the buffer is not large enough.h](hReads/writes a string from/to the user buffer. If the kernel buffer provided is not large enough to hold the string, the string is truncated. The copied string is }(hj1hhhNhNubj)}(h``NULL-terminated``h]hNULL-terminated}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh. If the string is being read by the user process, it is copied and a newline ‘n’ is added. It is truncated if the buffer is not large enough.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj[0ubh)}(h **Return**h]j)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj[0ubh)}(h``0`` on success.h](j)}(h``0``h]h0}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh on success.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chKhj[0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j proc_dobool (C function) c.proc_doboolhNtauh1hhj.hhhNhNubj)}(hhh](j)}(hbint proc_dobool (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(haint proc_dobool(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hj92hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj52hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMubj2)}(h h]h }(hjH2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj52hhhjG2hMubjC)}(h proc_doboolh]jI)}(h proc_doboolh]h proc_dobool}(hjZ2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjV2ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj52hhhjG2hMubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjv2hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjr2ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjr2ubj )}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjr2ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjr2ubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj )}j ]j)}jj\2sb c.proc_doboolasbuh1hhjr2ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjr2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr2ubjI)}(htableh]htable}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjr2ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjn2ubjC)}(hint dirh](jf)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj2ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj2ubjI)}(hdirh]hdir}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj2ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjn2ubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hj83hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj43ubj2)}(h h]h }(hjF3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj43ubj)}(hjh]h*}(hjT3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj43ubjI)}(hbufferh]hbuffer}(hja3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj43ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjn2ubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hj}3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjz3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj )}j ]j2 c.proc_doboolasbuh1hhjv3ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjv3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv3ubjI)}(hlenph]hlenp}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjv3ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjn2ubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj )}j ]j2 c.proc_doboolasbuh1hhj3ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjI)}(hpposh]hppos}(hj 4hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjn2ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj52hhhjG2hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj12hhhjG2hMubah}(h]j,2ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjG2hMhj.2hhubjw)}(hhh]h)}(hread/write a boolh]hread/write a bool}(hj54hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhj24hhubah}(h]h ]h"]h$]h&]uh1jvhj.2hhhjG2hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjM4jjM4jjjuh1jhhhj.hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** Reads/writes one integer value from/to the user buffer, treated as an ASCII string. table->data must point to a bool variable and table->maxlen must be sizeof(bool). **Return** ``0`` on success.h](h)}(h**Parameters**h]j)}(hjW4h]h Parameters}(hjY4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU4ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjQ4ubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjv4h]hconst struct ctl_table *table}(hjx4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjp4ubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjp4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjm4ubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hj4h]hint dir}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhj4ubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh& if this is a write to the sysctl file}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjm4ubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hj4h]h void *buffer}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhj4ubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 5hMhj 5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj 5hMhjm4ubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hj/5h]h size_t *lenp}(hj15hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhj)5ubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjH5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD5hMhjE5ubah}(h]h ]h"]h$]h&]uh1jhj)5ubeh}(h]h ]h"]h$]h&]uh1jhjD5hMhjm4ubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjh5h]h loff_t *ppos}(hjj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjb5ubj)}(hhh]h)}(h file positionh]h file position}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}5hMhj~5ubah}(h]h ]h"]h$]h&]uh1jhjb5ubeh}(h]h ]h"]h$]h&]uh1jhj}5hMhjm4ubeh}(h]h ]h"]h$]h&]uh1jhjQ4ubh)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjQ4ubh)}(hSReads/writes one integer value from/to the user buffer, treated as an ASCII string.h]hSReads/writes one integer value from/to the user buffer, treated as an ASCII string.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjQ4ubh)}(hQtable->data must point to a bool variable and table->maxlen must be sizeof(bool).h]hQtable->data must point to a bool variable and table->maxlen must be sizeof(bool).}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM hjQ4ubh)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM hjQ4ubh)}(h``0`` on success.h](j)}(h``0``h]h0}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh on success.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM hjQ4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j proc_dointvec (C function)c.proc_dointvechNtauh1hhj.hhhNhNubj)}(hhh](j)}(hdint proc_dointvec (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hcint proc_dointvec(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hj,6hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj(6hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM(ubj2)}(h h]h }(hj;6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(6hhhj:6hM(ubjC)}(h proc_dointvech]jI)}(h proc_dointvech]h proc_dointvec}(hjM6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjI6ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj(6hhhj:6hM(ubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hji6hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhje6ubj2)}(h h]h }(hjv6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hje6ubj )}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhje6ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hje6ubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj )}j ]j)}jjO6sbc.proc_dointvecasbuh1hhje6ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hje6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje6ubjI)}(htableh]htable}(hj6hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhje6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhja6ubjC)}(hint dirh](jf)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj6ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubjI)}(hdirh]hdir}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhja6ubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hj+7hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj'7ubj2)}(h h]h }(hj97hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj'7ubj)}(hjh]h*}(hjG7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'7ubjI)}(hbufferh]hbuffer}(hjT7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'7ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhja6ubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hjp7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjm7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjr7modnameN classnameNjj )}j ]j6c.proc_dointvecasbuh1hhji7ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hji7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji7ubjI)}(hlenph]hlenp}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhji7ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhja6ubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj )}j ]j6c.proc_dointvecasbuh1hhj7ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjI)}(hpposh]hppos}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhja6ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj(6hhhj:6hM(ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj$6hhhj:6hM(ubah}(h]j6ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj:6hM(hj!6hhubjw)}(hhh]h)}(hread a vector of integersh]hread a vector of integers}(hj(8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM(hj%8hhubah}(h]h ]h"]h$]h&]uh1jvhj!6hhhj:6hM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@8jj@8jjjuh1jhhhj.hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** Reads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. **Return** ``0`` on success.h](h)}(h**Parameters**h]j)}(hjJ8h]h Parameters}(hjL8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH8ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM,hjD8ubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hji8h]hconst struct ctl_table *table}(hjk8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg8ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM)hjc8ubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~8hM)hj8ubah}(h]h ]h"]h$]h&]uh1jhjc8ubeh}(h]h ]h"]h$]h&]uh1jhj~8hM)hj`8ubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hj8h]hint dir}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM*hj8ubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh& if this is a write to the sysctl file}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hM*hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM*hj`8ubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hj8h]h void *buffer}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM+hj8ubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM+hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM+hj`8ubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hj"9h]h size_t *lenp}(hj$9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM,hj9ubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hj;9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj79hM,hj89ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj79hM,hj`8ubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hj[9h]h loff_t *ppos}(hj]9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM-hjU9ubj)}(hhh]h)}(h file positionh]h file position}(hjt9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp9hM-hjq9ubah}(h]h ]h"]h$]h&]uh1jhjU9ubeh}(h]h ]h"]h$]h&]uh1jhjp9hM-hj`8ubeh}(h]h ]h"]h$]h&]uh1jhjD8ubh)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM/hjD8ubh)}(hyReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string.h]hyReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM.hjD8ubh)}(h **Return**h]j)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM1hjD8ubh)}(h``0`` on success.h](j)}(h``0``h]h0}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh on success.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM2hjD8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j proc_douintvec (C function)c.proc_douintvechNtauh1hhj.hhhNhNubj)}(hhh](j)}(heint proc_douintvec (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hdint proc_douintvec(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj :hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM<ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj :hhhj:hM<ubjC)}(hproc_douintvech]jI)}(hproc_douintvech]hproc_douintvec}(hj1:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-:ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj :hhhj:hM<ubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjM:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjI:ubj2)}(h h]h }(hjZ:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjI:ubj )}(hjh]hstruct}(hjh:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjI:ubj2)}(h h]h }(hju:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjI:ubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj )}j ]j)}jj3:sbc.proc_douintvecasbuh1hhjI:ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjI:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI:ubjI)}(htableh]htable}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjI:ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjE:ubjC)}(hint dirh](jf)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj:ubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj:ubjI)}(hdirh]hdir}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjE:ubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ;ubj2)}(h h]h }(hj;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ;ubj)}(hjh]h*}(hj+;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ;ubjI)}(hbufferh]hbuffer}(hj8;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ;ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjE:ubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hjT;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQ;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjV;modnameN classnameNjj )}j ]j:c.proc_douintvecasbuh1hhjM;ubj2)}(h h]h }(hjr;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjM;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM;ubjI)}(hlenph]hlenp}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjM;ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjE:ubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj )}j ]j:c.proc_douintvecasbuh1hhj;ubj2)}(h h]h }(hj;hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjI)}(hpposh]hppos}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj;ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjE:ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj :hhhj:hM<ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj:hhhj:hM<ubah}(h]j:ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj:hM<hj:hhubjw)}(hhh]h)}(h"read a vector of unsigned integersh]h"read a vector of unsigned integers}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM<hj <hhubah}(h]h ]h"]h$]h&]uh1jvhj:hhhj:hM<ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$<jj$<jjjuh1jhhhj.hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** Reads/writes up to table->maxlen/sizeof(unsigned int) unsigned integer values from/to the user buffer, treated as an ASCII string. **Return** ``0`` on success.h](h)}(h**Parameters**h]j)}(hj.<h]h Parameters}(hj0<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,<ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM@hj(<ubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjM<h]hconst struct ctl_table *table}(hjO<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM=hjG<ubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjf<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb<hM=hjc<ubah}(h]h ]h"]h$]h&]uh1jhjG<ubeh}(h]h ]h"]h$]h&]uh1jhjb<hM=hjD<ubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hj<h]hint dir}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM>hj<ubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh& if this is a write to the sysctl file}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hM>hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM>hjD<ubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hj<h]h void *buffer}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM?hj<ubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM?hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM?hjD<ubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hj=h]h size_t *lenp}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM@hj=ubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM@hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM@hjD<ubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hj?=h]h loff_t *ppos}(hjA=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj==ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMAhj9=ubj)}(hhh]h)}(h file positionh]h file position}(hjX=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT=hMAhjU=ubah}(h]h ]h"]h$]h&]uh1jhj9=ubeh}(h]h ]h"]h$]h&]uh1jhjT=hMAhjD<ubeh}(h]h ]h"]h$]h&]uh1jhj(<ubh)}(h**Description**h]j)}(hjz=h]h Description}(hj|=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx=ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMChj(<ubh)}(hReads/writes up to table->maxlen/sizeof(unsigned int) unsigned integer values from/to the user buffer, treated as an ASCII string.h]hReads/writes up to table->maxlen/sizeof(unsigned int) unsigned integer values from/to the user buffer, treated as an ASCII string.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMBhj(<ubh)}(h **Return**h]j)}(hj=h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMEhj(<ubh)}(h``0`` on success.h](j)}(h``0``h]h0}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh on success.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMFhj(<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !proc_dointvec_minmax (C function)c.proc_dointvec_minmaxhNtauh1hhj.hhhNhNubj)}(hhh](j)}(hkint proc_dointvec_minmax (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hjint proc_dointvec_minmax(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj=hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMPubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=hhhj>hMPubjC)}(hproc_dointvec_minmaxh]jI)}(hproc_dointvec_minmaxh]hproc_dointvec_minmax}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj=hhhj>hMPubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hj1>hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj->ubj2)}(h h]h }(hj>>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj->ubj )}(hjh]hstruct}(hjL>hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj->ubj2)}(h h]h }(hjY>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj->ubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hjj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjg>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjl>modnameN classnameNjj )}j ]j)}jj>sbc.proc_dointvec_minmaxasbuh1hhj->ubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj->ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj->ubjI)}(htableh]htable}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj->ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj)>ubjC)}(hint dirh](jf)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj>ubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubjI)}(hdirh]hdir}(hj>hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj)>ubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj>ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj>ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjI)}(hbufferh]hbuffer}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj>ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj)>ubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hj8?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:?modnameN classnameNjj )}j ]j>c.proc_dointvec_minmaxasbuh1hhj1?ubj2)}(h h]h }(hjV?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1?ubj)}(hjh]h*}(hjd?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1?ubjI)}(hlenph]hlenp}(hjq?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj1?ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj)>ubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj )}j ]j>c.proc_dointvec_minmaxasbuh1hhj?ubj2)}(h h]h }(hj?hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjI)}(hpposh]hppos}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj?ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj)>ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj=hhhj>hMPubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj=hhhj>hMPubah}(h]j=ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj>hMPhj=hhubjw)}(hhh]h)}(h-read a vector of integers with min/max valuesh]h-read a vector of integers with min/max values}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMPhj?hhubah}(h]h ]h"]h$]h&]uh1jvhj=hhhj>hMPubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1jhhhj.hNhNubj)}(hXa**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** Reads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. This routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). **Return** ``0`` on success or -EINVAL when the range check fails and SYSCTL_USER_TO_KERN(dir) == trueh](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMThj @ubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hj1@h]hconst struct ctl_table *table}(hj3@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/@ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMQhj+@ubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjJ@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF@hMQhjG@ubah}(h]h ]h"]h$]h&]uh1jhj+@ubeh}(h]h ]h"]h$]h&]uh1jhjF@hMQhj(@ubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hjj@h]hint dir}(hjl@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh@ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMRhjd@ubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh& if this is a write to the sysctl file}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hMRhj@ubah}(h]h ]h"]h$]h&]uh1jhjd@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMRhj(@ubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hj@h]h void *buffer}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMShj@ubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMShj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMShj(@ubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hj@h]h size_t *lenp}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMThj@ubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMThjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMThj(@ubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hj#Ah]h loff_t *ppos}(hj%AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Aubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMUhjAubj)}(hhh]h)}(h file positionh]h file position}(hjmaxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string.h]hyReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string.}(hjtAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMVhj @ubh)}(hrThis routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max).h]hrThis routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max).}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMYhj @ubh)}(h **Return**h]j)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM\hj @ubh)}(h[``0`` on success or -EINVAL when the range check fails and SYSCTL_USER_TO_KERN(dir) == trueh](j)}(h``0``h]h0}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubhV on success or -EINVAL when the range check fails and SYSCTL_USER_TO_KERN(dir) == true}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM]hj @ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "proc_douintvec_minmax (C function)c.proc_douintvec_minmaxhNtauh1hhj.hhhNhNubj)}(hhh](j)}(hlint proc_douintvec_minmax (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hkint proc_douintvec_minmax(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjAhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAhhhjAhMhubjC)}(hproc_douintvec_minmaxh]jI)}(hproc_douintvec_minmaxh]hproc_douintvec_minmax}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjAhhhjAhMhubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hj$BhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj Bubj2)}(h h]h }(hj1BhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Bubj )}(hjh]hstruct}(hj?BhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj Bubj2)}(h h]h }(hjLBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Bubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hj]BhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_BmodnameN classnameNjj )}j ]j)}jj Bsbc.proc_douintvec_minmaxasbuh1hhj Bubj2)}(h h]h }(hj}BhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Bubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj BubjI)}(htableh]htable}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Bubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(hint dirh](jf)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjBubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubjI)}(hdirh]hdir}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjBubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjI)}(hbufferh]hbuffer}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hj+ChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(Cubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-CmodnameN classnameNjj )}j ]jyBc.proc_douintvec_minmaxasbuh1hhj$Cubj2)}(h h]h }(hjIChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj$Cubj)}(hjh]h*}(hjWChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$CubjI)}(hlenph]hlenp}(hjdChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$Cubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}Cubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj )}j ]jyBc.proc_douintvec_minmaxasbuh1hhjyCubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyCubjI)}(hpposh]hppos}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyCubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjBubeh}(h]h ]h"]h$]h&]j`jauh1j<hjAhhhjAhMhubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjAhhhjAhMhubah}(h]jAah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjAhMhhjAhhubjw)}(hhh]h)}(h2read a vector of unsigned ints with min/max valuesh]h2read a vector of unsigned ints with min/max values}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhhjChhubah}(h]h ]h"]h$]h&]uh1jvhjAhhhjAhMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhj.hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** Reads/writes up to table->maxlen/sizeof(unsigned int) unsigned integer values from/to the user buffer, treated as an ASCII string. Negative strings are not allowed. When changing the kernel variable, this routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). And Check that the values are less than UINT_MAX to avoid having to support wrap around uses from userspace. **Return** ``0`` on success or -ERANGE when range check failes and SYSCTL_USER_TO_KERN(dir) == trueh](h)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMlhjCubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hj$Dh]hconst struct ctl_table *table}(hj&DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Dubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMihjDubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj=DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9DhMihj:Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj9DhMihjDubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hj]Dh]hint dir}(hj_DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Dubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMjhjWDubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjzDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvDubh& if this is a write to the sysctl file}(hjvDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrDhMjhjsDubah}(h]h ]h"]h$]h&]uh1jhjWDubeh}(h]h ]h"]h$]h&]uh1jhjrDhMjhjDubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjDh]h void *buffer}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMkhjDubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMkhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMkhjDubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjDh]h size_t *lenp}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMlhjDubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMlhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMlhjDubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjEh]h loff_t *ppos}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMmhjEubj)}(hhh]h)}(h file positionh]h file position}(hj/EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+EhMmhj,Eubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj+EhMmhjDubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j)}(hjQEh]h Description}(hjSEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOEubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMohjCubh)}(hReads/writes up to table->maxlen/sizeof(unsigned int) unsigned integer values from/to the user buffer, treated as an ASCII string. Negative strings are not allowed.h]hReads/writes up to table->maxlen/sizeof(unsigned int) unsigned integer values from/to the user buffer, treated as an ASCII string. Negative strings are not allowed.}(hjgEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMnhjCubh)}(hXWhen changing the kernel variable, this routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). And Check that the values are less than UINT_MAX to avoid having to support wrap around uses from userspace.h]hXWhen changing the kernel variable, this routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). And Check that the values are less than UINT_MAX to avoid having to support wrap around uses from userspace.}(hjvEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMrhjCubh)}(h **Return**h]j)}(hjEh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMwhjCubh)}(hX``0`` on success or -ERANGE when range check failes and SYSCTL_USER_TO_KERN(dir) == trueh](j)}(h``0``h]h0}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubhS on success or -ERANGE when range check failes and SYSCTL_USER_TO_KERN(dir) == true}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMxhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  proc_dou8vec_minmax (C function)c.proc_dou8vec_minmaxhNtauh1hhj.hhhNhNubj)}(hhh](j)}(hjint proc_dou8vec_minmax (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hiint proc_dou8vec_minmax(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjEhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEhhhjEhMubjC)}(hproc_dou8vec_minmaxh]jI)}(hproc_dou8vec_minmaxh]hproc_dou8vec_minmax}(hjEhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjEhhhjEhMubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjFhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFubj2)}(h h]h }(hj$FhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubj )}(hjh]hstruct}(hj2FhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFubj2)}(h h]h }(hj?FhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hjPFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRFmodnameN classnameNjj )}j ]j)}jjEsbc.proc_dou8vec_minmaxasbuh1hhjFubj2)}(h h]h }(hjpFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubj)}(hjh]h*}(hj~FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjI)}(htableh]htable}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(hint dirh](jf)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjFubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubjI)}(hdirh]hdir}(hjFhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjFubj2)}(h h]h }(hjFhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjFubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjI)}(hbufferh]hbuffer}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj GmodnameN classnameNjj )}j ]jlFc.proc_dou8vec_minmaxasbuh1hhjGubj2)}(h h]h }(hjah"]h$]h&]uh1j1hjGubj)}(hjh]h*}(hjJGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjI)}(hlenph]hlenp}(hjWGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjsGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjuGmodnameN classnameNjj )}j ]jlFc.proc_dou8vec_minmaxasbuh1hhjlGubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjlGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlGubjI)}(hpposh]hppos}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjlGubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubeh}(h]h ]h"]h$]h&]j`jauh1j<hjEhhhjEhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjEhhhjEhMubah}(h]jEah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjEhMhjEhhubjw)}(hhh]h)}(h3read a vector of unsigned chars with min/max valuesh]h3read a vector of unsigned chars with min/max values}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjGhhubah}(h]h ]h"]h$]h&]uh1jvhjEhhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1jhhhj.hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** Reads/writes up to table->maxlen/sizeof(u8) unsigned chars values from/to the user buffer, treated as an ASCII string. Negative strings are not allowed. This routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). **Return** ``0`` on success or an error on SYSCTL_USER_TO_KERN(dir) == true and the range check fails.h](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjGubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjHh]hconst struct ctl_table *table}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjHubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj0HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,HhMhj-Hubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhj,HhMhjHubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hjPHh]hint dir}(hjRHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjJHubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjmHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiHubh& if this is a write to the sysctl file}(hjiHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjeHhMhjfHubah}(h]h ]h"]h$]h&]uh1jhjJHubeh}(h]h ]h"]h$]h&]uh1jhjeHhMhjHubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjHh]h void *buffer}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjHubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjHubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjHh]h size_t *lenp}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjHubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjHubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hj Ih]h loff_t *ppos}(hj IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjIubj)}(hhh]h)}(h file positionh]h file position}(hj"IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjHubeh}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjDIh]h Description}(hjFIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBIubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjGubh)}(hReads/writes up to table->maxlen/sizeof(u8) unsigned chars values from/to the user buffer, treated as an ASCII string. Negative strings are not allowed.h]hReads/writes up to table->maxlen/sizeof(u8) unsigned chars values from/to the user buffer, treated as an ASCII string. Negative strings are not allowed.}(hjZIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjGubh)}(hrThis routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max).h]hrThis routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max).}(hjiIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjGubh)}(h **Return**h]j)}(hjzIh]hReturn}(hj|IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxIubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjGubh)}(h[``0`` on success or an error on SYSCTL_USER_TO_KERN(dir) == true and the range check fails.h](j)}(h``0``h]h0}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubhV on success or an error on SYSCTL_USER_TO_KERN(dir) == true and the range check fails.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #proc_doulongvec_minmax (C function)c.proc_doulongvec_minmaxhNtauh1hhj.hhhNhNubj)}(hhh](j)}(hmint proc_doulongvec_minmax (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hlint proc_doulongvec_minmax(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjIhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM2ubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjIhhhjIhM2ubjC)}(hproc_doulongvec_minmaxh]jI)}(hproc_doulongvec_minmaxh]hproc_doulongvec_minmax}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjIubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjIhhhjIhM2ubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hj JhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj )}(hjh]hstruct}(hj%JhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hj2JhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hjCJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@Jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEJmodnameN classnameNjj )}j ]j)}jjIsbc.proc_doulongvec_minmaxasbuh1hhjJubj2)}(h h]h }(hjcJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjqJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(htableh]htable}(hj~JhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjJubjC)}(hint dirh](jf)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjJubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubjI)}(hdirh]hdir}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjJubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjJubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(hbufferh]hbuffer}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjJubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj )}j ]j_Jc.proc_doulongvec_minmaxasbuh1hhj Kubj2)}(h h]h }(hj/KhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj Kubj)}(hjh]h*}(hj=KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj KubjI)}(hlenph]hlenp}(hjJKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj Kubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjJubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjfKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhKmodnameN classnameNjj )}j ]j_Jc.proc_doulongvec_minmaxasbuh1hhj_Kubj2)}(h h]h }(hjKhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_Kubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_KubjI)}(hpposh]hppos}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj_Kubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjJubeh}(h]h ]h"]h$]h&]j`jauh1j<hjIhhhjIhM2ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjIhhhjIhM2ubah}(h]jIah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjIhM2hjIhhubjw)}(hhh]h)}(h2read a vector of long integers with min/max valuesh]h2read a vector of long integers with min/max values}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM2hjKhhubah}(h]h ]h"]h$]h&]uh1jvhjIhhhjIhM2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1jhhhj.hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** Reads/writes up to table->maxlen/sizeof(unsigned long) unsigned long values from/to the user buffer, treated as an ASCII string. This routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). **Return** ``0`` on success.h](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM6hjKubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hj Lh]hconst struct ctl_table *table}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM3hjLubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj#LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM3hj Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM3hjLubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hjCLh]hint dir}(hjELhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjALubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM4hj=Lubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hj`LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Lubh& if this is a write to the sysctl file}(hj\LhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjXLhM4hjYLubah}(h]h ]h"]h$]h&]uh1jhj=Lubeh}(h]h ]h"]h$]h&]uh1jhjXLhM4hjLubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjLh]h void *buffer}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM5hjLubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM5hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM5hjLubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjLh]h size_t *lenp}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM6hjLubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM6hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM6hjLubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjLh]h loff_t *ppos}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM7hjLubj)}(hhh]h)}(h file positionh]h file position}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhM7hjMubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjMhM7hjLubeh}(h]h ]h"]h$]h&]uh1jhjKubh)}(h**Description**h]j)}(hj7Mh]h Description}(hj9MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Mubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM9hjKubh)}(hReads/writes up to table->maxlen/sizeof(unsigned long) unsigned long values from/to the user buffer, treated as an ASCII string.h]hReads/writes up to table->maxlen/sizeof(unsigned long) unsigned long values from/to the user buffer, treated as an ASCII string.}(hjMMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM8hjKubh)}(hrThis routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max).h]hrThis routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max).}(hj\MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM;hjKubh)}(h **Return**h]j)}(hjmMh]hReturn}(hjoMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkMubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM>hjKubh)}(h``0`` on success.h](j)}(h``0``h]h0}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh on success.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chM?hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !proc_do_large_bitmap (C function)c.proc_do_large_bitmaphNtauh1hhj.hhhNhNubj)}(hhh](j)}(hkint proc_do_large_bitmap (const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hjint proc_do_large_bitmap(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jf)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjMhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMbubj2)}(h h]h }(hjMhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMhhhjMhMbubjC)}(hproc_do_large_bitmaph]jI)}(hproc_do_large_bitmaph]hproc_do_large_bitmap}(hjMhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjMhhhjMhMbubj=)}(hR(const struct ctl_table *table, int dir, void *buffer, size_t *lenp, loff_t *ppos)h](jC)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjMhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjMubj2)}(h h]h }(hj NhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMubj )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjMubj2)}(h h]h }(hj%NhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMubh)}(hhh]jI)}(h ctl_tableh]h ctl_table}(hj6NhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3Nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8NmodnameN classnameNjj )}j ]j)}jjMsbc.proc_do_large_bitmapasbuh1hhjMubj2)}(h h]h }(hjVNhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMubj)}(hjh]h*}(hjdNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjI)}(htableh]htable}(hjqNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjMubjC)}(hint dirh](jf)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjNubj2)}(h h]h }(hjNhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjNubjI)}(hdirh]hdir}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjNubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjMubjC)}(h void *bufferh](jf)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjNubj2)}(h h]h }(hjNhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjI)}(hbufferh]hbuffer}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjNubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjMubjC)}(h size_t *lenph](h)}(hhh]jI)}(hsize_th]hsize_t}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj )}j ]jRNc.proc_do_large_bitmapasbuh1hhjNubj2)}(h h]h }(hj"OhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjNubj)}(hjh]h*}(hj0OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjI)}(hlenph]hlenp}(hj=OhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjNubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjMubjC)}(h loff_t *pposh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjYOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[OmodnameN classnameNjj )}j ]jRNc.proc_do_large_bitmapasbuh1hhjROubj2)}(h h]h }(hjwOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjROubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjROubjI)}(hpposh]hppos}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjROubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjMubeh}(h]h ]h"]h$]h&]j`jauh1j<hjMhhhjMhMbubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjMhhhjMhMbubah}(h]jMah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjMhMbhjMhhubjw)}(hhh]h)}(h!read/write from/to a large bitmaph]h!read/write from/to a large bitmap}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMbhjOhhubah}(h]h ]h"]h$]h&]uh1jvhjMhhhjMhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOjjOjjjuh1jhhhj.hNhNubj)}(hXH**Parameters** ``const struct ctl_table *table`` the sysctl table ``int dir`` ``TRUE`` if this is a write to the sysctl file ``void *buffer`` the user buffer ``size_t *lenp`` the size of the user buffer ``loff_t *ppos`` file position **Description** The bitmap is stored at table->data and the bitmap length (in bits) in table->maxlen. We use a range comma separated format (e.g. 1,3-4,10-10) so that large bitmaps may be represented in a compact manner. Writing into the file will clear the bitmap then update it with the given input. **Return** ``0`` on success.h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMfhjOubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjOh]hconst struct ctl_table *table}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMchjOubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMchjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhMchjOubj)}(h;``int dir`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int dir``h]j)}(hj6Ph]hint dir}(hj8PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Pubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMdhj0Pubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjSPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOPubh& if this is a write to the sysctl file}(hjOPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKPhMdhjLPubah}(h]h ]h"]h$]h&]uh1jhj0Pubeh}(h]h ]h"]h$]h&]uh1jhjKPhMdhjOubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hj}Ph]h void *buffer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Pubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMehjwPubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMehjPubah}(h]h ]h"]h$]h&]uh1jhjwPubeh}(h]h ]h"]h$]h&]uh1jhjPhMehjOubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjPh]h size_t *lenp}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMfhjPubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMfhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMfhjOubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjPh]h loff_t *ppos}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMghjPubj)}(hhh]h)}(h file positionh]h file position}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMghjQubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjQhMghjOubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j)}(hj*Qh]h Description}(hj,QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Qubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMihjOubh)}(hUThe bitmap is stored at table->data and the bitmap length (in bits) in table->maxlen.h]hUThe bitmap is stored at table->data and the bitmap length (in bits) in table->maxlen.}(hj@QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMhhjOubh)}(hWe use a range comma separated format (e.g. 1,3-4,10-10) so that large bitmaps may be represented in a compact manner. Writing into the file will clear the bitmap then update it with the given input.h]hWe use a range comma separated format (e.g. 1,3-4,10-10) so that large bitmaps may be represented in a compact manner. Writing into the file will clear the bitmap then update it with the given input.}(hjOQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMkhjOubh)}(h **Return**h]j)}(hj`Qh]hReturn}(hjbQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Qubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMohjOubh)}(h``0`` on success.h](j)}(h``0``h]h0}(hjzQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvQubh on success.}(hjvQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:110: ./kernel/sysctl.chMphjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubeh}(h]sysctl-interfaceah ]h"]sysctl interfaceah$]h&]uh1hhj.hhhhhKlubh)}(hhh](h)}(hproc filesystem interfaceh]hproc filesystem interface}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhhhhhKrubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j proc_flush_pid (C function)c.proc_flush_pidhNtauh1hhjQhhhNhNubj)}(hhh](j)}(h%void proc_flush_pid (struct pid *pid)h]j)}(h$void proc_flush_pid(struct pid *pid)h](jf)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjQhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMg ubj2)}(h h]h }(hjQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjQhhhjQhMg ubjC)}(hproc_flush_pidh]jI)}(hproc_flush_pidh]hproc_flush_pid}(hjQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjQhhhjQhMg ubj=)}(h(struct pid *pid)h]jC)}(hstruct pid *pidh](j )}(hjh]hstruct}(hj RhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubh)}(hhh]jI)}(hpidh]hpid}(hj'RhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)RmodnameN classnameNjj )}j ]j)}jjQsbc.proc_flush_pidasbuh1hhjRubj2)}(h h]h }(hjGRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRubj)}(hjh]h*}(hjURhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjI)}(hpidh]hpid}(hjbRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjRubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjRubah}(h]h ]h"]h$]h&]j`jauh1j<hjQhhhjQhMg ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjQhhhjQhMg ubah}(h]jQah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjQhMg hjQhhubjw)}(hhh]h)}(h8Remove dcache entries for **pid** from the /proc dcache.h](hRemove dcache entries for }(hjRhhhNhNubj)}(h**pid**h]hpid}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh from the /proc dcache.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMg hjRhhubah}(h]h ]h"]h$]h&]uh1jvhjQhhhjQhMg ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1jhhhjQhNhNubj)}(hX**Parameters** ``struct pid *pid`` pid that should be flushed. **Description** This function walks a list of inodes (that belong to any proc filesystem) that are attached to the pid and flushes them from the dentry cache. It is safe and reasonable to cache /proc entries for a task until that task exits. After that they just clog up the dcache with useless entries, possibly causing useful dcache entries to be flushed instead. This routine is provided to flush those useless dcache entries when a process is reaped. **NOTE** This routine is just an optimization so it does not guarantee that no dcache entries will exist after a process is reaped it just makes it very unlikely that any will persist.h](h)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMk hjRubj)}(hhh]j)}(h0``struct pid *pid`` pid that should be flushed. h](j)}(h``struct pid *pid``h]j)}(hjRh]hstruct pid *pid}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMh hjRubj)}(hhh]h)}(hpid that should be flushed.h]hpid that should be flushed.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMh hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMh hjRubah}(h]h ]h"]h$]h&]uh1jhjRubh)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMj hjRubh)}(hThis function walks a list of inodes (that belong to any proc filesystem) that are attached to the pid and flushes them from the dentry cache.h]hThis function walks a list of inodes (that belong to any proc filesystem) that are attached to the pid and flushes them from the dentry cache.}(hj0ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMi hjRubh)}(hX)It is safe and reasonable to cache /proc entries for a task until that task exits. After that they just clog up the dcache with useless entries, possibly causing useful dcache entries to be flushed instead. This routine is provided to flush those useless dcache entries when a process is reaped.h]hX)It is safe and reasonable to cache /proc entries for a task until that task exits. After that they just clog up the dcache with useless entries, possibly causing useful dcache entries to be flushed instead. This routine is provided to flush those useless dcache entries when a process is reaped.}(hj?ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMm hjRubh)}(h**NOTE**h]j)}(hjPSh]hNOTE}(hjRShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNSubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMs hjRubj)}(hhh]j)}(hThis routine is just an optimization so it does not guarantee that no dcache entries will exist after a process is reaped it just makes it very unlikely that any will persist.h](j)}(h=This routine is just an optimization so it does not guaranteeh]h=This routine is just an optimization so it does not guarantee}(hjmShhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:116: ./fs/proc/base.chMu hjiSubj)}(hhh]h)}(hqthat no dcache entries will exist after a process is reaped it just makes it very unlikely that any will persist.h]hqthat no dcache entries will exist after a process is reaped it just makes it very unlikely that any will persist.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ShMu hj|Subah}(h]h ]h"]h$]h&]uh1jhjiSubeh}(h]h ]h"]h$]h&]uh1jhj{ShMu hjfSubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjQhhhNhNubeh}(h]proc-filesystem-interfaceah ]h"]proc filesystem interfaceah$]h&]uh1hhj.hhhhhKrubeh}(h]the-proc-filesystemah ]h"]the proc filesystemah$]h&]uh1hhhhhhhhKiubh)}(hhh](h)}(h Events based on file descriptorsh]h Events based on file descriptors}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShhhhhKxubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  eventfd_signal_mask (C function)c.eventfd_signal_maskhNtauh1hhjShhhNhNubj)}(hhh](j)}(hAvoid eventfd_signal_mask (struct eventfd_ctx *ctx, __poll_t mask)h]j)}(h@void eventfd_signal_mask(struct eventfd_ctx *ctx, __poll_t mask)h](jf)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjShhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chK/ubj2)}(h h]h }(hjShhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjShhhjShK/ubjC)}(heventfd_signal_maskh]jI)}(heventfd_signal_maskh]heventfd_signal_mask}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjShhhjShK/ubj=)}(h((struct eventfd_ctx *ctx, __poll_t mask)h](jC)}(hstruct eventfd_ctx *ctxh](j )}(hjh]hstruct}(hjThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjTubj2)}(h h]h }(hj*ThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTubh)}(hhh]jI)}(h eventfd_ctxh]h eventfd_ctx}(hj;ThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8Tubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=TmodnameN classnameNjj )}j ]j)}jjTsbc.eventfd_signal_maskasbuh1hhjTubj2)}(h h]h }(hj[ThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTubj)}(hjh]h*}(hjiThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjI)}(hctxh]hctx}(hjvThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjTubjC)}(h __poll_t maskh](h)}(hhh]jI)}(h__poll_th]h__poll_t}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj )}j ]jWTc.eventfd_signal_maskasbuh1hhjTubj2)}(h h]h }(hjThhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTubjI)}(hmaskh]hmask}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjTubeh}(h]h ]h"]h$]h&]j`jauh1j<hjShhhjShK/ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjShhhjShK/ubah}(h]jSah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjShK/hjShhubjw)}(hhh]h)}(hIncrement the event counterh]hIncrement the event counter}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chK/hjThhubah}(h]h ]h"]h$]h&]uh1jvhjShhhjShK/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjShNhNubj)}(hXt**Parameters** ``struct eventfd_ctx *ctx`` [in] Pointer to the eventfd context. ``__poll_t mask`` [in] poll mask **Description** This function is supposed to be called by the kernel in paths that do not allow sleeping. In this function we allow the counter to reach the ULLONG_MAX value, and we signal this as overflow condition by returning a EPOLLERR to poll(2).h](h)}(h**Parameters**h]j)}(hj Uh]h Parameters}(hj UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chK3hjUubj)}(hhh](j)}(hA``struct eventfd_ctx *ctx`` [in] Pointer to the eventfd context. h](j)}(h``struct eventfd_ctx *ctx``h]j)}(hj)Uh]hstruct eventfd_ctx *ctx}(hj+UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Uubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chK0hj#Uubj)}(hhh]h)}(h$[in] Pointer to the eventfd context.h]h$[in] Pointer to the eventfd context.}(hjBUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>UhK0hj?Uubah}(h]h ]h"]h$]h&]uh1jhj#Uubeh}(h]h ]h"]h$]h&]uh1jhj>UhK0hj Uubj)}(h!``__poll_t mask`` [in] poll mask h](j)}(h``__poll_t mask``h]j)}(hjbUh]h __poll_t mask}(hjdUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Uubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chK1hj\Uubj)}(hhh]h)}(h[in] poll maskh]h[in] poll mask}(hj{UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwUhK1hjxUubah}(h]h ]h"]h$]h&]uh1jhj\Uubeh}(h]h ]h"]h$]h&]uh1jhjwUhK1hj Uubeh}(h]h ]h"]h$]h&]uh1jhjUubh)}(h**Description**h]j)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chK3hjUubh)}(hThis function is supposed to be called by the kernel in paths that do not allow sleeping. In this function we allow the counter to reach the ULLONG_MAX value, and we signal this as overflow condition by returning a EPOLLERR to poll(2).h]hThis function is supposed to be called by the kernel in paths that do not allow sleeping. In this function we allow the counter to reach the ULLONG_MAX value, and we signal this as overflow condition by returning a EPOLLERR to poll(2).}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chK2hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j eventfd_ctx_put (C function)c.eventfd_ctx_puthNtauh1hhjShhhNhNubj)}(hhh](j)}(h.void eventfd_ctx_put (struct eventfd_ctx *ctx)h]j)}(h-void eventfd_ctx_put(struct eventfd_ctx *ctx)h](jf)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjUhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKaubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjUhhhjUhKaubjC)}(heventfd_ctx_puth]jI)}(heventfd_ctx_puth]heventfd_ctx_put}(hjVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjUhhhjUhKaubj=)}(h(struct eventfd_ctx *ctx)h]jC)}(hstruct eventfd_ctx *ctxh](j )}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjVubj2)}(h h]h }(hj,VhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubh)}(hhh]jI)}(h eventfd_ctxh]h eventfd_ctx}(hj=VhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:Vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?VmodnameN classnameNjj )}j ]j)}jjVsbc.eventfd_ctx_putasbuh1hhjVubj2)}(h h]h }(hj]VhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubj)}(hjh]h*}(hjkVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjI)}(hctxh]hctx}(hjxVhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjVubah}(h]h ]h"]h$]h&]j`jauh1j<hjUhhhjUhKaubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjUhhhjUhKaubah}(h]jUah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjUhKahjUhhubjw)}(hhh]h)}(h5Releases a reference to the internal eventfd context.h]h5Releases a reference to the internal eventfd context.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKahjVhhubah}(h]h ]h"]h$]h&]uh1jvhjUhhhjUhKaubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jhhhjShNhNubj)}(h**Parameters** ``struct eventfd_ctx *ctx`` [in] Pointer to eventfd context. **Description** The eventfd context reference must have been previously acquired either with eventfd_ctx_fdget() or eventfd_ctx_fileget().h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKehjVubj)}(hhh]j)}(h=``struct eventfd_ctx *ctx`` [in] Pointer to eventfd context. h](j)}(h``struct eventfd_ctx *ctx``h]j)}(hjVh]hstruct eventfd_ctx *ctx}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKbhjVubj)}(hhh]h)}(h [in] Pointer to eventfd context.h]h [in] Pointer to eventfd context.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKbhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhKbhjVubah}(h]h ]h"]h$]h&]uh1jhjVubh)}(h**Description**h]j)}(hjWh]h Description}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKdhjVubh)}(hzThe eventfd context reference must have been previously acquired either with eventfd_ctx_fdget() or eventfd_ctx_fileget().h]hzThe eventfd context reference must have been previously acquired either with eventfd_ctx_fdget() or eventfd_ctx_fileget().}(hj4WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKchjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j *eventfd_ctx_remove_wait_queue (C function)c.eventfd_ctx_remove_wait_queuehNtauh1hhjShhhNhNubj)}(hhh](j)}(haint eventfd_ctx_remove_wait_queue (struct eventfd_ctx *ctx, wait_queue_entry_t *wait, __u64 *cnt)h]j)}(h`int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_entry_t *wait, __u64 *cnt)h](jf)}(hinth]hint}(hjcWhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj_WhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKubj2)}(h h]h }(hjrWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj_WhhhjqWhKubjC)}(heventfd_ctx_remove_wait_queueh]jI)}(heventfd_ctx_remove_wait_queueh]heventfd_ctx_remove_wait_queue}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj_WhhhjqWhKubj=)}(h?(struct eventfd_ctx *ctx, wait_queue_entry_t *wait, __u64 *cnt)h](jC)}(hstruct eventfd_ctx *ctxh](j )}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjWubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWubh)}(hhh]jI)}(h eventfd_ctxh]h eventfd_ctx}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj )}j ]j)}jjWsbc.eventfd_ctx_remove_wait_queueasbuh1hhjWubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjI)}(hctxh]hctx}(hjWhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjWubjC)}(hwait_queue_entry_t *waith](h)}(hhh]jI)}(hwait_queue_entry_th]hwait_queue_entry_t}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj )}j ]jWc.eventfd_ctx_remove_wait_queueasbuh1hhjXubj2)}(h h]h }(hj3XhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjXubj)}(hjh]h*}(hjAXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjI)}(hwaith]hwait}(hjNXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjWubjC)}(h __u64 *cnth](h)}(hhh]jI)}(h__u64h]h__u64}(hjjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlXmodnameN classnameNjj )}j ]jWc.eventfd_ctx_remove_wait_queueasbuh1hhjcXubj2)}(h h]h }(hjXhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcXubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcXubjI)}(hcnth]hcnt}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcXubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjWubeh}(h]h ]h"]h$]h&]j`jauh1j<hj_WhhhjqWhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj[WhhhjqWhKubah}(h]jVWah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjqWhKhjXWhhubjw)}(hhh]h)}(h0Read the current counter and removes wait queue.h]h0Read the current counter and removes wait queue.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhjXhhubah}(h]h ]h"]h$]h&]uh1jvhjXWhhhjqWhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1jhhhjShNhNubj)}(hX**Parameters** ``struct eventfd_ctx *ctx`` [in] Pointer to eventfd context. ``wait_queue_entry_t *wait`` [in] Wait queue to be removed. ``__u64 *cnt`` [out] Pointer to the 64-bit counter value. **Description** Returns ``0`` if successful, or the following error codes: -EAGAIN : The operation would have blocked. This is used to atomically remove a wait queue entry from the eventfd wait queue head, and read/reset the counter value.h](h)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhjXubj)}(hhh](j)}(h=``struct eventfd_ctx *ctx`` [in] Pointer to eventfd context. h](j)}(h``struct eventfd_ctx *ctx``h]j)}(hjYh]hstruct eventfd_ctx *ctx}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Yubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhjYubj)}(hhh]h)}(h [in] Pointer to eventfd context.h]h [in] Pointer to eventfd context.}(hj'YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#YhKhj$Yubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhj#YhKhjYubj)}(h<``wait_queue_entry_t *wait`` [in] Wait queue to be removed. h](j)}(h``wait_queue_entry_t *wait``h]j)}(hjGYh]hwait_queue_entry_t *wait}(hjIYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEYubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhjAYubj)}(hhh]h)}(h[in] Wait queue to be removed.h]h[in] Wait queue to be removed.}(hj`YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\YhKhj]Yubah}(h]h ]h"]h$]h&]uh1jhjAYubeh}(h]h ]h"]h$]h&]uh1jhj\YhKhjYubj)}(h:``__u64 *cnt`` [out] Pointer to the 64-bit counter value. h](j)}(h``__u64 *cnt``h]j)}(hjYh]h __u64 *cnt}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~Yubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhjzYubj)}(hhh]h)}(h*[out] Pointer to the 64-bit counter value.h]h*[out] Pointer to the 64-bit counter value.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKhjYubah}(h]h ]h"]h$]h&]uh1jhjzYubeh}(h]h ]h"]h$]h&]uh1jhjYhKhjYubeh}(h]h ]h"]h$]h&]uh1jhjXubh)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhjXubh)}(h:Returns ``0`` if successful, or the following error codes:h](hReturns }(hjYhhhNhNubj)}(h``0``h]h0}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh- if successful, or the following error codes:}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhjXubh option_list)}(hhh]hoption_list_item)}(hhh](h option_group)}(hhh]hoption)}(h-EAGAINh](h option_string)}(h-Eh]h-E}hj Zsbah}(h]h ]h"]h$]h&]uh1jZhjZubhoption_argument)}(hAGAINh]hAGAIN}(hjZhhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jZhjZubeh}(h]h ]h"]h$]h&]uh1jZhjYubah}(h]h ]h"]h$]h&]uh1jYhjYubh description)}(h$: The operation would have blocked. h]h)}(h#: The operation would have blocked.h]h#: The operation would have blocked.}(hj:ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhj6Zubah}(h]h ]h"]h$]h&]uh1j4ZhjYubeh}(h]h ]h"]h$]h&]uh1jYhjYubah}(h]h ]h"]h$]h&]uh1jYhjHZhKhjXubh)}(hxThis is used to atomically remove a wait queue entry from the eventfd wait queue head, and read/reset the counter value.h]hxThis is used to atomically remove a wait queue entry from the eventfd wait queue head, and read/reset the counter value.}(hj[ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chKhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j eventfd_fget (C function)c.eventfd_fgethNtauh1hhjShhhNhNubj)}(hhh](j)}(h#struct file * eventfd_fget (int fd)h]j)}(h!struct file *eventfd_fget(int fd)h](j )}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chM:ubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZhhhjZhM:ubh)}(hhh]jI)}(hfileh]hfile}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj )}j ]j)}j eventfd_fgetsbc.eventfd_fgetasbuh1hhjZhhhjZhM:ubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjZhhhjZhM:ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhM:ubjC)}(h eventfd_fgeth]jI)}(hjZh]h eventfd_fget}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjZhhhjZhM:ubj=)}(h(int fd)h]jC)}(hint fdh](jf)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj[ubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj[ubjI)}(hfdh]hfd}(hj [hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjZubah}(h]h ]h"]h$]h&]j`jauh1j<hjZhhhjZhM:ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjZhhhjZhM:ubah}(h]j}Zah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjZhM:hjZhhubjw)}(hhh]h)}(h2Acquire a reference of an eventfd file descriptor.h]h2Acquire a reference of an eventfd file descriptor.}(hjJ[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chM:hjG[hhubah}(h]h ]h"]h$]h&]uh1jvhjZhhhjZhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjb[jjb[jjjuh1jhhhjShNhNubj)}(hX**Parameters** ``int fd`` [in] Eventfd file descriptor. **Description** Returns a pointer to the eventfd file structure in case of success, or the following error pointer: -EBADF : Invalid **fd** file descriptor. -EINVAL : The **fd** file descriptor is not an eventfd file.h](h)}(h**Parameters**h]j)}(hjl[h]h Parameters}(hjn[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj[ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chM>hjf[ubj)}(hhh]j)}(h)``int fd`` [in] Eventfd file descriptor. h](j)}(h ``int fd``h]j)}(hj[h]hint fd}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chM;hj[ubj)}(hhh]h)}(h[in] Eventfd file descriptor.h]h[in] Eventfd file descriptor.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM;hj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hM;hj[ubah}(h]h ]h"]h$]h&]uh1jhjf[ubh)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chM=hjf[ubh)}(hcReturns a pointer to the eventfd file structure in case of success, or the following error pointer:h]hcReturns a pointer to the eventfd file structure in case of success, or the following error pointer:}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chM<hjf[ubjY)}(hhh](jY)}(hhh](jY)}(hhh]jZ)}(h-EBADFh](jZ)}(h-Eh]h-E}hj[sbah}(h]h ]h"]h$]h&]uh1jZhj[ubjZ)}(hBADFh]hBADF}(hj\hhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jZhj[ubeh}(h]h ]h"]h$]h&]uh1jZhj[ubah}(h]h ]h"]h$]h&]uh1jYhj[ubj5Z)}(h!: Invalid **fd** file descriptor.h]h)}(hj#\h](h : Invalid }(hj%\hhhNhNubj)}(h**fd**h]hfd}(hj,\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%\ubh file descriptor.}(hj%\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chM?hj!\ubah}(h]h ]h"]h$]h&]uh1j4Zhj[ubeh}(h]h ]h"]h$]h&]uh1jYhj[ubjY)}(hhh](jY)}(hhh]jZ)}(h-EINVALh](jZ)}(h-Eh]h-E}hj[\sbah}(h]h ]h"]h$]h&]uh1jZhjW\ubjZ)}(hINVALh]hINVAL}(hji\hhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jZhjW\ubeh}(h]h ]h"]h$]h&]uh1jZhjT\ubah}(h]h ]h"]h$]h&]uh1jYhjQ\ubj5Z)}(h4: The **fd** file descriptor is not an eventfd file.h]h)}(hj\h](h: The }(hj\hhhNhNubj)}(h**fd**h]hfd}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh( file descriptor is not an eventfd file.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chM@hj\ubah}(h]h ]h"]h$]h&]uh1j4ZhjQ\ubeh}(h]h ]h"]h$]h&]uh1jYhj[ubeh}(h]h ]h"]h$]h&]uh1jYhjD\hM?hjf[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j eventfd_ctx_fdget (C function)c.eventfd_ctx_fdgethNtauh1hhjShhhNhNubj)}(hhh](j)}(h/struct eventfd_ctx * eventfd_ctx_fdget (int fd)h]j)}(h-struct eventfd_ctx *eventfd_ctx_fdget(int fd)h](j )}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMTubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\hhhj\hMTubh)}(hhh]jI)}(h eventfd_ctxh]h eventfd_ctx}(hj\hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj )}j ]j)}jeventfd_ctx_fdgetsbc.eventfd_ctx_fdgetasbuh1hhj\hhhj\hMTubj2)}(h h]h }(hj]hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj\hhhj\hMTubj)}(hjh]h*}(hj(]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj\hMTubjC)}(heventfd_ctx_fdgeth]jI)}(hj]h]heventfd_ctx_fdget}(hj9]hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5]ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj\hhhj\hMTubj=)}(h(int fd)h]jC)}(hint fdh](jf)}(hinth]hint}(hjT]hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjP]ubj2)}(h h]h }(hjb]hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjP]ubjI)}(hfdh]hfd}(hjp]hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjP]ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjL]ubah}(h]h ]h"]h$]h&]j`jauh1j<hj\hhhj\hMTubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj\hhhj\hMTubah}(h]j\ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj\hMThj\hhubjw)}(hhh]h)}(h5Acquires a reference to the internal eventfd context.h]h5Acquires a reference to the internal eventfd context.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMThj]hhubah}(h]h ]h"]h$]h&]uh1jvhj\hhhj\hMTubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1jhhhjShNhNubj)}(h**Parameters** ``int fd`` [in] Eventfd file descriptor. **Description** Returns a pointer to the internal eventfd context, otherwise the error pointers returned by the following functions: eventfd_fgeth](h)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMXhj]ubj)}(hhh]j)}(h)``int fd`` [in] Eventfd file descriptor. h](j)}(h ``int fd``h]j)}(hj]h]hint fd}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMUhj]ubj)}(hhh]h)}(h[in] Eventfd file descriptor.h]h[in] Eventfd file descriptor.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMUhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMUhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMWhj]ubh)}(htReturns a pointer to the internal eventfd context, otherwise the error pointers returned by the following functions:h]htReturns a pointer to the internal eventfd context, otherwise the error pointers returned by the following functions:}(hj,^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMVhj]ubh)}(h eventfd_fgeth]h eventfd_fget}(hj;^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMYhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  eventfd_ctx_fileget (C function)c.eventfd_ctx_filegethNtauh1hhjShhhNhNubj)}(hhh](j)}(hah"]h$]h&]uh1j1hjf^hhhjw^hMfubh)}(hhh]jI)}(h eventfd_ctxh]h eventfd_ctx}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj )}j ]j)}jeventfd_ctx_filegetsbc.eventfd_ctx_filegetasbuh1hhjf^hhhjw^hMfubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjf^hhhjw^hMfubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf^hhhjw^hMfubjC)}(heventfd_ctx_filegeth]jI)}(hj^h]heventfd_ctx_fileget}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ](j[j\eh"]h$]h&]j`jauBh1jBhjf^hhhjw^hMfubj=)}(h(struct file *file)h]jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj^ubj2)}(h h]h }(hj^hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj^ubh)}(hhh]jI)}(hfileh]hfile}(hj_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj )}j ]j^c.eventfd_ctx_filegetasbuh1hhj^ubj2)}(h h]h }(hj _hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj^ubj)}(hjh]h*}(hj._hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjI)}(hfileh]hfile}(hj;_hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj^ubah}(h]h ]h"]h$]h&]j`jauh1j<hjf^hhhjw^hMfubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjb^hhhjw^hMfubah}(h]j]^ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjw^hMfhj_^hhubjw)}(hhh]h)}(h5Acquires a reference to the internal eventfd context.h]h5Acquires a reference to the internal eventfd context.}(hje_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMfhjb_hhubah}(h]h ]h"]h$]h&]uh1jvhj_^hhhjw^hMfubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}_jj}_jjjuh1jhhhjShNhNubj)}(h**Parameters** ``struct file *file`` [in] Eventfd file pointer. **Description** Returns a pointer to the internal eventfd context, otherwise the error pointer: -EINVAL : The **fd** file descriptor is not an eventfd file.h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMjhj_ubj)}(hhh]j)}(h1``struct file *file`` [in] Eventfd file pointer. h](j)}(h``struct file *file``h]j)}(hj_h]hstruct file *file}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMghj_ubj)}(hhh]h)}(h[in] Eventfd file pointer.h]h[in] Eventfd file pointer.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMghj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMghj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubh)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMihj_ubh)}(hOReturns a pointer to the internal eventfd context, otherwise the error pointer:h]hOReturns a pointer to the internal eventfd context, otherwise the error pointer:}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMhhj_ubjY)}(hhh]jY)}(hhh](jY)}(hhh]jZ)}(h-EINVALh](jZ)}(h-Eh]h-E}hj`sbah}(h]h ]h"]h$]h&]uh1jZhj`ubjZ)}(hINVALh]hINVAL}(hj!`hhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jZhj`ubeh}(h]h ]h"]h$]h&]uh1jZhj `ubah}(h]h ]h"]h$]h&]uh1jYhj `ubj5Z)}(h4: The **fd** file descriptor is not an eventfd file.h]h)}(hj>`h](h: The }(hj@`hhhNhNubj)}(h**fd**h]hfd}(hjG`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@`ubh( file descriptor is not an eventfd file.}(hj@`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:122: ./fs/eventfd.chMkhj<`ubah}(h]h ]h"]h$]h&]uh1j4Zhj `ubeh}(h]h ]h"]h$]h&]uh1jYhj`ubah}(h]h ]h"]h$]h&]uh1jYhj_`hMkhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjShhhNhNubeh}(h] events-based-on-file-descriptorsah ]h"] events based on file descriptorsah$]h&]uh1hhhhhhhhKxubh)}(hhh](h)}(heventpoll (epoll) interfacesh]heventpoll (epoll) interfaces}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hhhhhK~ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !busy_loop_ep_timeout (C function)c.busy_loop_ep_timeouthNtauh1hhj`hhhNhNubj)}(hhh](j)}(hJbool busy_loop_ep_timeout (unsigned long start_time, struct eventpoll *ep)h]j)}(hIbool busy_loop_ep_timeout(unsigned long start_time, struct eventpoll *ep)h](jf)}(hjih]hbool}(hj`hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj`hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMqubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`hhhj`hMqubjC)}(hbusy_loop_ep_timeouth]jI)}(hbusy_loop_ep_timeouth]hbusy_loop_ep_timeout}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj`hhhj`hMqubj=)}(h0(unsigned long start_time, struct eventpoll *ep)h](jC)}(hunsigned long start_timeh](jf)}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj`ubj2)}(h h]h }(hj`hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`ubjf)}(hlongh]hlong}(hjahhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj`ubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`ubjI)}(h start_timeh]h start_time}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj`ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubjC)}(hstruct eventpoll *eph](j )}(hjh]hstruct}(hj8ahhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj4aubj2)}(h h]h }(hjEahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj4aubh)}(hhh]jI)}(h eventpollh]h eventpoll}(hjVahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXamodnameN classnameNjj )}j ]j)}jj`sbc.busy_loop_ep_timeoutasbuh1hhj4aubj2)}(h h]h }(hjvahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj4aubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4aubjI)}(heph]hep}(hjahhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4aubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj`ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj`hhhj`hMqubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj`hhhj`hMqubah}(h]j`ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj`hMqhj`hhubjw)}(hhh]h)}(hcheck if busy poll has timed out. The timeout value from the epoll instance ep is preferred, but if it is not set fallback to the system-wide global via busy_loop_timeout.h]hcheck if busy poll has timed out. The timeout value from the epoll instance ep is preferred, but if it is not set fallback to the system-wide global via busy_loop_timeout.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMqhjahhubah}(h]h ]h"]h$]h&]uh1jvhj`hhhj`hMqubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhj`hNhNubj)}(h**Parameters** ``unsigned long start_time`` The start time used to compute the remaining time until timeout. ``struct eventpoll *ep`` Pointer to the eventpoll context. **Return** true if the timeout has expired, false otherwise.h](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMuhjaubj)}(hhh](j)}(h^``unsigned long start_time`` The start time used to compute the remaining time until timeout. h](j)}(h``unsigned long start_time``h]j)}(hjah]hunsigned long start_time}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMuhjaubj)}(hhh]h)}(h@The start time used to compute the remaining time until timeout.h]h@The start time used to compute the remaining time until timeout.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMuhjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjbhMuhjaubj)}(h;``struct eventpoll *ep`` Pointer to the eventpoll context. h](j)}(h``struct eventpoll *ep``h]j)}(hj5bh]hstruct eventpoll *ep}(hj7bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3bubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMvhj/bubj)}(hhh]h)}(h!Pointer to the eventpoll context.h]h!Pointer to the eventpoll context.}(hjNbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJbhMvhjKbubah}(h]h ]h"]h$]h&]uh1jhj/bubeh}(h]h ]h"]h$]h&]uh1jhjJbhMvhjaubeh}(h]h ]h"]h$]h&]uh1jhjaubh)}(h **Return**h]j)}(hjpbh]hReturn}(hjrbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnbubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMxhjaubh)}(h1true if the timeout has expired, false otherwise.h]h1true if the timeout has expired, false otherwise.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMxhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j reverse_path_check (C function)c.reverse_path_checkhNtauh1hhj`hhhNhNubj)}(hhh](j)}(h/int reverse_path_check (struct ep_ctl_ctx *ctx)h]j)}(h.int reverse_path_check(struct ep_ctl_ctx *ctx)h](jf)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjbhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbhhhjbhMubjC)}(hreverse_path_checkh]jI)}(hreverse_path_checkh]hreverse_path_check}(hjbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjbhhhjbhMubj=)}(h(struct ep_ctl_ctx *ctx)h]jC)}(hstruct ep_ctl_ctx *ctxh](j )}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjbubj2)}(h h]h }(hjbhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbubh)}(hhh]jI)}(h ep_ctl_ctxh]h ep_ctl_ctx}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj cubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj )}j ]j)}jjbsbc.reverse_path_checkasbuh1hhjbubj2)}(h h]h }(hj0chhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjbubj)}(hjh]h*}(hj>chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjI)}(hctxh]hctx}(hjKchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjbubah}(h]h ]h"]h$]h&]j`jauh1j<hjbhhhjbhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjbhhhjbhMubah}(h]jbah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjbhMhjbhhubjw)}(hhh]h)}(hctx->tfile_check_list is a list of epitems_head anchoring files with newly proposed links; make sure those links don't push any path-length bucket over its limit in path_limits[].h]hctx->tfile_check_list is a list of epitems_head anchoring files with newly proposed links; make sure those links don’t push any path-length bucket over its limit in path_limits[].}(hjuchhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjrchhubah}(h]h ]h"]h$]h&]uh1jvhjbhhhjbhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhj`hNhNubj)}(h**Parameters** ``struct ep_ctl_ctx *ctx`` Per-do_epoll_ctl() scratch for the loop / path checks. **Return** ``zero`` if the proposed links don't create too many paths, ``-1`` otherwise.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjcubj)}(hhh]j)}(hR``struct ep_ctl_ctx *ctx`` Per-do_epoll_ctl() scratch for the loop / path checks. h](j)}(h``struct ep_ctl_ctx *ctx``h]j)}(hjch]hstruct ep_ctl_ctx *ctx}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjcubj)}(hhh]h)}(h6Per-do_epoll_ctl() scratch for the loop / path checks.h]h6Per-do_epoll_ctl() scratch for the loop / path checks.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubh)}(h **Return**h]j)}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjcubh)}(hM``zero`` if the proposed links don't create too many paths, ``-1`` otherwise.h](j)}(h``zero``h]hzero}(hj dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh6 if the proposed links don’t create too many paths, }(hjdhhhNhNubj)}(h``-1``h]h-1}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh otherwise.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ep_poll (C function) c.ep_pollhNtauh1hhj`hhhNhNubj)}(hhh](j)}(hpint ep_poll (struct eventpoll *ep, struct epoll_event __user *events, int maxevents, struct timespec64 *timeout)h]j)}(hoint ep_poll(struct eventpoll *ep, struct epoll_event __user *events, int maxevents, struct timespec64 *timeout)h](jf)}(hinth]hint}(hjVdhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjRdhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMubj2)}(h h]h }(hjedhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRdhhhjddhMubjC)}(hep_pollh]jI)}(hep_pollh]hep_poll}(hjwdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsdubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjRdhhhjddhMubj=)}(hd(struct eventpoll *ep, struct epoll_event __user *events, int maxevents, struct timespec64 *timeout)h](jC)}(hstruct eventpoll *eph](j )}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjdubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdubh)}(hhh]jI)}(h eventpollh]h eventpoll}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj )}j ]j)}jjydsb c.ep_pollasbuh1hhjdubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjI)}(heph]hep}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(h!struct epoll_event __user *eventsh](j )}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubh)}(hhh]jI)}(h epoll_eventh]h epoll_event}(hj#ehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%emodnameN classnameNjj )}j ]jd c.ep_pollasbuh1hhjeubj2)}(h h]h }(hjAehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubh__user}(hjehhhNhNubj2)}(h h]h }(hjSehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj)}(hjh]h*}(hjaehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjI)}(heventsh]hevents}(hjnehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(h int maxeventsh](jf)}(hinth]hint}(hjehhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjeubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubjI)}(h maxeventsh]h maxevents}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(hstruct timespec64 *timeouth](j )}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubh)}(hhh]jI)}(h timespec64h]h timespec64}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj )}j ]jd c.ep_pollasbuh1hhjeubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjI)}(htimeouth]htimeout}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubeh}(h]h ]h"]h$]h&]j`jauh1j<hjRdhhhjddhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjNdhhhjddhMubah}(h]jIdah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjddhMhjKdhhubjw)}(hhh]h)}(hNRetrieves ready events, and delivers them to the caller-supplied event buffer.h]hNRetrieves ready events, and delivers them to the caller-supplied event buffer.}(hj=fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhj:fhhubah}(h]h ]h"]h$]h&]uh1jvhjKdhhhjddhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUfjjUfjjjuh1jhhhj`hNhNubj)}(hX**Parameters** ``struct eventpoll *ep`` Pointer to the eventpoll context. ``struct epoll_event __user *events`` Pointer to the userspace buffer where the ready events should be stored. ``int maxevents`` Size (in terms of number of events) of the caller event buffer. ``struct timespec64 *timeout`` Maximum timeout for the ready events fetch operation, in timespec. If the timeout is zero, the function will not block, while if the **timeout** ptr is NULL, the function will block until at least one event has been retrieved (or an error occurred). **Return** the number of ready events which have been fetched, or an error code, in case of error.h](h)}(h**Parameters**h]j)}(hj_fh]h Parameters}(hjafhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]fubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjYfubj)}(hhh](j)}(h;``struct eventpoll *ep`` Pointer to the eventpoll context. h](j)}(h``struct eventpoll *ep``h]j)}(hj~fh]hstruct eventpoll *ep}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|fubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjxfubj)}(hhh]h)}(h!Pointer to the eventpoll context.h]h!Pointer to the eventpoll context.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjxfubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjufubj)}(ho``struct epoll_event __user *events`` Pointer to the userspace buffer where the ready events should be stored. h](j)}(h%``struct epoll_event __user *events``h]j)}(hjfh]h!struct epoll_event __user *events}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjfubj)}(hhh]h)}(hHPointer to the userspace buffer where the ready events should be stored.h]hHPointer to the userspace buffer where the ready events should be stored.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjufubj)}(hR``int maxevents`` Size (in terms of number of events) of the caller event buffer. h](j)}(h``int maxevents``h]j)}(hjfh]h int maxevents}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjfubj)}(hhh]h)}(h?Size (in terms of number of events) of the caller event buffer.h]h?Size (in terms of number of events) of the caller event buffer.}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjghMhjufubj)}(hX``struct timespec64 *timeout`` Maximum timeout for the ready events fetch operation, in timespec. If the timeout is zero, the function will not block, while if the **timeout** ptr is NULL, the function will block until at least one event has been retrieved (or an error occurred). h](j)}(h``struct timespec64 *timeout``h]j)}(hj*gh]hstruct timespec64 *timeout}(hj,ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(gubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhj$gubj)}(hhh]h)}(hMaximum timeout for the ready events fetch operation, in timespec. If the timeout is zero, the function will not block, while if the **timeout** ptr is NULL, the function will block until at least one event has been retrieved (or an error occurred).h](hMaximum timeout for the ready events fetch operation, in timespec. If the timeout is zero, the function will not block, while if the }(hjCghhhNhNubj)}(h **timeout**h]htimeout}(hjKghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCgubhi ptr is NULL, the function will block until at least one event has been retrieved (or an error occurred).}(hjCghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhj@gubah}(h]h ]h"]h$]h&]uh1jhj$gubeh}(h]h ]h"]h$]h&]uh1jhj?ghMhjufubeh}(h]h ]h"]h$]h&]uh1jhjYfubh)}(h **Return**h]j)}(hjxgh]hReturn}(hjzghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvgubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjYfubh)}(hWthe number of ready events which have been fetched, or an error code, in case of error.h]hWthe number of ready events which have been fetched, or an error code, in case of error.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMhjYfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ep_loop_check_proc (C function)c.ep_loop_check_prochNtauh1hhj`hhhNhNubj)}(hhh](j)}(hPint ep_loop_check_proc (struct ep_ctl_ctx *ctx, struct eventpoll *ep, int depth)h]j)}(hOint ep_loop_check_proc(struct ep_ctl_ctx *ctx, struct eventpoll *ep, int depth)h](jf)}(hinth]hint}(hjghhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjghhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMK ubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjghhhjghMK ubjC)}(hep_loop_check_proch]jI)}(hep_loop_check_proch]hep_loop_check_proc}(hjghhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjghhhjghMK ubj=)}(h9(struct ep_ctl_ctx *ctx, struct eventpoll *ep, int depth)h](jC)}(hstruct ep_ctl_ctx *ctxh](j )}(hjh]hstruct}(hjghhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjgubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubh)}(hhh]jI)}(h ep_ctl_ctxh]h ep_ctl_ctx}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj )}j ]j)}jjgsbc.ep_loop_check_procasbuh1hhjgubj2)}(h h]h }(hj8hhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h*}(hjFhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(hctxh]hctx}(hjShhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjgubjC)}(hstruct eventpoll *eph](j )}(hjh]hstruct}(hjlhhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhubj2)}(h h]h }(hjyhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhubh)}(hhh]jI)}(h eventpollh]h eventpoll}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj )}j ]j4hc.ep_loop_check_procasbuh1hhjhhubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhubjI)}(heph]hep}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhhubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjgubjC)}(h int depthh](jf)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubjI)}(hdepthh]hdepth}(hjhhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjgubeh}(h]h ]h"]h$]h&]j`jauh1j<hjghhhjghMK ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjghhhjghMK ubah}(h]jgah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjghMK hjghhubjw)}(hhh]h)}(hverify that adding an epoll file **ep** inside another epoll file does not create closed loops, and determine the depth of the subtree starting at **ep**h](h!verify that adding an epoll file }(hj"ihhhNhNubj)}(h**ep**h]hep}(hj*ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"iubhl inside another epoll file does not create closed loops, and determine the depth of the subtree starting at }(hj"ihhhNhNubj)}(h**ep**h]hep}(hj` to be currently checked. ``int depth`` Current depth of the path being checked. **Return** depth of the subtree, or a value bigger than EP_MAX_NESTS if we found a loop or went too deep.h](h)}(h**Parameters**h]j)}(hjdih]h Parameters}(hjfihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbiubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMO hj^iubj)}(hhh](j)}(hR``struct ep_ctl_ctx *ctx`` Per-do_epoll_ctl() scratch for the loop / path checks. h](j)}(h``struct ep_ctl_ctx *ctx``h]j)}(hjih]hstruct ep_ctl_ctx *ctx}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMO hj}iubj)}(hhh]h)}(h6Per-do_epoll_ctl() scratch for the loop / path checks.h]h6Per-do_epoll_ctl() scratch for the loop / path checks.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMO hjiubah}(h]h ]h"]h$]h&]uh1jhj}iubeh}(h]h ]h"]h$]h&]uh1jhjihMO hjziubj)}(h]``struct eventpoll *ep`` the :c:type:`struct eventpoll ` to be currently checked. h](j)}(h``struct eventpoll *ep``h]j)}(hjih]hstruct eventpoll *ep}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMP hjiubj)}(hhh]h)}(hCthe :c:type:`struct eventpoll ` to be currently checked.h](hthe }(hjihhhNhNubh)}(h&:c:type:`struct eventpoll `h]j)}(hjih]hstruct eventpoll}(hjihhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]refdocj  refdomainjreftypetype refexplicitrefwarnjj j  eventpolluh1hhjihMP hjiubh to be currently checked.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjihMP hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMP hjziubj)}(h7``int depth`` Current depth of the path being checked. h](j)}(h ``int depth``h]j)}(hjjh]h int depth}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMQ hjjubj)}(hhh]h)}(h(Current depth of the path being checked.h]h(Current depth of the path being checked.}(hj1jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-jhMQ hj.jubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhj-jhMQ hjziubeh}(h]h ]h"]h$]h&]uh1jhj^iubh)}(h **Return**h]j)}(hjSjh]hReturn}(hjUjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMS hj^iubh)}(h^depth of the subtree, or a value bigger than EP_MAX_NESTS if we found a loop or went too deep.h]h^depth of the subtree, or a value bigger than EP_MAX_NESTS if we found a loop or went too deep.}(hjijhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chMS hj^iubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ep_loop_check (C function)c.ep_loop_checkhNtauh1hhj`hhhNhNubj)}(hhh](j)}(hVint ep_loop_check (struct ep_ctl_ctx *ctx, struct eventpoll *ep, struct eventpoll *to)h]j)}(hUint ep_loop_check(struct ep_ctl_ctx *ctx, struct eventpoll *ep, struct eventpoll *to)h](jf)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjjhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chM ubj2)}(h h]h }(hjjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjjhhhjjhM ubjC)}(h ep_loop_checkh]jI)}(h ep_loop_checkh]h ep_loop_check}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjjhhhjjhM ubj=)}(hD(struct ep_ctl_ctx *ctx, struct eventpoll *ep, struct eventpoll *to)h](jC)}(hstruct ep_ctl_ctx *ctxh](j )}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjjubj2)}(h h]h }(hjjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjjubh)}(hhh]jI)}(h ep_ctl_ctxh]h ep_ctl_ctx}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj )}j ]j)}jjjsbc.ep_loop_checkasbuh1hhjjubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjjubj)}(hjh]h*}(hj!khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjI)}(hctxh]hctx}(hj.khhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjjubjC)}(hstruct eventpoll *eph](j )}(hjh]hstruct}(hjGkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjCkubj2)}(h h]h }(hjTkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjCkubh)}(hhh]jI)}(h eventpollh]h eventpoll}(hjekhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjbkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgkmodnameN classnameNjj )}j ]jkc.ep_loop_checkasbuh1hhjCkubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjCkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCkubjI)}(heph]hep}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjCkubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjjubjC)}(hstruct eventpoll *toh](j )}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjkubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjkubh)}(hhh]jI)}(h eventpollh]h eventpoll}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj )}j ]jkc.ep_loop_checkasbuh1hhjkubj2)}(h h]h }(hjkhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjkubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjI)}(htoh]hto}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjkubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjjhhhjjhM ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjjhhhjjhM ubah}(h]jjah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjjhM hjjhhubjw)}(hhh]h)}(hPerforms a check to verify that adding an epoll file (**to**) into another epoll file (represented by **ep**) does not create closed loops or too deep chains.h](h6Performs a check to verify that adding an epoll file (}(hj8lhhhNhNubj)}(h**to**h]hto}(hj@lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8lubh*) into another epoll file (represented by }(hj8lhhhNhNubj)}(h**ep**h]hep}(hjRlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8lubh2) does not create closed loops or too deep chains.}(hj8lhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chM hj5lhhubah}(h]h ]h"]h$]h&]uh1jvhjjhhhjjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtljjtljjjuh1jhhhj`hNhNubj)}(hXT**Parameters** ``struct ep_ctl_ctx *ctx`` Per-CTL_ADD scratch context. ``struct eventpoll *ep`` Pointer to the epoll we are inserting into. ``struct eventpoll *to`` Pointer to the epoll to be inserted. **Return** ``zero`` if adding the epoll **to** inside the epoll **from** does not violate the constraints, or ``-1`` otherwise.h](h)}(h**Parameters**h]j)}(hj~lh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|lubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chM hjxlubj)}(hhh](j)}(h8``struct ep_ctl_ctx *ctx`` Per-CTL_ADD scratch context. h](j)}(h``struct ep_ctl_ctx *ctx``h]j)}(hjlh]hstruct ep_ctl_ctx *ctx}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chM hjlubj)}(hhh]h)}(hPer-CTL_ADD scratch context.h]hPer-CTL_ADD scratch context.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjlubj)}(hE``struct eventpoll *ep`` Pointer to the epoll we are inserting into. h](j)}(h``struct eventpoll *ep``h]j)}(hjlh]hstruct eventpoll *ep}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chM hjlubj)}(hhh]h)}(h+Pointer to the epoll we are inserting into.h]h+Pointer to the epoll we are inserting into.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjlubj)}(h>``struct eventpoll *to`` Pointer to the epoll to be inserted. h](j)}(h``struct eventpoll *to``h]j)}(hjmh]hstruct eventpoll *to}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj mubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chM hj mubj)}(hhh]h)}(h$Pointer to the epoll to be inserted.h]h$Pointer to the epoll to be inserted.}(hj(mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$mhM hj%mubah}(h]h ]h"]h$]h&]uh1jhj mubeh}(h]h ]h"]h$]h&]uh1jhj$mhM hjlubeh}(h]h ]h"]h$]h&]uh1jhjxlubh)}(h **Return**h]j)}(hjJmh]hReturn}(hjLmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHmubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chM hjxlubh)}(ht``zero`` if adding the epoll **to** inside the epoll **from** does not violate the constraints, or ``-1`` otherwise.h](j)}(h``zero``h]hzero}(hjdmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`mubh if adding the epoll }(hj`mhhhNhNubj)}(h**to**h]hto}(hjvmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`mubh inside the epoll }(hj`mhhhNhNubj)}(h**from**h]hfrom}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`mubh& does not violate the constraints, or }(hj`mhhhNhNubj)}(h``-1``h]h-1}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`mubh otherwise.}(hj`mhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:128: ./fs/eventpoll.chM hjxlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubeh}(h]eventpoll-epoll-interfacesah ]h"]eventpoll (epoll) interfacesah$]h&]uh1hhhhhhhhK~ubh)}(hhh](h)}(h+The Filesystem for Exporting Kernel Objectsh]h+The Filesystem for Exporting Kernel Objects}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !sysfs_create_file_ns (C function)c.sysfs_create_file_nshNtauh1hhjmhhhNhNubj)}(hhh](j)}(hiint sysfs_create_file_ns (struct kobject *kobj, const struct attribute *attr, const struct ns_common *ns)h]j)}(hhint sysfs_create_file_ns(struct kobject *kobj, const struct attribute *attr, const struct ns_common *ns)h](jf)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjmhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMjubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjmhhhjmhMjubjC)}(hsysfs_create_file_nsh]jI)}(hsysfs_create_file_nsh]hsysfs_create_file_ns}(hj nhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj nubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjmhhhjmhMjubj=)}(hP(struct kobject *kobj, const struct attribute *attr, const struct ns_common *ns)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hj)nhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%nubj2)}(h h]h }(hj6nhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%nubh)}(hhh]jI)}(hkobjecth]hkobject}(hjGnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjInmodnameN classnameNjj )}j ]j)}jjnsbc.sysfs_create_file_nsasbuh1hhj%nubj2)}(h h]h }(hjgnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj%nubj)}(hjh]h*}(hjunhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%nubjI)}(hkobjh]hkobj}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj%nubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!nubjC)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hjnhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjnubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubj )}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjnubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubh)}(hhh]jI)}(h attributeh]h attribute}(hjnhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]jcnc.sysfs_create_file_nsasbuh1hhjnubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjnubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjI)}(hattrh]hattr}(hj ohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjnubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!nubjC)}(hconst struct ns_common *nsh](j )}(hjh]hconst}(hj&ohhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj"oubj2)}(h h]h }(hj3ohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj"oubj )}(hjh]hstruct}(hjAohhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj"oubj2)}(h h]h }(hjNohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj"oubh)}(hhh]jI)}(h ns_commonh]h ns_common}(hj_ohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj\oubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjaomodnameN classnameNjj )}j ]jcnc.sysfs_create_file_nsasbuh1hhj"oubj2)}(h h]h }(hj}ohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj"oubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"oubjI)}(hnsh]hns}(hjohhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"oubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj!nubeh}(h]h ]h"]h$]h&]j`jauh1j<hjmhhhjmhMjubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjmhhhjmhMjubah}(h]jmah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjmhMjhjmhhubjw)}(hhh]h)}(h5create an attribute file for an object with custom nsh]h5create an attribute file for an object with custom ns}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMjhjohhubah}(h]h ]h"]h$]h&]uh1jvhjmhhhjmhMjubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct kobject *kobj`` object we're creating for ``const struct attribute *attr`` attribute descriptor ``const struct ns_common *ns`` namespace the new file should belong toh](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMnhjoubj)}(hhh](j)}(h3``struct kobject *kobj`` object we're creating for h](j)}(h``struct kobject *kobj``h]j)}(hjph]hstruct kobject *kobj}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMkhjoubj)}(hhh]h)}(hobject we're creating forh]hobject we’re creating for}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMkhjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjphMkhjoubj)}(h6``const struct attribute *attr`` attribute descriptor h](j)}(h ``const struct attribute *attr``h]j)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:pubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMlhj6pubj)}(hhh]h)}(hattribute descriptorh]hattribute descriptor}(hjUphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQphMlhjRpubah}(h]h ]h"]h$]h&]uh1jhj6pubeh}(h]h ]h"]h$]h&]uh1jhjQphMlhjoubj)}(hF``const struct ns_common *ns`` namespace the new file should belong toh](j)}(h``const struct ns_common *ns``h]j)}(hjuph]hconst struct ns_common *ns}(hjwphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjspubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMnhjopubj)}(hhh]h)}(h'namespace the new file should belong toh]h'namespace the new file should belong to}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMmhjpubah}(h]h ]h"]h$]h&]uh1jhjopubeh}(h]h ]h"]h$]h&]uh1jhjphMnhjoubeh}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $sysfs_add_file_to_group (C function)c.sysfs_add_file_to_grouphNtauh1hhjmhhhNhNubj)}(hhh](j)}(hcint sysfs_add_file_to_group (struct kobject *kobj, const struct attribute *attr, const char *group)h]j)}(hbint sysfs_add_file_to_group(struct kobject *kobj, const struct attribute *attr, const char *group)h](jf)}(hinth]hint}(hjphhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjphhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjphhhjphMubjC)}(hsysfs_add_file_to_grouph]jI)}(hsysfs_add_file_to_grouph]hsysfs_add_file_to_group}(hjphhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjpubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjphhhjphMubj=)}(hG(struct kobject *kobj, const struct attribute *attr, const char *group)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hj qhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjqubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqubh)}(hhh]jI)}(hkobjecth]hkobject}(hj*qhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'qubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,qmodnameN classnameNjj )}j ]j)}jjpsbc.sysfs_add_file_to_groupasbuh1hhjqubj2)}(h h]h }(hjJqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjqubj)}(hjh]h*}(hjXqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjI)}(hkobjh]hkobj}(hjeqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjqubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjqubjC)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hj~qhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzqubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzqubj )}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzqubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzqubh)}(hhh]jI)}(h attributeh]h attribute}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj )}j ]jFqc.sysfs_add_file_to_groupasbuh1hhjzqubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzqubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzqubjI)}(hattrh]hattr}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzqubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjqubjC)}(hconst char *grouph](j )}(hjh]hconst}(hj rhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjrubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrubjf)}(hcharh]hchar}(hj$rhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjrubj2)}(h h]h }(hj2rhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrubj)}(hjh]h*}(hj@rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjI)}(hgrouph]hgroup}(hjMrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjqubeh}(h]h ]h"]h$]h&]j`jauh1j<hjphhhjphMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjphhhjphMubah}(h]jpah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjphMhjphhubjw)}(hhh]h)}(h.add an attribute file to a pre-existing group.h]h.add an attribute file to a pre-existing group.}(hjwrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjtrhhubah}(h]h ]h"]h$]h&]uh1jvhjphhhjphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjrjjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct kobject *kobj`` object we're acting for. ``const struct attribute *attr`` attribute descriptor. ``const char *group`` group name.h](h)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjrubj)}(hhh](j)}(h2``struct kobject *kobj`` object we're acting for. h](j)}(h``struct kobject *kobj``h]j)}(hjrh]hstruct kobject *kobj}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjrubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjrubj)}(h7``const struct attribute *attr`` attribute descriptor. h](j)}(h ``const struct attribute *attr``h]j)}(hjrh]hconst struct attribute *attr}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjrubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjshMhjrubj)}(h!``const char *group`` group name.h](j)}(h``const char *group``h]j)}(hj*sh]hconst char *group}(hj,shhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(subah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj$subj)}(hhh]h)}(h group name.h]h group name.}(hjCshhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj@subah}(h]h ]h"]h$]h&]uh1jhj$subeh}(h]h ]h"]h$]h&]uh1jhj?shMhjrubeh}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j sysfs_chmod_file (C function)c.sysfs_chmod_filehNtauh1hhjmhhhNhNubj)}(hhh](j)}(hWint sysfs_chmod_file (struct kobject *kobj, const struct attribute *attr, umode_t mode)h]j)}(hVint sysfs_chmod_file(struct kobject *kobj, const struct attribute *attr, umode_t mode)h](jf)}(hinth]hint}(hjshhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjshhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjshhhjshMubjC)}(hsysfs_chmod_fileh]jI)}(hsysfs_chmod_fileh]hsysfs_chmod_file}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjshhhjshMubj=)}(hB(struct kobject *kobj, const struct attribute *attr, umode_t mode)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjsubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubh)}(hhh]jI)}(hkobjecth]hkobject}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj )}j ]j)}jjssbc.sysfs_chmod_fileasbuh1hhjsubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjsubj)}(hjh]h*}(hj thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjI)}(hkobjh]hkobj}(hjthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjsubjC)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hj3thhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj/tubj2)}(h h]h }(hj@thhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/tubj )}(hjh]hstruct}(hjNthhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj/tubj2)}(h h]h }(hj[thhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/tubh)}(hhh]jI)}(h attributeh]h attribute}(hjlthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjitubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjntmodnameN classnameNjj )}j ]jsc.sysfs_chmod_fileasbuh1hhj/tubj2)}(h h]h }(hjthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj/tubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/tubjI)}(hattrh]hattr}(hjthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj/tubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjsubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj )}j ]jsc.sysfs_chmod_fileasbuh1hhjtubj2)}(h h]h }(hjthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjtubjI)}(hmodeh]hmode}(hjthhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjtubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjsubeh}(h]h ]h"]h$]h&]j`jauh1j<hjshhhjshMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj|shhhjshMubah}(h]jwsah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjshMhjyshhubjw)}(hhh]h)}(h6update the modified mode value on an object attribute.h]h6update the modified mode value on an object attribute.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jvhjyshhhjshMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/ujj/ujjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct kobject *kobj`` object we're acting for. ``const struct attribute *attr`` attribute descriptor. ``umode_t mode`` file permissions.h](h)}(h**Parameters**h]j)}(hj9uh]h Parameters}(hj;uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7uubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj3uubj)}(hhh](j)}(h2``struct kobject *kobj`` object we're acting for. h](j)}(h``struct kobject *kobj``h]j)}(hjXuh]hstruct kobject *kobj}(hjZuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVuubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjRuubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(hjquhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmuhMhjnuubah}(h]h ]h"]h$]h&]uh1jhjRuubeh}(h]h ]h"]h$]h&]uh1jhjmuhMhjOuubj)}(h7``const struct attribute *attr`` attribute descriptor. h](j)}(h ``const struct attribute *attr``h]j)}(hjuh]hconst struct attribute *attr}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjuubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjOuubj)}(h"``umode_t mode`` file permissions.h](j)}(h``umode_t mode``h]j)}(hjuh]h umode_t mode}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjuubj)}(hhh]h)}(hfile permissions.h]hfile permissions.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjOuubeh}(h]h ]h"]h$]h&]uh1jhj3uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j *sysfs_break_active_protection (C function)c.sysfs_break_active_protectionhNtauh1hhjmhhhNhNubj)}(hhh](j)}(hgstruct kernfs_node * sysfs_break_active_protection (struct kobject *kobj, const struct attribute *attr)h]j)}(hestruct kernfs_node *sysfs_break_active_protection(struct kobject *kobj, const struct attribute *attr)h](j )}(hjh]hstruct}(hj$vhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj vhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMubj2)}(h h]h }(hj2vhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj vhhhj1vhMubh)}(hhh]jI)}(h kernfs_nodeh]h kernfs_node}(hjCvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEvmodnameN classnameNjj )}j ]j)}jsysfs_break_active_protectionsbc.sysfs_break_active_protectionasbuh1hhj vhhhj1vhMubj2)}(h h]h }(hjdvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj vhhhj1vhMubj)}(hjh]h*}(hjrvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj vhhhj1vhMubjC)}(hsysfs_break_active_protectionh]jI)}(hjavh]hsysfs_break_active_protection}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj vhhhj1vhMubj=)}(h4(struct kobject *kobj, const struct attribute *attr)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjvubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvubh)}(hhh]jI)}(hkobjecth]hkobject}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj )}j ]j_vc.sysfs_break_active_protectionasbuh1hhjvubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjI)}(hkobjh]hkobj}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hjwhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj wubj2)}(h h]h }(hjwhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj wubj )}(hjh]hstruct}(hj)whhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj wubj2)}(h h]h }(hj6whhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj wubh)}(hhh]jI)}(h attributeh]h attribute}(hjGwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjIwmodnameN classnameNjj )}j ]j_vc.sysfs_break_active_protectionasbuh1hhj wubj2)}(h h]h }(hjewhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj wubj)}(hjh]h*}(hjswhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj wubjI)}(hattrh]hattr}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj wubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubeh}(h]h ]h"]h$]h&]j`jauh1j<hj vhhhj1vhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjvhhhj1vhMubah}(h]jvah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj1vhMhjvhhubjw)}(hhh]h)}(hbreak "active" protectionh]hbreak “active” protection}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjwhhubah}(h]h ]h"]h$]h&]uh1jvhjvhhhj1vhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jhhhjmhNhNubj)}(hX**Parameters** ``struct kobject *kobj`` The kernel object **attr** is associated with. ``const struct attribute *attr`` The attribute to break the "active" protection for. **Description** With sysfs, just like kernfs, deletion of an attribute is postponed until all active .show() and .store() callbacks have finished unless this function is called. Hence this function is useful in methods that implement self deletion.h](h)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjwubj)}(hhh](j)}(hH``struct kobject *kobj`` The kernel object **attr** is associated with. h](j)}(h``struct kobject *kobj``h]j)}(hjwh]hstruct kobject *kobj}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjwubj)}(hhh]h)}(h.The kernel object **attr** is associated with.h](hThe kernel object }(hjxhhhNhNubj)}(h**attr**h]hattr}(hj xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh is associated with.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjwubj)}(hU``const struct attribute *attr`` The attribute to break the "active" protection for. h](j)}(h ``const struct attribute *attr``h]j)}(hj6xh]hconst struct attribute *attr}(hj8xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4xubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj0xubj)}(hhh]h)}(h3The attribute to break the "active" protection for.h]h7The attribute to break the “active” protection for.}(hjOxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKxhMhjLxubah}(h]h ]h"]h$]h&]uh1jhj0xubeh}(h]h ]h"]h$]h&]uh1jhjKxhMhjwubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**Description**h]j)}(hjqxh]h Description}(hjsxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoxubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjwubh)}(hWith sysfs, just like kernfs, deletion of an attribute is postponed until all active .show() and .store() callbacks have finished unless this function is called. Hence this function is useful in methods that implement self deletion.h]hWith sysfs, just like kernfs, deletion of an attribute is postponed until all active .show() and .store() callbacks have finished unless this function is called. Hence this function is useful in methods that implement self deletion.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j ,sysfs_unbreak_active_protection (C function)!c.sysfs_unbreak_active_protectionhNtauh1hhjmhhhNhNubj)}(hhh](j)}(h=void sysfs_unbreak_active_protection (struct kernfs_node *kn)h]j)}(hah"]h$]h&]uh1j1hjxhhhjxhMubjC)}(hsysfs_unbreak_active_protectionh]jI)}(hsysfs_unbreak_active_protectionh]hsysfs_unbreak_active_protection}(hjxhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjxubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjxhhhjxhMubj=)}(h(struct kernfs_node *kn)h]jC)}(hstruct kernfs_node *knh](j )}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjxubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubh)}(hhh]jI)}(h kernfs_nodeh]h kernfs_node}(hjyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj )}j ]j)}jjxsb!c.sysfs_unbreak_active_protectionasbuh1hhjxubj2)}(h h]h }(hj1yhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubj)}(hjh]h*}(hj?yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjI)}(hknh]hkn}(hjLyhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjxubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjxubah}(h]h ]h"]h$]h&]j`jauh1j<hjxhhhjxhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjxhhhjxhMubah}(h]jxah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjxhMhjxhhubjw)}(hhh]h)}(hrestore "active" protectionh]hrestore “active” protection}(hjvyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjsyhhubah}(h]h ]h"]h$]h&]uh1jvhjxhhhjxhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1jhhhjmhNhNubj)}(hX**Parameters** ``struct kernfs_node *kn`` Pointer returned by sysfs_break_active_protection(). **Description** Undo the effects of sysfs_break_active_protection(). Since this function calls kernfs_put() on the kernfs node that corresponds to the 'attr' argument passed to sysfs_break_active_protection() that attribute may have been removed between the sysfs_break_active_protection() and sysfs_unbreak_active_protection() calls, it is not safe to access **kn** after this function has returned.h](h)}(h**Parameters**h]j)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjyubj)}(hhh]j)}(hP``struct kernfs_node *kn`` Pointer returned by sysfs_break_active_protection(). h](j)}(h``struct kernfs_node *kn``h]j)}(hjyh]hstruct kernfs_node *kn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjyubj)}(hhh]h)}(h4Pointer returned by sysfs_break_active_protection().h]h4Pointer returned by sysfs_break_active_protection().}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubh)}(h**Description**h]j)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjyubh)}(hXUndo the effects of sysfs_break_active_protection(). Since this function calls kernfs_put() on the kernfs node that corresponds to the 'attr' argument passed to sysfs_break_active_protection() that attribute may have been removed between the sysfs_break_active_protection() and sysfs_unbreak_active_protection() calls, it is not safe to access **kn** after this function has returned.h](hX\Undo the effects of sysfs_break_active_protection(). Since this function calls kernfs_put() on the kernfs node that corresponds to the ‘attr’ argument passed to sysfs_break_active_protection() that attribute may have been removed between the sysfs_break_active_protection() and sysfs_unbreak_active_protection() calls, it is not safe to access }(hjzhhhNhNubj)}(h**kn**h]hkn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh" after this function has returned.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !sysfs_remove_file_ns (C function)c.sysfs_remove_file_nshNtauh1hhjmhhhNhNubj)}(hhh](j)}(hjvoid sysfs_remove_file_ns (struct kobject *kobj, const struct attribute *attr, const struct ns_common *ns)h]j)}(hivoid sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr, const struct ns_common *ns)h](jf)}(hvoidh]hvoid}(hjIzhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjEzhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMubj2)}(h h]h }(hjXzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEzhhhjWzhMubjC)}(hsysfs_remove_file_nsh]jI)}(hsysfs_remove_file_nsh]hsysfs_remove_file_ns}(hjjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfzubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjEzhhhjWzhMubj=)}(hP(struct kobject *kobj, const struct attribute *attr, const struct ns_common *ns)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubh)}(hhh]jI)}(hkobjecth]hkobject}(hjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj )}j ]j)}jjlzsbc.sysfs_remove_file_nsasbuh1hhjzubj2)}(h h]h }(hjzhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjI)}(hkobjh]hkobj}(hjzhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj~zubjC)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj )}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hj {hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubh)}(hhh]jI)}(h attributeh]h attribute}(hj1{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3{modnameN classnameNjj )}j ]jzc.sysfs_remove_file_nsasbuh1hhjzubj2)}(h h]h }(hjO{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj)}(hjh]h*}(hj]{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjI)}(hattrh]hattr}(hjj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj~zubjC)}(hconst struct ns_common *nsh](j )}(hjh]hconst}(hj{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj{ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj{ubj )}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj{ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj{ubh)}(hhh]jI)}(h ns_commonh]h ns_common}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj )}j ]jzc.sysfs_remove_file_nsasbuh1hhj{ubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubjI)}(hnsh]hns}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj~zubeh}(h]h ]h"]h$]h&]j`jauh1j<hjEzhhhjWzhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjAzhhhjWzhMubah}(h]jzhhubjw)}(hhh]h)}(h/remove an object attribute with a custom ns tagh]h/remove an object attribute with a custom ns tag}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jvhj>zhhhjWzhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7|jj7|jjjuh1jhhhjmhNhNubj)}(hX**Parameters** ``struct kobject *kobj`` object we're acting for ``const struct attribute *attr`` attribute descriptor ``const struct ns_common *ns`` namespace tag of the file to remove **Description** Hash the attribute name and namespace tag and kill the victim.h](h)}(h**Parameters**h]j)}(hjA|h]h Parameters}(hjC|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?|ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj;|ubj)}(hhh](j)}(h1``struct kobject *kobj`` object we're acting for h](j)}(h``struct kobject *kobj``h]j)}(hj`|h]hstruct kobject *kobj}(hjb|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^|ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjZ|ubj)}(hhh]h)}(hobject we're acting forh]hobject we’re acting for}(hjy|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju|hMhjv|ubah}(h]h ]h"]h$]h&]uh1jhjZ|ubeh}(h]h ]h"]h$]h&]uh1jhju|hMhjW|ubj)}(h6``const struct attribute *attr`` attribute descriptor h](j)}(h ``const struct attribute *attr``h]j)}(hj|h]hconst struct attribute *attr}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj|ubj)}(hhh]h)}(hattribute descriptorh]hattribute descriptor}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhjW|ubj)}(hC``const struct ns_common *ns`` namespace tag of the file to remove h](j)}(h``const struct ns_common *ns``h]j)}(hj|h]hconst struct ns_common *ns}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj|ubj)}(hhh]h)}(h#namespace tag of the file to removeh]h#namespace tag of the file to remove}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhjW|ubeh}(h]h ]h"]h$]h&]uh1jhj;|ubh)}(h**Description**h]j)}(hj }h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj }ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj;|ubh)}(h>Hash the attribute name and namespace tag and kill the victim.h]h>Hash the attribute name and namespace tag and kill the victim.}(hj#}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj;|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #sysfs_remove_file_self (C function)c.sysfs_remove_file_selfhNtauh1hhjmhhhNhNubj)}(hhh](j)}(hPbool sysfs_remove_file_self (struct kobject *kobj, const struct attribute *attr)h]j)}(hObool sysfs_remove_file_self(struct kobject *kobj, const struct attribute *attr)h](jf)}(hjih]hbool}(hjR}hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjN}hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMubj2)}(h h]h }(hj`}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjN}hhhj_}hMubjC)}(hsysfs_remove_file_selfh]jI)}(hsysfs_remove_file_selfh]hsysfs_remove_file_self}(hjr}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjn}ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjN}hhhj_}hMubj=)}(h4(struct kobject *kobj, const struct attribute *attr)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubh)}(hhh]jI)}(hkobjecth]hkobject}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj )}j ]j)}jjt}sbc.sysfs_remove_file_selfasbuh1hhj}ubj2)}(h h]h }(hj}hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjI)}(hkobjh]hkobj}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj}ubjC)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hj~hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj2)}(h h]h }(hj ~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubj )}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj2)}(h h]h }(hj(~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubh)}(hhh]jI)}(h attributeh]h attribute}(hj9~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;~modnameN classnameNjj )}j ]j}c.sysfs_remove_file_selfasbuh1hhj}ubj2)}(h h]h }(hjW~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj}ubj)}(hjh]h*}(hje~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjI)}(hattrh]hattr}(hjr~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj}ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjN}hhhj_}hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjJ}hhhj_}hMubah}(h]jE}ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj_}hMhjG}hhubjw)}(hhh]h)}(h.remove an object attribute from its own methodh]h.remove an object attribute from its own method}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jvhjG}hhhj_}hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct kobject *kobj`` object we're acting for ``const struct attribute *attr`` attribute descriptor **Description** See kernfs_remove_self() for details.h](h)}(h**Parameters**h]j)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM hj~ubj)}(hhh](j)}(h1``struct kobject *kobj`` object we're acting for h](j)}(h``struct kobject *kobj``h]j)}(hj~h]hstruct kobject *kobj}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM hj~ubj)}(hhh]h)}(hobject we're acting forh]hobject we’re acting for}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM hj~ubj)}(h6``const struct attribute *attr`` attribute descriptor h](j)}(h ``const struct attribute *attr``h]j)}(hjh]hconst struct attribute *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM hjubj)}(hhh]h)}(hattribute descriptorh]hattribute descriptor}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubh)}(h**Description**h]j)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM hj~ubh)}(h%See kernfs_remove_self() for details.h]h%See kernfs_remove_self() for details.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j )sysfs_remove_file_from_group (C function)c.sysfs_remove_file_from_grouphNtauh1hhjmhhhNhNubj)}(hhh](j)}(hivoid sysfs_remove_file_from_group (struct kobject *kobj, const struct attribute *attr, const char *group)h]j)}(hhvoid sysfs_remove_file_from_group(struct kobject *kobj, const struct attribute *attr, const char *group)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM)ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM)ubjC)}(hsysfs_remove_file_from_grouph]jI)}(hsysfs_remove_file_from_grouph]hsysfs_remove_file_from_group}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM)ubj=)}(hG(struct kobject *kobj, const struct attribute *attr, const char *group)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.sysfs_remove_file_from_groupasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hkobjh]hkobj}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hjEhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjAubj2)}(h h]h }(hjRhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubj )}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjAubj2)}(h h]h }(hjmhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubh)}(hhh]jI)}(h attributeh]h attribute}(hj~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j c.sysfs_remove_file_from_groupasbuh1hhjAubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjAubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjI)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjAubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *grouph](j )}(hjh]hconst}(hjЀhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj̀ubj2)}(h h]h }(hj݀hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj̀ubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj̀ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj̀ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̀ubjI)}(hgrouph]hgroup}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj̀ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM)ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM)ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM)hjhhubjw)}(hhh]h)}(h&remove an attribute file from a group.h]h&remove an attribute file from a group.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM)hj;hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct kobject *kobj`` object we're acting for. ``const struct attribute *attr`` attribute descriptor. ``const char *group`` group name.h](h)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM-hjZubj)}(hhh](j)}(h2``struct kobject *kobj`` object we're acting for. h](j)}(h``struct kobject *kobj``h]j)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM*hjyubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjvubj)}(h7``const struct attribute *attr`` attribute descriptor. h](j)}(h ``const struct attribute *attr``h]j)}(hjh]hconst struct attribute *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM+hjubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hjсhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj́hM+hj΁ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj́hM+hjvubj)}(h!``const char *group`` group name.h](j)}(h``const char *group``h]j)}(hjh]hconst char *group}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM-hjubj)}(hhh]h)}(h group name.h]h group name.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjvubeh}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "sysfs_create_bin_file (C function)c.sysfs_create_bin_filehNtauh1hhjmhhhNhNubj)}(hhh](j)}(hRint sysfs_create_bin_file (struct kobject *kobj, const struct bin_attribute *attr)h]j)}(hQint sysfs_create_bin_file(struct kobject *kobj, const struct bin_attribute *attr)h](jf)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjGhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMBubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjGhhhjYhMBubjC)}(hsysfs_create_bin_fileh]jI)}(hsysfs_create_bin_fileh]hsysfs_create_bin_file}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjGhhhjYhMBubj=)}(h8(struct kobject *kobj, const struct bin_attribute *attr)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjnsbc.sysfs_create_bin_fileasbuh1hhjubj2)}(h h]h }(hjƂhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjԂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h const struct bin_attribute *attrh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj"hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h bin_attributeh]h bin_attribute}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj )}j ]j‚c.sysfs_create_bin_fileasbuh1hhjubj2)}(h h]h }(hjQhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hattrh]hattr}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjGhhhjYhMBubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjChhhjYhMBubah}(h]j>ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjYhMBhj@hhubjw)}(hhh]h)}(hcreate binary file for object.h]hcreate binary file for object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMBhjhhubah}(h]h ]h"]h$]h&]uh1jvhj@hhhjYhMBubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(hp**Parameters** ``struct kobject *kobj`` object. ``const struct bin_attribute *attr`` attribute descriptor.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMFhjubj)}(hhh](j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]j)}(hj׃h]hstruct kobject *kobj}(hjكhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՃubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMChjуubj)}(hhh]h)}(hobject.h]hobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjуubeh}(h]h ]h"]h$]h&]uh1jhjhMChj΃ubj)}(h:``const struct bin_attribute *attr`` attribute descriptor.h](j)}(h$``const struct bin_attribute *attr``h]j)}(hjh]h const struct bin_attribute *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMEhj ubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMDhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMEhj΃ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "sysfs_remove_bin_file (C function)c.sysfs_remove_bin_filehNtauh1hhjmhhhNhNubj)}(hhh](j)}(hSvoid sysfs_remove_bin_file (struct kobject *kobj, const struct bin_attribute *attr)h]j)}(hRvoid sysfs_remove_bin_file(struct kobject *kobj, const struct bin_attribute *attr)h](jf)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjfhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMVubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfhhhjxhMVubjC)}(hsysfs_remove_bin_fileh]jI)}(hsysfs_remove_bin_fileh]hsysfs_remove_bin_file}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjfhhhjxhMVubj=)}(h8(struct kobject *kobj, const struct bin_attribute *attr)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkobjecth]hkobject}(hjńhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj„ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDŽmodnameN classnameNjj )}j ]j)}jjsbc.sysfs_remove_bin_fileasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h const struct bin_attribute *attrh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj&hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjAhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h bin_attributeh]h bin_attribute}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj )}j ]jc.sysfs_remove_bin_fileasbuh1hhjubj2)}(h h]h }(hjphhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjfhhhjxhMVubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjbhhhjxhMVubah}(h]j]ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjxhMVhj_hhubjw)}(hhh]h)}(hremove binary file for object.h]hremove binary file for object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMVhjhhubah}(h]h ]h"]h$]h&]uh1jvhj_hhhjxhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjͅjjͅjjjuh1jhhhjmhNhNubj)}(hp**Parameters** ``struct kobject *kobj`` object. ``const struct bin_attribute *attr`` attribute descriptor.h](h)}(h**Parameters**h]j)}(hjׅh]h Parameters}(hjمhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՅubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMZhjхubj)}(hhh](j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]j)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMWhjubj)}(hhh]h)}(hobject.h]hobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMWhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMWhjubj)}(h:``const struct bin_attribute *attr`` attribute descriptor.h](j)}(h$``const struct bin_attribute *attr``h]j)}(hj/h]h const struct bin_attribute *attr}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMYhj)ubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMXhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMYhjubeh}(h]h ]h"]h$]h&]uh1jhjхubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j sysfs_emit (C function) c.sysfs_emithNtauh1hhjmhhhNhNubj)}(hhh](j)}(h0int sysfs_emit (char *buf, const char *fmt, ...)h]j)}(h/int sysfs_emit(char *buf, const char *fmt, ...)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(h sysfs_emith]jI)}(h sysfs_emith]h sysfs_emit}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h!(char *buf, const char *fmt, ...)h](jC)}(h char *bufh](jf)}(hcharh]hchar}(hjƆhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj†ubj2)}(h h]h }(hjԆhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj†ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj†ubjI)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj†ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *fmth](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hj#hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfmth]hfmt}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h...h]j)}(h...h]h...}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]j|ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhj~hhubjw)}(hhh]h)}(h0scnprintf equivalent, aware of PAGE_SIZE buffer.h]h0scnprintf equivalent, aware of PAGE_SIZE buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj~hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(h**Parameters** ``char *buf`` start of PAGE_SIZE buffer. ``const char *fmt`` format ``...`` optional arguments to **format** **Description** Returns number of characters written to **buf**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubj)}(hhh](j)}(h)``char *buf`` start of PAGE_SIZE buffer. h](j)}(h ``char *buf``h]j)}(hjЇh]h char *buf}(hj҇hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj·ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjʇubj)}(hhh]h)}(hstart of PAGE_SIZE buffer.h]hstart of PAGE_SIZE buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjʇubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLJubj)}(h``const char *fmt`` format h](j)}(h``const char *fmt``h]j)}(hj h]hconst char *fmt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubj)}(hhh]h)}(hformath]hformat}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLJubj)}(h)``...`` optional arguments to **format** h](j)}(h``...``h]j)}(hjBh]h...}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj<ubj)}(hhh]h)}(h optional arguments to **format**h](hoptional arguments to }(hj[hhhNhNubj)}(h **format**h]hformat}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjLJubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubh)}(h0Returns number of characters written to **buf**.h](h(Returns number of characters written to }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j sysfs_emit_at (C function)c.sysfs_emit_athNtauh1hhjmhhhNhNubj)}(hhh](j)}(h;int sysfs_emit_at (char *buf, int at, const char *fmt, ...)h]j)}(h:int sysfs_emit_at(char *buf, int at, const char *fmt, ...)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjވhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjވhhhjhMubjC)}(h sysfs_emit_ath]jI)}(h sysfs_emit_ath]h sysfs_emit_at}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjވhhhjhMubj=)}(h)(char *buf, int at, const char *fmt, ...)h](jC)}(h char *bufh](jf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbufh]hbuf}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hint ath](jf)}(hinth]hint}(hjahhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj]ubj2)}(h h]h }(hjohhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]ubjI)}(hath]hat}(hj}hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *fmth](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj͉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfmth]hfmt}(hjډhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h...h]j)}(hjgh]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjވhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjڈhhhjhMubah}(h]jՈah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhj׈hhubjw)}(hhh]h)}(h0scnprintf equivalent, aware of PAGE_SIZE buffer.h]h0scnprintf equivalent, aware of PAGE_SIZE buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj׈hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1jhhhjmhNhNubj)}(hX3**Parameters** ``char *buf`` start of PAGE_SIZE buffer. ``int at`` offset in **buf** to start write in bytes **at** must be >= 0 && < PAGE_SIZE ``const char *fmt`` format ``...`` optional arguments to **fmt** **Description** Returns number of characters written starting at &**buf**[**at**].h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj8ubj)}(hhh](j)}(h)``char *buf`` start of PAGE_SIZE buffer. h](j)}(h ``char *buf``h]j)}(hj]h]h char *buf}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjWubj)}(hhh]h)}(hstart of PAGE_SIZE buffer.h]hstart of PAGE_SIZE buffer.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(hX``int at`` offset in **buf** to start write in bytes **at** must be >= 0 && < PAGE_SIZE h](j)}(h ``int at``h]j)}(hjh]hint at}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubj)}(hhh]h)}(hLoffset in **buf** to start write in bytes **at** must be >= 0 && < PAGE_SIZEh](h offset in }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to start write in bytes }(hjhhhNhNubj)}(h**at**h]hat}(hjɊhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh must be >= 0 && < PAGE_SIZE}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h``const char *fmt`` format h](j)}(h``const char *fmt``h]j)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubj)}(hhh]h)}(hformath]hformat}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjTubj)}(h&``...`` optional arguments to **fmt** h](j)}(h``...``h]j)}(hj-h]h...}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj'ubj)}(hhh]h)}(hoptional arguments to **fmt**h](hoptional arguments to }(hjFhhhNhNubj)}(h**fmt**h]hfmt}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubh)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj8ubh)}(hBReturns number of characters written starting at &**buf**[**at**].h](h:Returns number of characters written starting at &**buf**[}(hjhhhNhNubj)}(h**at**h]hat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh].}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'sysfs_bin_attr_simple_read (C function)c.sysfs_bin_attr_simple_readhNtauh1hhjmhhhNhNubj)}(hhh](j)}(hssize_t sysfs_bin_attr_simple_read (struct file *file, struct kobject *kobj, const struct bin_attribute *attr, char *buf, loff_t off, size_t count)h]j)}(hssize_t sysfs_bin_attr_simple_read(struct file *file, struct kobject *kobj, const struct bin_attribute *attr, char *buf, loff_t off, size_t count)h](h)}(hhh]jI)}(hssize_th]hssize_t}(hjЋhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj͋ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjҋmodnameN classnameNjj )}j ]j)}jsysfs_bin_attr_simple_readsbc.sysfs_bin_attr_simple_readasbuh1hhjɋhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjɋhhhjhMubjC)}(hsysfs_bin_attr_simple_readh]jI)}(hjh]hsysfs_bin_attr_simple_read}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjɋhhhjhMubj=)}(hp(struct file *file, struct kobject *kobj, const struct bin_attribute *attr, char *buf, loff_t off, size_t count)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfileh]hfile}(hj=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj )}j ]jc.sysfs_bin_attr_simple_readasbuh1hhjubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfileh]hfile}(hjvhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.sysfs_bin_attr_simple_readasbuh1hhjubj2)}(h h]h }(hjˌhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjٌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h const struct bin_attribute *attrh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h bin_attributeh]h bin_attribute}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj )}j ]jc.sysfs_bin_attr_simple_readasbuh1hhjubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hattrh]hattr}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h char *bufh](jf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h loff_t offh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjύhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj̍ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjэmodnameN classnameNjj )}j ]jc.sysfs_bin_attr_simple_readasbuh1hhjȍubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjȍubjI)}(hoffh]hoff}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjȍubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h size_t counth](h)}(hhh]jI)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.sysfs_bin_attr_simple_readasbuh1hhjubj2)}(h h]h }(hj5hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hcounth]hcount}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjɋhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjŋhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhj‹hhubjw)}(hhh]h)}(h)read callback to simply copy from memory.h]h)read callback to simply copy from memory.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jvhj‹hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(hX**Parameters** ``struct file *file`` attribute file which is being read. ``struct kobject *kobj`` object to which the attribute belongs. ``const struct bin_attribute *attr`` attribute descriptor. ``char *buf`` destination buffer. ``loff_t off`` offset in bytes from which to read. ``size_t count`` maximum number of bytes to read. **Description** Simple ->read() callback for bin_attributes backed by a buffer in memory. The **private** and **size** members in struct bin_attribute must be set to the buffer's location and size before the bin_attribute is created in sysfs. Bounds check for **off** and **count** is done in sysfs_kf_bin_read(). Negative value check for **off** is done in vfs_setpos() and default_llseek(). Returns number of bytes written to **buf**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM!hjubj)}(hhh](j)}(h:``struct file *file`` attribute file which is being read. h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubj)}(hhh]h)}(h#attribute file which is being read.h]h#attribute file which is being read.}(hjǎhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjÎhMhjĎubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjÎhMhjubj)}(h@``struct kobject *kobj`` object to which the attribute belongs. h](j)}(h``struct kobject *kobj``h]j)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chMhjubj)}(hhh]h)}(h&object to which the attribute belongs.h]h&object to which the attribute belongs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``const struct bin_attribute *attr`` attribute descriptor. h](j)}(h$``const struct bin_attribute *attr``h]j)}(hj h]h const struct bin_attribute *attr}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM hjubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hM hjubj)}(h"``char *buf`` destination buffer. h](j)}(h ``char *buf``h]j)}(hjYh]h char *buf}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM!hjSubj)}(hhh]h)}(hdestination buffer.h]hdestination buffer.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM!hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM!hjubj)}(h3``loff_t off`` offset in bytes from which to read. h](j)}(h``loff_t off``h]j)}(hjh]h loff_t off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM"hjubj)}(hhh]h)}(h#offset in bytes from which to read.h]h#offset in bytes from which to read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h2``size_t count`` maximum number of bytes to read. h](j)}(h``size_t count``h]j)}(hjˏh]h size_t count}(hj͏hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɏubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM#hjŏubj)}(hhh]h)}(h maximum number of bytes to read.h]h maximum number of bytes to read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjŏubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM%hjubh)}(hSimple ->read() callback for bin_attributes backed by a buffer in memory. The **private** and **size** members in struct bin_attribute must be set to the buffer's location and size before the bin_attribute is created in sysfs.h](hNSimple ->read() callback for bin_attributes backed by a buffer in memory. The }(hjhhhNhNubj)}(h **private**h]hprivate}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**size**h]hsize}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh~ members in struct bin_attribute must be set to the buffer’s location and size before the bin_attribute is created in sysfs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM$hjubh)}(hBounds check for **off** and **count** is done in sysfs_kf_bin_read(). Negative value check for **off** is done in vfs_setpos() and default_llseek().h](hBounds check for }(hjOhhhNhNubj)}(h**off**h]hoff}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh and }(hjOhhhNhNubj)}(h **count**h]hcount}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh: is done in sysfs_kf_bin_read(). Negative value check for }(hjOhhhNhNubj)}(h**off**h]hoff}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh. is done in vfs_setpos() and default_llseek().}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM(hjubh)}(h+Returns number of bytes written to **buf**.h](h#Returns number of bytes written to }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/file.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j sysfs_create_link (C function)c.sysfs_create_linkhNtauh1hhjmhhhNhNubj)}(hhh](j)}(hVint sysfs_create_link (struct kobject *kobj, struct kobject *target, const char *name)h]j)}(hUint sysfs_create_link(struct kobject *kobj, struct kobject *target, const char *name)h](jf)}(hinth]hint}(hjՐhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjѐhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKTubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjѐhhhjhKTubjC)}(hsysfs_create_linkh]jI)}(hsysfs_create_linkh]hsysfs_create_link}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjѐhhhjhKTubj=)}(h@(struct kobject *kobj, struct kobject *target, const char *name)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkobjecth]hkobject}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj )}j ]j)}jjsbc.sysfs_create_linkasbuh1hhjubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hkobjh]hkobj}(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hstruct kobject *targeth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jLc.sysfs_create_linkasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjΑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(htargeth]htarget}(hjۑhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubjC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjѐhhhjhKTubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj͐hhhjhKTubah}(h]jȐah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKThjʐhhubjw)}(hhh]h)}(h#create symlink between two objects.h]h#create symlink between two objects.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKThj_hhubah}(h]h ]h"]h$]h&]uh1jvhjʐhhhjhKTubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct kobject *kobj`` object whose directory we're creating the link in. ``struct kobject *target`` object we're pointing to. ``const char *name`` name of the symlink.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKXhj~ubj)}(hhh](j)}(hL``struct kobject *kobj`` object whose directory we're creating the link in. h](j)}(h``struct kobject *kobj``h]j)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKUhjubj)}(hhh]h)}(h2object whose directory we're creating the link in.h]h4object whose directory we’re creating the link in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKUhjubj)}(h5``struct kobject *target`` object we're pointing to. h](j)}(h``struct kobject *target``h]j)}(hjܒh]hstruct kobject *target}(hjޒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڒubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKVhj֒ubj)}(hhh]h)}(hobject we're pointing to.h]hobject we’re pointing to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKVhjubah}(h]h ]h"]h$]h&]uh1jhj֒ubeh}(h]h ]h"]h$]h&]uh1jhjhKVhjubj)}(h)``const char *name`` name of the symlink.h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKXhjubj)}(hhh]h)}(hname of the symlink.h]hname of the symlink.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKWhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hKXhjubeh}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %sysfs_create_link_nowarn (C function)c.sysfs_create_link_nowarnhNtauh1hhjmhhhNhNubj)}(hhh](j)}(h]int sysfs_create_link_nowarn (struct kobject *kobj, struct kobject *target, const char *name)h]j)}(h\int sysfs_create_link_nowarn(struct kobject *kobj, struct kobject *target, const char *name)h](jf)}(hinth]hint}(hjohhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjkhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKaubj2)}(h h]h }(hj~hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjkhhhj}hKaubjC)}(hsysfs_create_link_nowarnh]jI)}(hsysfs_create_link_nowarnh]hsysfs_create_link_nowarn}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjkhhhj}hKaubj=)}(h@(struct kobject *kobj, struct kobject *target, const char *name)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkobjecth]hkobject}(hjʓhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjǓubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj̓modnameN classnameNjj )}j ]j)}jjsbc.sysfs_create_link_nowarnasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct kobject *targeth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hkobjecth]hkobject}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj )}j ]jc.sysfs_create_link_nowarnasbuh1hhjubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(htargeth]htarget}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjŔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjҔhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjkhhhj}hKaubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjghhhj}hKaubah}(h]jbah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj}hKahjdhhubjw)}(hhh]h)}(h#create symlink between two objects.h]h#create symlink between two objects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKahjhhubah}(h]h ]h"]h$]h&]uh1jvhjdhhhj}hKaubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(hXB**Parameters** ``struct kobject *kobj`` object whose directory we're creating the link in. ``struct kobject *target`` object we're pointing to. ``const char *name`` name of the symlink. **Description** This function does the same as sysfs_create_link(), but it doesn't warn if the link already exists.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKehjubj)}(hhh](j)}(hL``struct kobject *kobj`` object whose directory we're creating the link in. h](j)}(h``struct kobject *kobj``h]j)}(hj=h]hstruct kobject *kobj}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKbhj7ubj)}(hhh]h)}(h2object whose directory we're creating the link in.h]h4object whose directory we’re creating the link in.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhKbhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhKbhj4ubj)}(h5``struct kobject *target`` object we're pointing to. h](j)}(h``struct kobject *target``h]j)}(hjvh]hstruct kobject *target}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKchjpubj)}(hhh]h)}(hobject we're pointing to.h]hobject we’re pointing to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKchjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhKchj4ubj)}(h*``const char *name`` name of the symlink. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKdhjubj)}(hhh]h)}(hname of the symlink.h]hname of the symlink.}(hjȕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĕhKdhjŕubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjĕhKdhj4ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKfhjubj)}(hcThis function does the same as sysfs_create_link(), but it doesn't warn if the link already exists.h]h)}(hcThis function does the same as sysfs_create_link(), but it doesn't warn if the link already exists.h]heThis function does the same as sysfs_create_link(), but it doesn’t warn if the link already exists.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKehjubah}(h]h ]h"]h$]h&]uh1jhjhKehjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j sysfs_remove_link (C function)c.sysfs_remove_linkhNtauh1hhjmhhhNhNubj)}(hhh](j)}(h?void sysfs_remove_link (struct kobject *kobj, const char *name)h]j)}(h>void sysfs_remove_link(struct kobject *kobj, const char *name)h](jf)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj5hhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKubj2)}(h h]h }(hjHhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5hhhjGhKubjC)}(hsysfs_remove_linkh]jI)}(hsysfs_remove_linkh]hsysfs_remove_link}(hjZhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj5hhhjGhKubj=)}(h((struct kobject *kobj, const char *name)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjrubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrubh)}(hhh]jI)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jj\sbc.sysfs_remove_linkasbuh1hhjrubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrubj)}(hjh]h*}(hj–hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjI)}(hkobjh]hkobj}(hjϖhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjnubjC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hj,hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjnubeh}(h]h ]h"]h$]h&]j`jauh1j<hj5hhhjGhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj1hhhjGhKubah}(h]j,ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjGhKhj.hhubjw)}(hhh]h)}(h%remove symlink in object's directory.h]h'remove symlink in object’s directory.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjShhubah}(h]h ]h"]h$]h&]uh1jvhj.hhhjGhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1jhhhjmhNhNubj)}(hz**Parameters** ``struct kobject *kobj`` object we're acting for. ``const char *name`` name of the symlink to remove.h](h)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjrubj)}(hhh](j)}(h2``struct kobject *kobj`` object we're acting for. h](j)}(h``struct kobject *kobj``h]j)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h3``const char *name`` name of the symlink to remove.h](j)}(h``const char *name``h]j)}(hjЗh]hconst char *name}(hjҗhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΗubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjʗubj)}(hhh]h)}(hname of the symlink to remove.h]hname of the symlink to remove.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjubah}(h]h ]h"]h$]h&]uh1jhjʗubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !sysfs_rename_link_ns (C function)c.sysfs_rename_link_nshNtauh1hhjmhhhNhNubj)}(hhh](j)}(hint sysfs_rename_link_ns (struct kobject *kobj, struct kobject *targ, const char *old, const char *new, const struct ns_common *new_ns)h]j)}(hint sysfs_rename_link_ns(struct kobject *kobj, struct kobject *targ, const char *old, const char *new, const struct ns_common *new_ns)h](jf)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj&hhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&hhhj8hKubjC)}(hsysfs_rename_link_nsh]jI)}(hsysfs_rename_link_nsh]hsysfs_rename_link_ns}(hjKhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj&hhhj8hKubj=)}(hn(struct kobject *kobj, struct kobject *targ, const char *old, const char *new, const struct ns_common *new_ns)h](jC)}(hstruct kobject *kobjh](j )}(hjh]hstruct}(hjghhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj2)}(h h]h }(hjthhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcubh)}(hhh]jI)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjMsbc.sysfs_rename_link_nsasbuh1hhjcubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjcubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjI)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj_ubjC)}(hstruct kobject *targh](j )}(hjh]hstruct}(hj٘hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj՘ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj՘ubh)}(hhh]jI)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.sysfs_rename_link_nsasbuh1hhj՘ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj՘ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՘ubjI)}(htargh]htarg}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj՘ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj_ubjC)}(hconst char *oldh](j )}(hjh]hconst}(hjIhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjEubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEubjf)}(hcharh]hchar}(hjdhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjEubj2)}(h h]h }(hjrhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjEubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjI)}(holdh]hold}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj_ubjC)}(hconst char *newh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjϙhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjݙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj_ubjC)}(hconst struct ns_common *new_nsh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj+hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(h ns_commonh]h ns_common}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj )}j ]jc.sysfs_rename_link_nsasbuh1hhjubj2)}(h h]h }(hjZhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnew_nsh]hnew_ns}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj_ubeh}(h]h ]h"]h$]h&]j`jauh1j<hj&hhhj8hKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj"hhhj8hKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj8hKhjhhubjw)}(hhh]h)}(h%rename symlink in object's directory.h]h'rename symlink in object’s directory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj8hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(hXp**Parameters** ``struct kobject *kobj`` object we're acting for. ``struct kobject *targ`` object we're pointing to. ``const char *old`` previous name of the symlink. ``const char *new`` new name of the symlink. ``const struct ns_common *new_ns`` new namespace of the symlink. **Description** A helper function for the common rename symlink idiom.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjÚhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjubj)}(hhh](j)}(h2``struct kobject *kobj`` object we're acting for. h](j)}(h``struct kobject *kobj``h]j)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjޚubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjښubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjښubeh}(h]h ]h"]h$]h&]uh1jhjhKhjךubj)}(h3``struct kobject *targ`` object we're pointing to. h](j)}(h``struct kobject *targ``h]j)}(hjh]hstruct kobject *targ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjubj)}(hhh]h)}(hobject we're pointing to.h]hobject we’re pointing to.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hKhjךubj)}(h2``const char *old`` previous name of the symlink. h](j)}(h``const char *old``h]j)}(hjRh]hconst char *old}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjLubj)}(hhh]h)}(hprevious name of the symlink.h]hprevious name of the symlink.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghKhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKhjךubj)}(h-``const char *new`` new name of the symlink. h](j)}(h``const char *new``h]j)}(hjh]hconst char *new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjubj)}(hhh]h)}(hnew name of the symlink.h]hnew name of the symlink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjךubj)}(hA``const struct ns_common *new_ns`` new namespace of the symlink. h](j)}(h"``const struct ns_common *new_ns``h]j)}(hjěh]hconst struct ns_common *new_ns}(hjƛhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj›ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjubj)}(hhh]h)}(hnew namespace of the symlink.h]hnew namespace of the symlink.}(hjݛhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjٛhKhjڛubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjٛhKhjךubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjubj)}(h6A helper function for the common rename symlink idiom.h]h)}(hjh]h6A helper function for the common rename symlink idiom.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:137: ./fs/sysfs/symlink.chKhjubah}(h]h ]h"]h$]h&]uh1jhj&hKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubeh}(h]+the-filesystem-for-exporting-kernel-objectsah ]h"]+the filesystem for exporting kernel objectsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hThe debugfs filesystemh]hThe debugfs filesystem}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hhhhhKubh)}(hhh](h)}(hdebugfs interfaceh]hdebugfs interface}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_lookup (C function)c.debugfs_lookuphNtauh1hhjMhhhNhNubj)}(hhh](j)}(hHstruct dentry * debugfs_lookup (const char *name, struct dentry *parent)h]j)}(hFstruct dentry *debugfs_lookup(const char *name, struct dentry *parent)h](j )}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjshhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMNubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjshhhjhMNubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jdebugfs_lookupsbc.debugfs_lookupasbuh1hhjshhhjhMNubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjshhhjhMNubj)}(hjh]h*}(hjŜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhMNubjC)}(hdebugfs_lookuph]jI)}(hjh]hdebugfs_lookup}(hj֜hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjҜubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjshhhjhMNubj=)}(h)(const char *name, struct dentry *parent)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hj5hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(hdentryh]hdentry}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]jc.debugfs_lookupasbuh1hhjJubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjshhhjhMNubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjohhhjhMNubah}(h]jjah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMNhjlhhubjw)}(hhh]h)}(h look up an existing debugfs fileh]h look up an existing debugfs file}(hjϝhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMNhj̝hhubah}(h]h ]h"]h$]h&]uh1jvhjlhhhjhMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to look up. ``struct dentry *parent`` a pointer to the parent dentry of the file. **Description** This function will return a pointer to a dentry if it succeeds. If the file doesn't exist or an error occurs, ``NULL`` will be returned. The returned dentry must be passed to dput() when it is no longer needed. If debugfs is not enabled in the kernel, the value -``ENODEV`` will be returned.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMRhjubj)}(hhh](j)}(hW``const char *name`` a pointer to a string containing the name of the file to look up. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMOhj ubj)}(hhh]h)}(hAa pointer to a string containing the name of the file to look up.h]hAa pointer to a string containing the name of the file to look up.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMOhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMOhjubj)}(hF``struct dentry *parent`` a pointer to the parent dentry of the file. h](j)}(h``struct dentry *parent``h]j)}(hjIh]hstruct dentry *parent}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMPhjCubj)}(hhh]h)}(h+a pointer to the parent dentry of the file.h]h+a pointer to the parent dentry of the file.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMPhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMPhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMRhjubh)}(hThis function will return a pointer to a dentry if it succeeds. If the file doesn't exist or an error occurs, ``NULL`` will be returned. The returned dentry must be passed to dput() when it is no longer needed.h](hqThis function will return a pointer to a dentry if it succeeds. If the file doesn’t exist or an error occurs, }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh] will be returned. The returned dentry must be passed to dput() when it is no longer needed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMQhjubh)}(hPIf debugfs is not enabled in the kernel, the value -``ENODEV`` will be returned.h](h4If debugfs is not enabled in the kernel, the value -}(hjhhhNhNubj)}(h ``ENODEV``h]hENODEV}(hjÞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh will be returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'debugfs_create_file_unsafe (C function)c.debugfs_create_file_unsafehNtauh1hhjMhhhNhNubj)}(hhh](j)}(hstruct dentry * debugfs_create_file_unsafe (const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops)h]j)}(hstruct dentry *debugfs_create_file_unsafe(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj hMubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jdebugfs_create_file_unsafesbc.debugfs_create_file_unsafeasbuh1hhjhhhj hMubj2)}(h h]h }(hj<hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj hMubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubjC)}(hdebugfs_create_file_unsafeh]jI)}(hj9h]hdebugfs_create_file_unsafe}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj hMubj=)}(hg(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjvhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjrubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjrubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjrubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjnubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj֟hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjӟubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj؟modnameN classnameNjj )}j ]j7c.debugfs_create_file_unsafeasbuh1hhjϟubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjϟubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjϟubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjnubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj(hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj9hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj )}j ]j7c.debugfs_create_file_unsafeasbuh1hhjubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjrhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjnubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjnubjC)}(h"const struct file_operations *fopsh](j )}(hjh]hconst}(hj͠hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjɠubj2)}(h h]h }(hjڠhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjɠubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjɠubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjɠubh)}(hhh]jI)}(hfile_operationsh]hfile_operations}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j7c.debugfs_create_file_unsafeasbuh1hhjɠubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjɠubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɠubjI)}(hfopsh]hfops}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjɠubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjnubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj hMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hMhjhhubjw)}(hhh]h)}(h'create a file in the debugfs filesystemh]h'create a file in the debugfs filesystem}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have. ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem. ``void *data`` a pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call. ``const struct file_operations *fops`` a pointer to a struct file_operations that should be used for this file. **Description** debugfs_create_file_unsafe() is completely analogous to debugfs_create_file(), the only difference being that the fops handed it will not get protected against file removals by the debugfs core. It is your responsibility to protect your struct file_operation methods against file removals by means of debugfs_file_get() and debugfs_file_put(). ->open() is still protected by debugfs though. Any struct file_operations defined by means of DEFINE_DEBUGFS_ATTRIBUTE() is protected against file removals and thus, may be used here.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjáhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``umode_t mode`` the permission that the file should have. h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjݡubj)}(hhh]h)}(h)the permission that the file should have.h]h)the permission that the file should have.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjݡubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem.h]ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h``void *data`` a pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call. h](j)}(h``void *data``h]j)}(hjVh]h void *data}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjPubj)}(hhh]h)}(ha pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call.h]ha pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjubj)}(hp``const struct file_operations *fops`` a pointer to a struct file_operations that should be used for this file. h](j)}(h&``const struct file_operations *fops``h]j)}(hjh]h"const struct file_operations *fops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(hHa pointer to a struct file_operations that should be used for this file.h]hHa pointer to a struct file_operations that should be used for this file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj̢h]h Description}(hj΢hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʢubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubh)}(hdebugfs_create_file_unsafe() is completely analogous to debugfs_create_file(), the only difference being that the fops handed it will not get protected against file removals by the debugfs core.h]hdebugfs_create_file_unsafe() is completely analogous to debugfs_create_file(), the only difference being that the fops handed it will not get protected against file removals by the debugfs core.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubh)}(hIt is your responsibility to protect your struct file_operation methods against file removals by means of debugfs_file_get() and debugfs_file_put(). ->open() is still protected by debugfs though.h]hIt is your responsibility to protect your struct file_operation methods against file removals by means of debugfs_file_get() and debugfs_file_put(). ->open() is still protected by debugfs though.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubh)}(hAny struct file_operations defined by means of DEFINE_DEBUGFS_ATTRIBUTE() is protected against file removals and thus, may be used here.h]hAny struct file_operations defined by means of DEFINE_DEBUGFS_ATTRIBUTE() is protected against file removals and thus, may be used here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %debugfs_create_file_size (C function)c.debugfs_create_file_sizehNtauh1hhjMhhhNhNubj)}(hhh](j)}(hvoid debugfs_create_file_size (const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops, loff_t file_size) h]j)}(hvoid debugfs_create_file_size(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops, loff_t file_size)h](jf)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj+hhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMubj2)}(h h]h }(hj>hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj+hhhj=hMubjC)}(hdebugfs_create_file_sizeh]jI)}(hdebugfs_create_file_sizeh]hdebugfs_create_file_size}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj+hhhj=hMubj=)}(hy(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops, loff_t file_size)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj̣hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjɣubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjΣmodnameN classnameNjj )}j ]j)}jjRsbc.debugfs_create_file_sizeasbuh1hhjţubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjţubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjţubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj )}j ]jc.debugfs_create_file_sizeasbuh1hhjubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(h"const struct file_operations *fopsh](j )}(hjh]hconst}(hjŤhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjҤhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfile_operationsh]hfile_operations}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_file_sizeasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfopsh]hfops}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubjC)}(hloff_t file_sizeh](h)}(hhh]jI)}(hloff_th]hloff_t}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj )}j ]jc.debugfs_create_file_sizeasbuh1hhjLubj2)}(h h]h }(hjqhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjLubjI)}(h file_sizeh]h file_size}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjLubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjdubeh}(h]h ]h"]h$]h&]j`jauh1j<hj+hhhj=hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj'hhhj=hMubah}(h]j"ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj=hMhj$hhubjw)}(hhh]h)}(h'create a file in the debugfs filesystemh]h'create a file in the debugfs filesystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj$hhhj=hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have. ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem. ``void *data`` a pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call. ``const struct file_operations *fops`` a pointer to a struct file_operations that should be used for this file. ``loff_t file_size`` initial file size **Description** This is the basic "create a file" function for debugfs. It allows for a wide range of flexibility in creating a file, or a directory (if you want to create a directory, the debugfs_create_dir() function is recommended to be used instead.)h](h)}(h**Parameters**h]j)}(hj˥h]h Parameters}(hjͥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɥubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM hjťubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``umode_t mode`` the permission that the file should have. h](j)}(h``umode_t mode``h]j)}(hj#h]h umode_t mode}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM hjubj)}(hhh]h)}(h)the permission that the file should have.h]h)the permission that the file should have.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM hjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hj\h]hstruct dentry *parent}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM hjVubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem.h]ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM hjubj)}(h``void *data`` a pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call. h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(ha pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call.h]ha pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hp``const struct file_operations *fops`` a pointer to a struct file_operations that should be used for this file. h](j)}(h&``const struct file_operations *fops``h]j)}(hjЦh]h"const struct file_operations *fops}(hjҦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΦubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjʦubj)}(hhh]h)}(hHa pointer to a struct file_operations that should be used for this file.h]hHa pointer to a struct file_operations that should be used for this file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubah}(h]h ]h"]h$]h&]uh1jhjʦubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h'``loff_t file_size`` initial file size h](j)}(h``loff_t file_size``h]j)}(hj h]hloff_t file_size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(hinitial file sizeh]hinitial file size}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjťubh)}(h**Description**h]j)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjťubh)}(hThis is the basic "create a file" function for debugfs. It allows for a wide range of flexibility in creating a file, or a directory (if you want to create a directory, the debugfs_create_dir() function is recommended to be used instead.)h]hThis is the basic “create a file” function for debugfs. It allows for a wide range of flexibility in creating a file, or a directory (if you want to create a directory, the debugfs_create_dir() function is recommended to be used instead.)}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjťubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_dir (C function)c.debugfs_create_dirhNtauh1hhjMhhhNhNubj)}(hhh](j)}(hLstruct dentry * debugfs_create_dir (const char *name, struct dentry *parent)h]j)}(hJstruct dentry *debugfs_create_dir(const char *name, struct dentry *parent)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM&ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM&ubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jdebugfs_create_dirsbc.debugfs_create_dirasbuh1hhjhhhjhM&ubj2)}(h h]h }(hjʧhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM&ubj)}(hjh]h*}(hjاhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM&ubjC)}(hdebugfs_create_dirh]jI)}(hjǧh]hdebugfs_create_dir}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM&ubj=)}(h)(const char *name, struct dentry *parent)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjahhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj]ubj2)}(h h]h }(hjnhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]ubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jŧc.debugfs_create_dirasbuh1hhj]ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj]ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj]ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM&ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM&ubah}(h]j}ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM&hjhhubjw)}(hhh]h)}(h,create a directory in the debugfs filesystemh]h,create a directory in the debugfs filesystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM&hjߨhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hXF**Parameters** ``const char *name`` a pointer to a string containing the name of the directory to create. ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the directory will be created in the root of the debugfs filesystem. **Description** This function creates a directory in debugfs with the given name. This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned. If debugfs is not enabled in the kernel, the value -``ENODEV`` will be returned. **NOTE** it's expected that most callers should _ignore_ the errors returned by this function. Other debugfs functions handle the fact that the "dentry" passed to them could be an error and they don't crash in that case. Drivers should generally work fine even if debugfs fails to init anyway.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM*hjubj)}(hhh](j)}(h[``const char *name`` a pointer to a string containing the name of the directory to create. h](j)}(h``const char *name``h]j)}(hj#h]hconst char *name}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM(hjubj)}(hhh]h)}(hEa pointer to a string containing the name of the directory to create.h]hEa pointer to a string containing the name of the directory to create.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM'hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM(hjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the directory will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hj]h]hstruct dentry *parent}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM+hjWubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the directory will be created in the root of the debugfs filesystem.h]ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the directory will be created in the root of the debugfs filesystem.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM)hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM+hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM-hjubh)}(hAThis function creates a directory in debugfs with the given name.h]hAThis function creates a directory in debugfs with the given name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM,hjubh)}(hX(This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned.h]hX(This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM.hjubh)}(hPIf debugfs is not enabled in the kernel, the value -``ENODEV`` will be returned.h](h4If debugfs is not enabled in the kernel, the value -}(hjͩhhhNhNubj)}(h ``ENODEV``h]hENODEV}(hjթhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjͩubh will be returned.}(hjͩhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM4hjubh)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM7hjubh)}(hXit's expected that most callers should _ignore_ the errors returned by this function. Other debugfs functions handle the fact that the "dentry" passed to them could be an error and they don't crash in that case. Drivers should generally work fine even if debugfs fails to init anyway.h]hX$it’s expected that most callers should _ignore_ the errors returned by this function. Other debugfs functions handle the fact that the “dentry” passed to them could be an error and they don’t crash in that case. Drivers should generally work fine even if debugfs fails to init anyway.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %debugfs_create_automount (C function)c.debugfs_create_automounthNtauh1hhjMhhhNhNubj)}(hhh](j)}(hustruct dentry * debugfs_create_automount (const char *name, struct dentry *parent, debugfs_automount_t f, void *data)h]j)}(hsstruct dentry *debugfs_create_automount(const char *name, struct dentry *parent, debugfs_automount_t f, void *data)h](j )}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj1hhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMZubj2)}(h h]h }(hjChhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1hhhjBhMZubh)}(hhh]jI)}(hdentryh]hdentry}(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj )}j ]j)}jdebugfs_create_automountsbc.debugfs_create_automountasbuh1hhj1hhhjBhMZubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj1hhhjBhMZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhMZubjC)}(hdebugfs_create_automounth]jI)}(hjrh]hdebugfs_create_automount}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj1hhhjBhMZubj=)}(hL(const char *name, struct dentry *parent, debugfs_automount_t f, void *data)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjʪhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjتhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj )}j ]jpc.debugfs_create_automountasbuh1hhjubj2)}(h h]h }(hjHhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjchhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hdebugfs_automount_t fh](h)}(hhh]jI)}(hdebugfs_automount_th]hdebugfs_automount_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jpc.debugfs_create_automountasbuh1hhjxubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubjI)}(hjh]hf}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjxubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h void *datah](jf)}(hvoidh]hvoid}(hjëhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjѫhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj߫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj1hhhjBhMZubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj-hhhjBhMZubah}(h]j(ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjBhMZhj*hhubjw)}(hhh]h)}(h0create automount point in the debugfs filesystemh]h0create automount point in the debugfs filesystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMZhjhhubah}(h]h ]h"]h$]h&]uh1jvhj*hhhjBhMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem. ``debugfs_automount_t f`` function to be called when pathname resolution steps on that one. ``void *data`` opaque argument to pass to f(). **Description** **f** should return what ->d_automount() would.h](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM^hj2ubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjWh]hconst char *name}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM[hjQubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM[hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM[hjNubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM^hjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem.h]ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the debugfs filesystem.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjNubj)}(h\``debugfs_automount_t f`` function to be called when pathname resolution steps on that one. h](j)}(h``debugfs_automount_t f``h]j)}(hjʬh]hdebugfs_automount_t f}(hj̬hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȬubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM_hjĬubj)}(hhh]h)}(hAfunction to be called when pathname resolution steps on that one.h]hAfunction to be called when pathname resolution steps on that one.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj߬hM_hjubah}(h]h ]h"]h$]h&]uh1jhjĬubeh}(h]h ]h"]h$]h&]uh1jhj߬hM_hjNubj)}(h/``void *data`` opaque argument to pass to f(). h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM`hjubj)}(hhh]h)}(hopaque argument to pass to f().h]hopaque argument to pass to f().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjNubeh}(h]h ]h"]h$]h&]uh1jhj2ubh)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMbhj2ubh)}(h/**f** should return what ->d_automount() would.h](j)}(h**f**h]hf}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh* should return what ->d_automount() would.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMahj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j #debugfs_create_symlink (C function)c.debugfs_create_symlinkhNtauh1hhjMhhhNhNubj)}(hhh](j)}(hdstruct dentry * debugfs_create_symlink (const char *name, struct dentry *parent, const char *target)h]j)}(hbstruct dentry *debugfs_create_symlink(const char *name, struct dentry *parent, const char *target)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jdebugfs_create_symlinksbc.debugfs_create_symlinkasbuh1hhjhhhjhMubj2)}(h h]h }(hjѭhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hj߭hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hdebugfs_create_symlinkh]jI)}(hjέh]hdebugfs_create_symlink}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h=(const char *name, struct dentry *parent, const char *target)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hj&hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj4hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjOhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjdubj2)}(h h]h }(hjuhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j̭c.debugfs_create_symlinkasbuh1hhjdubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjdubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *targeth](j )}(hjh]hconst}(hjخhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjԮubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjԮubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjԮubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjԮubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԮubjI)}(htargeth]htarget}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjԮubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h0create a symbolic link in the debugfs filesystemh]h0create a symbolic link in the debugfs filesystem}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjChhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the symbolic link to create. ``struct dentry *parent`` a pointer to the parent dentry for this symbolic link. This should be a directory dentry if set. If this parameter is NULL, then the symbolic link will be created in the root of the debugfs filesystem. ``const char *target`` a pointer to a string containing the path to the target of the symbolic link. **Description** This function creates a symbolic link with the given name in debugfs that links to the given target path. This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the symbolic link is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned. If debugfs is not enabled in the kernel, the value -``ENODEV`` will be returned.h](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjbubj)}(hhh](j)}(h_``const char *name`` a pointer to a string containing the name of the symbolic link to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(hIa pointer to a string containing the name of the symbolic link to create.h]hIa pointer to a string containing the name of the symbolic link to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this symbolic link. This should be a directory dentry if set. If this parameter is NULL, then the symbolic link will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjïhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(ha pointer to the parent dentry for this symbolic link. This should be a directory dentry if set. If this parameter is NULL, then the symbolic link will be created in the root of the debugfs filesystem.h]ha pointer to the parent dentry for this symbolic link. This should be a directory dentry if set. If this parameter is NULL, then the symbolic link will be created in the root of the debugfs filesystem.}(hjگhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjׯubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֯hMhj~ubj)}(he``const char *target`` a pointer to a string containing the path to the target of the symbolic link. h](j)}(h``const char *target``h]j)}(hjh]hconst char *target}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(hMa pointer to a string containing the path to the target of the symbolic link.h]hMa pointer to a string containing the path to the target of the symbolic link.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubeh}(h]h ]h"]h$]h&]uh1jhjbubh)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjbubh)}(hiThis function creates a symbolic link with the given name in debugfs that links to the given target path.h]hiThis function creates a symbolic link with the given name in debugfs that links to the given target path.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjbubh)}(hX1This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the symbolic link is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned.h]hX1This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the symbolic link is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjbubh)}(hPIf debugfs is not enabled in the kernel, the value -``ENODEV`` will be returned.h](h4If debugfs is not enabled in the kernel, the value -}(hjkhhhNhNubj)}(h ``ENODEV``h]hENODEV}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh will be returned.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_remove (C function)c.debugfs_removehNtauh1hhjMhhhNhNubj)}(hhh](j)}(h+void debugfs_remove (struct dentry *dentry)h]j)}(h*void debugfs_remove(struct dentry *dentry)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hdebugfs_removeh]jI)}(hdebugfs_removeh]hdebugfs_remove}(hjͰhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjɰubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(h(struct dentry *dentry)h]jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj )}j ]j)}jjϰsbc.debugfs_removeasbuh1hhjubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hrecursively removes a directoryh]hrecursively removes a directory}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjihhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` a pointer to a the dentry of the directory to be removed. If this parameter is NULL or an error value, nothing will be done. **Description** This function recursively removes a directory tree in debugfs that was previously created with a call to another debugfs function (like debugfs_create_file() or variants thereof.) This function is required to be called in order for the file to be removed, no automatic cleanup of files will happen when a module is removed, you are responsible here.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]j)}(h``struct dentry *dentry`` a pointer to a the dentry of the directory to be removed. If this parameter is NULL or an error value, nothing will be done. h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(h}a pointer to a the dentry of the directory to be removed. If this parameter is NULL or an error value, nothing will be done.h]h}a pointer to a the dentry of the directory to be removed. If this parameter is NULL or an error value, nothing will be done.}(hjƱhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjñubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj±hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubh)}(hThis function recursively removes a directory tree in debugfs that was previously created with a call to another debugfs function (like debugfs_create_file() or variants thereof.)h]hThis function recursively removes a directory tree in debugfs that was previously created with a call to another debugfs function (like debugfs_create_file() or variants thereof.)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubh)}(hThis function is required to be called in order for the file to be removed, no automatic cleanup of files will happen when a module is removed, you are responsible here.h]hThis function is required to be called in order for the file to be removed, no automatic cleanup of files will happen when a module is removed, you are responsible here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j &debugfs_lookup_and_remove (C function)c.debugfs_lookup_and_removehNtauh1hhjMhhhNhNubj)}(hhh](j)}(hHvoid debugfs_lookup_and_remove (const char *name, struct dentry *parent)h]j)}(hGvoid debugfs_lookup_and_remove(const char *name, struct dentry *parent)h](jf)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj9hhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMubj2)}(h h]h }(hjLhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj9hhhjKhMubjC)}(hdebugfs_lookup_and_removeh]jI)}(hdebugfs_lookup_and_removeh]hdebugfs_lookup_and_remove}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjZubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj9hhhjKhMubj=)}(h)(const char *name, struct dentry *parent)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjvubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjvubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjvubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjrubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjײhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjӲubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjӲubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jj`sbc.debugfs_lookup_and_removeasbuh1hhjӲubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjӲubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӲubjI)}(hparenth]hparent}(hj0hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjӲubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjrubeh}(h]h ]h"]h$]h&]j`jauh1j<hj9hhhjKhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj5hhhjKhMubah}(h]j0ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjKhMhj2hhubjw)}(hhh]h)}(h4lookup a directory or file and recursively remove ith]h4lookup a directory or file and recursively remove it}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjWhhubah}(h]h ]h"]h$]h&]uh1jvhj2hhhjKhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjrjjjuh1jhhhjMhNhNubj)}(hXf**Parameters** ``const char *name`` a pointer to a string containing the name of the item to look up. ``struct dentry *parent`` a pointer to the parent dentry of the item. **Description** This is the equlivant of doing something like debugfs_remove(debugfs_lookup(..)) but with the proper reference counting handled for the directory being looked up.h](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjvubj)}(hhh](j)}(hW``const char *name`` a pointer to a string containing the name of the item to look up. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjubj)}(hhh]h)}(hAa pointer to a string containing the name of the item to look up.h]hAa pointer to a string containing the name of the item to look up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``struct dentry *parent`` a pointer to the parent dentry of the item. h](j)}(h``struct dentry *parent``h]j)}(hjԳh]hstruct dentry *parent}(hjֳhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҳubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjγubj)}(hhh]h)}(h+a pointer to the parent dentry of the item.h]h+a pointer to the parent dentry of the item.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjγubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjvubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjvubh)}(hThis is the equlivant of doing something like debugfs_remove(debugfs_lookup(..)) but with the proper reference counting handled for the directory being looked up.h]hThis is the equlivant of doing something like debugfs_remove(debugfs_lookup(..)) but with the proper reference counting handled for the directory being looked up.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  debugfs_change_name (C function)c.debugfs_change_namehNtauh1hhjMhhhNhNubj)}(hhh](j)}(hFint debugfs_change_name (struct dentry *dentry, const char *fmt, ...)h]j)}(hDint debugfs_change_name(struct dentry *dentry, const char *fmt, ...)h](jf)}(hinth]hint}(hjThhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjPhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM,ubj2)}(h h]h }(hjchhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjPhhhjbhM,ubjC)}(hdebugfs_change_nameh]jI)}(hdebugfs_change_nameh]hdebugfs_change_name}(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjqubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjPhhhjbhM,ubj=)}(h-(struct dentry *dentry, const char *fmt, ...)h](jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjwsbc.debugfs_change_nameasbuh1hhjubj2)}(h h]h }(hjϴhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjݴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hconst char *fmth](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj,hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfmth]hfmt}(hjGhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h...h]j)}(hjgh]h...}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjPhhhjbhM,ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjLhhhjbhM,ubah}(h]jGah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjbhM,hjIhhubjw)}(hhh]h)}(h1rename a file/directory in the debugfs filesystemh]h1rename a file/directory in the debugfs filesystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM,hjhhubah}(h]h ]h"]h$]h&]uh1jvhjIhhhjbhM,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` dentry of an object to be renamed. ``const char *fmt`` format for new name ``...`` variable arguments **Description** This function renames a file/directory in debugfs. The target must not exist for rename to succeed. This function will return 0 on success and -E... on failure. If debugfs is not enabled in the kernel, the value -``ENODEV`` will be returned.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM0hjubj)}(hhh](j)}(h=``struct dentry *dentry`` dentry of an object to be renamed. h](j)}(h``struct dentry *dentry``h]j)}(hjʵh]hstruct dentry *dentry}(hj̵hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȵubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM-hjĵubj)}(hhh]h)}(h"dentry of an object to be renamed.h]h"dentry of an object to be renamed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjߵhM-hjubah}(h]h ]h"]h$]h&]uh1jhjĵubeh}(h]h ]h"]h$]h&]uh1jhjߵhM-hjubj)}(h(``const char *fmt`` format for new name h](j)}(h``const char *fmt``h]j)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM.hjubj)}(hhh]h)}(hformat for new nameh]hformat for new name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjubj)}(h``...`` variable arguments h](j)}(h``...``h]j)}(hj<h]h...}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chKhj6ubj)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chKhjubh)}(hdThis function renames a file/directory in debugfs. The target must not exist for rename to succeed.h]hdThis function renames a file/directory in debugfs. The target must not exist for rename to succeed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chM/hjubh)}(hah"]h$]h&]uh1j1hjhhhjhMmubjC)}(hdebugfs_initializedh]jI)}(hdebugfs_initializedh]hdebugfs_initialized}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMmubj=)}(h(void)h]jC)}(hvoidh]jf)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj$ubah}(h]h ]h"]h$]h&]noemphj`jauh1jBhj ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMmubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMmubah}(h]j߶ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMmhjhhubjw)}(hhh]h)}(h)Tells whether debugfs has been registeredh]h)Tells whether debugfs has been registered}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMmhjOhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1jhhhjMhNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMqhjnubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chMshjubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/inode.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_file_get (C function)c.debugfs_file_gethNtauh1hhjMhhhNhNubj)}(hhh](j)}(h,int debugfs_file_get (struct dentry *dentry)h]j)}(h+int debugfs_file_get(struct dentry *dentry)h](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhKubjC)}(hdebugfs_file_geth]jI)}(hdebugfs_file_geth]hdebugfs_file_get}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhKubj=)}(h(struct dentry *dentry)h]jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubh)}(hhh]jI)}(hdentryh]hdentry}(hjHhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj )}j ]j)}jjsbc.debugfs_file_getasbuh1hhj&ubj2)}(h h]h }(hjhhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj&ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj"ubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjhhubjw)}(hhh]h)}(h&mark the beginning of file data accessh]h&mark the beginning of file data access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjŸjjŸjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct dentry *dentry`` the dentry object whose data is being accessed. **Description** Up to a matching call to debugfs_file_put(), any successive call into the file removing functions debugfs_remove() and debugfs_remove_recursive() will block. Since associated private file data may only get freed after a successful return of any of the removal functions, you may safely access it after a successful call to debugfs_file_get() without worrying about lifetime issues. If -``EIO`` is returned, the file has already been removed and thus, it is not safe to access any of its data. If, on the other hand, it is allowed to access the file data, zero is returned.h](h)}(h**Parameters**h]j)}(hjϸh]h Parameters}(hjѸhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͸ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjɸubj)}(hhh]j)}(hJ``struct dentry *dentry`` the dentry object whose data is being accessed. h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubj)}(hhh]h)}(h/the dentry object whose data is being accessed.h]h/the dentry object whose data is being accessed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjɸubh)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjɸubh)}(hX}Up to a matching call to debugfs_file_put(), any successive call into the file removing functions debugfs_remove() and debugfs_remove_recursive() will block. Since associated private file data may only get freed after a successful return of any of the removal functions, you may safely access it after a successful call to debugfs_file_get() without worrying about lifetime issues.h]hX}Up to a matching call to debugfs_file_put(), any successive call into the file removing functions debugfs_remove() and debugfs_remove_recursive() will block. Since associated private file data may only get freed after a successful return of any of the removal functions, you may safely access it after a successful call to debugfs_file_get() without worrying about lifetime issues.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjɸubh)}(hIf -``EIO`` is returned, the file has already been removed and thus, it is not safe to access any of its data. If, on the other hand, it is allowed to access the file data, zero is returned.h](hIf -}(hjNhhhNhNubj)}(h``EIO``h]hEIO}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh is returned, the file has already been removed and thus, it is not safe to access any of its data. If, on the other hand, it is allowed to access the file data, zero is returned.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjɸubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_file_put (C function)c.debugfs_file_puthNtauh1hhjMhhhNhNubj)}(hhh](j)}(h-void debugfs_file_put (struct dentry *dentry)h]j)}(h,void debugfs_file_put(struct dentry *dentry)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhKubjC)}(hdebugfs_file_puth]jI)}(hdebugfs_file_puth]hdebugfs_file_put}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhKubj=)}(h(struct dentry *dentry)h]jC)}(hstruct dentry *dentryh](j )}(hjh]hstruct}(hj̹hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjȹubj2)}(h h]h }(hjٹhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjȹubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.debugfs_file_putasbuh1hhjȹubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjȹubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȹubjI)}(hdentryh]hdentry}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjȹubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjĹubah}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjhhubjw)}(hhh]h)}(h mark the end of file data accessh]h mark the end of file data access}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjLhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1jhhhjMhNhNubj)}(hX"**Parameters** ``struct dentry *dentry`` the dentry object formerly passed to debugfs_file_get(). **Description** Allow any ongoing concurrent call into debugfs_remove() or debugfs_remove_recursive() blocked by a former call to debugfs_file_get() to proceed and return to its caller.h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjkubj)}(hhh]j)}(hS``struct dentry *dentry`` the dentry object formerly passed to debugfs_file_get(). h](j)}(h``struct dentry *dentry``h]j)}(hjh]hstruct dentry *dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubj)}(hhh]h)}(h8the dentry object formerly passed to debugfs_file_get().h]h8the dentry object formerly passed to debugfs_file_get().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjkubh)}(h**Description**h]j)}(hj̺h]h Description}(hjκhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʺubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjkubh)}(hAllow any ongoing concurrent call into debugfs_remove() or debugfs_remove_recursive() blocked by a former call to debugfs_file_get() to proceed and return to its caller.h]hAllow any ongoing concurrent call into debugfs_remove() or debugfs_remove_recursive() blocked by a former call to debugfs_file_get() to proceed and return to its caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'debugfs_enter_cancellation (C function)c.debugfs_enter_cancellationhNtauh1hhjMhhhNhNubj)}(hhh](j)}(h^void debugfs_enter_cancellation (struct file *file, struct debugfs_cancellation *cancellation)h]j)}(h]void debugfs_enter_cancellation(struct file *file, struct debugfs_cancellation *cancellation)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj hhhjhKubjC)}(hdebugfs_enter_cancellationh]jI)}(hdebugfs_enter_cancellationh]hdebugfs_enter_cancellation}(hj2hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj hhhjhKubj=)}(h>(struct file *file, struct debugfs_cancellation *cancellation)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjJubj2)}(h h]h }(hj[hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubh)}(hhh]jI)}(hfileh]hfile}(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj )}j ]j)}jj4sbc.debugfs_enter_cancellationasbuh1hhjJubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjJubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubjC)}(h)struct debugfs_cancellation *cancellationh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjͻhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdebugfs_cancellationh]hdebugfs_cancellation}(hj޻hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjۻubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_enter_cancellationasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h cancellationh]h cancellation}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjFubeh}(h]h ]h"]h$]h&]j`jauh1j<hj hhhjhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj hhhjhKubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhKhjhhubjw)}(hhh]h)}(henter a debugfs cancellationh]henter a debugfs cancellation}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhj>hhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct file *file`` the file being accessed ``struct debugfs_cancellation *cancellation`` the cancellation object, the cancel callback inside of it must be initialized **Description** When a debugfs file is removed it needs to wait for all active operations to complete. However, the operation itself may need to wait for hardware or completion of some asynchronous process or similar. As such, it may need to be cancelled to avoid long waits or even deadlocks. This function can be used inside a debugfs handler that may need to be cancelled. As soon as this function is called, the cancellation's 'cancel' callback may be called, at which point the caller should proceed to call debugfs_leave_cancellation() and leave the debugfs handler function as soon as possible. Note that the 'cancel' callback is only ever called in the context of some kind of debugfs_remove(). This function must be paired with debugfs_leave_cancellation().h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhj]ubj)}(hhh](j)}(h.``struct file *file`` the file being accessed h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhj|ubj)}(hhh]h)}(hthe file being accessedh]hthe file being accessed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjyubj)}(h|``struct debugfs_cancellation *cancellation`` the cancellation object, the cancel callback inside of it must be initialized h](j)}(h-``struct debugfs_cancellation *cancellation``h]j)}(hjh]h)struct debugfs_cancellation *cancellation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubj)}(hhh]h)}(hMthe cancellation object, the cancel callback inside of it must be initializedh]hMthe cancellation object, the cancel callback inside of it must be initialized}(hjԼhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjѼubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjмhKhjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhj]ubh)}(hXWhen a debugfs file is removed it needs to wait for all active operations to complete. However, the operation itself may need to wait for hardware or completion of some asynchronous process or similar. As such, it may need to be cancelled to avoid long waits or even deadlocks.h]hXWhen a debugfs file is removed it needs to wait for all active operations to complete. However, the operation itself may need to wait for hardware or completion of some asynchronous process or similar. As such, it may need to be cancelled to avoid long waits or even deadlocks.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhj]ubh)}(hXThis function can be used inside a debugfs handler that may need to be cancelled. As soon as this function is called, the cancellation's 'cancel' callback may be called, at which point the caller should proceed to call debugfs_leave_cancellation() and leave the debugfs handler function as soon as possible. Note that the 'cancel' callback is only ever called in the context of some kind of debugfs_remove().h]hXThis function can be used inside a debugfs handler that may need to be cancelled. As soon as this function is called, the cancellation’s ‘cancel’ callback may be called, at which point the caller should proceed to call debugfs_leave_cancellation() and leave the debugfs handler function as soon as possible. Note that the ‘cancel’ callback is only ever called in the context of some kind of debugfs_remove().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhj]ubh)}(h?This function must be paired with debugfs_leave_cancellation().h]h?This function must be paired with debugfs_leave_cancellation().}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'debugfs_leave_cancellation (C function)c.debugfs_leave_cancellationhNtauh1hhjMhhhNhNubj)}(hhh](j)}(h^void debugfs_leave_cancellation (struct file *file, struct debugfs_cancellation *cancellation)h]j)}(h]void debugfs_leave_cancellation(struct file *file, struct debugfs_cancellation *cancellation)h](jf)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjVhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVhhhjhhKubjC)}(hdebugfs_leave_cancellationh]jI)}(hdebugfs_leave_cancellationh]hdebugfs_leave_cancellation}(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjwubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjVhhhjhhKubj=)}(h>(struct file *file, struct debugfs_cancellation *cancellation)h](jC)}(hstruct file *fileh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jj}sbc.debugfs_leave_cancellationasbuh1hhjubj2)}(h h]h }(hjսhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h)struct debugfs_cancellation *cancellationh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdebugfs_cancellationh]hdebugfs_cancellation}(hj'hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj )}j ]jѽc.debugfs_leave_cancellationasbuh1hhjubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h cancellationh]h cancellation}(hj`hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjVhhhjhhKubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjRhhhjhhKubah}(h]jMah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhhKhjOhhubjw)}(hhh]h)}(hleave cancellation sectionh]hleave cancellation section}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjhhubah}(h]h ]h"]h$]h&]uh1jvhjOhhhjhhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct file *file`` the file being accessed ``struct debugfs_cancellation *cancellation`` the cancellation previously registered with debugfs_enter_cancellation() **Description** See the documentation of debugfs_enter_cancellation().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubj)}(hhh](j)}(h.``struct file *file`` the file being accessed h](j)}(h``struct file *file``h]j)}(hj˾h]hstruct file *file}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɾubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjžubj)}(hhh]h)}(hthe file being accessedh]hthe file being accessed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjžubeh}(h]h ]h"]h$]h&]uh1jhjhKhj¾ubj)}(hw``struct debugfs_cancellation *cancellation`` the cancellation previously registered with debugfs_enter_cancellation() h](j)}(h-``struct debugfs_cancellation *cancellation``h]j)}(hjh]h)struct debugfs_cancellation *cancellation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubj)}(hhh]h)}(hHthe cancellation previously registered with debugfs_enter_cancellation()h]hHthe cancellation previously registered with debugfs_enter_cancellation()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj¾ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubh)}(h6See the documentation of debugfs_enter_cancellation().h]h6See the documentation of debugfs_enter_cancellation().}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_u8 (C function)c.debugfs_create_u8hNtauh1hhjMhhhNhNubj)}(hhh](j)}(hYvoid debugfs_create_u8 (const char *name, umode_t mode, struct dentry *parent, u8 *value)h]j)}(hXvoid debugfs_create_u8(const char *name, umode_t mode, struct dentry *parent, u8 *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMRubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMRubjC)}(hdebugfs_create_u8h]jI)}(hdebugfs_create_u8h]hdebugfs_create_u8}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMRubj=)}(hB(const char *name, umode_t mode, struct dentry *parent, u8 *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hj¿hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjϿhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjݿhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj"hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_u8asbuh1hhjubj2)}(h h]h }(hjBhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hjPhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjeubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j>c.debugfs_create_u8asbuh1hhjeubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjeubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u8 *valueh](h)}(hhh]jI)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j>c.debugfs_create_u8asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMRubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj}hhhjhMRubah}(h]jxah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMRhjzhhubjw)}(hhh]h)}(hLcreate a debugfs file that is used to read and write an unsigned 8-bit valueh]hLcreate a debugfs file that is used to read and write an unsigned 8-bit value}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMRhj<hhubah}(h]h ]h"]h$]h&]uh1jvhjzhhhjhMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``u8 *value`` a pointer to the variable that the file should read to and write from. **Description** This function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMVhj[ubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMShjzubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMShjwubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMThjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjwubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMWhjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hj hhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhF, then the file will be created in the root of the debugfs filesystem.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjwubj)}(hU``u8 *value`` a pointer to the variable that the file should read to and write from. h](j)}(h ``u8 *value``h]j)}(hj>h]h u8 *value}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMYhj8ubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMXhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMYhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubh)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM[hj[ubh)}(hThis function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](hdThis function creates a file in debugfs with the given name that contains the value of the variable }(hjhhhNhNubj)}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . If the }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 variable is so set, it can be read from, and written to.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMZhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_u16 (C function)c.debugfs_create_u16hNtauh1hhjMhhhNhNubj)}(hhh](j)}(h[void debugfs_create_u16 (const char *name, umode_t mode, struct dentry *parent, u16 *value)h]j)}(hZvoid debugfs_create_u16(const char *name, umode_t mode, struct dentry *parent, u16 *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMvubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMvubjC)}(hdebugfs_create_u16h]jI)}(hdebugfs_create_u16h]hdebugfs_create_u16}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMvubj=)}(hC(const char *name, umode_t mode, struct dentry *parent, u16 *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj-hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hj;hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_u16asbuh1hhjyubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjyubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjyubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_u16asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u16 *valueh](h)}(hhh]jI)}(hu16h]hu16}(hj:hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj )}j ]jc.debugfs_create_u16asbuh1hhj3ubj2)}(h h]h }(hjXhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj3ubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjI)}(hvalueh]hvalue}(hjshhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj3ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMvubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMvubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMvhjhhubjw)}(hhh]h)}(hMcreate a debugfs file that is used to read and write an unsigned 16-bit valueh]hMcreate a debugfs file that is used to read and write an unsigned 16-bit value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMvhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMvubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``u16 *value`` a pointer to the variable that the file should read to and write from. **Description** This function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMzhjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMwhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMxhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMxhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMxhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjPh]hstruct dentry *parent}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM{hjJubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjihhhNhNubj)}(h``NULL``h]hNULL}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubhF, then the file will be created in the root of the debugfs filesystem.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMyhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM{hjubj)}(hV``u16 *value`` a pointer to the variable that the file should read to and write from. h](j)}(h``u16 *value``h]j)}(hjh]h u16 *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM}hjubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubh)}(hThis function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](hdThis function creates a file in debugfs with the given name that contains the value of the variable }(hjhhhNhNubj)}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . If the }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 variable is so set, it can be read from, and written to.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_u32 (C function)c.debugfs_create_u32hNtauh1hhjMhhhNhNubj)}(hhh](j)}(h[void debugfs_create_u32 (const char *name, umode_t mode, struct dentry *parent, u32 *value)h]j)}(hZvoid debugfs_create_u32(const char *name, umode_t mode, struct dentry *parent, u32 *value)h](jf)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj=hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hjPhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj=hhhjOhMubjC)}(hdebugfs_create_u32h]jI)}(hdebugfs_create_u32h]hdebugfs_create_u32}(hjbhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj^ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj=hhhjOhMubj=)}(hC(const char *name, umode_t mode, struct dentry *parent, u32 *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hj~hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjdsbc.debugfs_create_u32asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!ubj2)}(h h]h }(hj2hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubh)}(hhh]jI)}(hdentryh]hdentry}(hjChhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj )}j ]jc.debugfs_create_u32asbuh1hhj!ubj2)}(h h]h }(hjahhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj!ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjI)}(hparenth]hparent}(hj|hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj!ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubjC)}(h u32 *valueh](h)}(hhh]jI)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_u32asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjvubeh}(h]h ]h"]h$]h&]j`jauh1j<hj=hhhjOhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj9hhhjOhMubah}(h]j4ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjOhMhj6hhubjw)}(hhh]h)}(hMcreate a debugfs file that is used to read and write an unsigned 32-bit valueh]hMcreate a debugfs file that is used to read and write an unsigned 32-bit value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhj6hhhjOhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``u32 *value`` a pointer to the variable that the file should read to and write from. **Description** This function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hj<h]hconst char *name}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj6ubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjuh]h umode_t mode}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjoubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF, then the file will be created in the root of the debugfs filesystem.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubj)}(hV``u32 *value`` a pointer to the variable that the file should read to and write from. h](j)}(h``u32 *value``h]j)}(hjh]h u32 *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubh)}(hThis function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](hdThis function creates a file in debugfs with the given name that contains the value of the variable }(hjLhhhNhNubj)}(h **value**h]hvalue}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh . If the }(hjLhhhNhNubj)}(h**mode**h]hmode}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh9 variable is so set, it can be read from, and written to.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_u64 (C function)c.debugfs_create_u64hNtauh1hhjMhhhNhNubj)}(hhh](j)}(h[void debugfs_create_u64 (const char *name, umode_t mode, struct dentry *parent, u64 *value)h]j)}(hZvoid debugfs_create_u64(const char *name, umode_t mode, struct dentry *parent, u64 *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hdebugfs_create_u64h]jI)}(hdebugfs_create_u64h]hdebugfs_create_u64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hC(const char *name, umode_t mode, struct dentry *parent, u64 *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_u64asbuh1hhj5ubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj5ubjI)}(hmodeh]hmode}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj5ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jXc.debugfs_create_u64asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u64 *valueh](h)}(hhh]jI)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jXc.debugfs_create_u64asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hj/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hMcreate a debugfs file that is used to read and write an unsigned 64-bit valueh]hMcreate a debugfs file that is used to read and write an unsigned 64-bit value}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``u64 *value`` a pointer to the variable that the file should read to and write from. **Description** This function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjuubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hj h]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hj%hhhNhNubj)}(h``NULL``h]hNULL}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubhF, then the file will be created in the root of the debugfs filesystem.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubj)}(hV``u64 *value`` a pointer to the variable that the file should read to and write from. h](j)}(h``u64 *value``h]j)}(hjXh]h u64 *value}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjRubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjuubh)}(hThis function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](hdThis function creates a file in debugfs with the given name that contains the value of the variable }(hjhhhNhNubj)}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . If the }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 variable is so set, it can be read from, and written to.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !debugfs_create_ulong (C function)c.debugfs_create_ulonghNtauh1hhjMhhhNhNubj)}(hhh](j)}(hgvoid debugfs_create_ulong (const char *name, umode_t mode, struct dentry *parent, unsigned long *value)h]j)}(hfvoid debugfs_create_ulong(const char *name, umode_t mode, struct dentry *parent, unsigned long *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj hMubjC)}(hdebugfs_create_ulongh]jI)}(hdebugfs_create_ulongh]hdebugfs_create_ulong}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj hMubj=)}(hM(const char *name, umode_t mode, struct dentry *parent, unsigned long *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hj:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj6ubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubjf)}(hcharh]hchar}(hjUhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj6ubj2)}(h h]h }(hjchhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjI)}(hnameh]hname}(hj~hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj2ubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jj sbc.debugfs_create_ulongasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj2ubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_ulongasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hj8hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj2ubjC)}(hunsigned long *valueh](jf)}(hunsignedh]hunsigned}(hjQhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjMubj2)}(h h]h }(hj_hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMubjf)}(hlongh]hlong}(hjmhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjMubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjI)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjMubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj2ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj hMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj hMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj hMhjhhubjw)}(hhh]h)}(hLcreate a debugfs file that is used to read and write an unsigned long value.h]hLcreate a debugfs file that is used to read and write an unsigned long value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``unsigned long *value`` a pointer to the variable that the file should read to and write from. **Description** This function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hj:h]h umode_t mode}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj4ubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjsh]hstruct dentry *parent}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjmubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF, then the file will be created in the root of the debugfs filesystem.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h```unsigned long *value`` a pointer to the variable that the file should read to and write from. h](j)}(h``unsigned long *value``h]j)}(hjh]hunsigned long *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubh)}(hThis function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](hdThis function creates a file in debugfs with the given name that contains the value of the variable }(hjhhhNhNubj)}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . If the }(hjhhhNhNubj)}(h**mode**h]hmode}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 variable is so set, it can be read from, and written to.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_x8 (C function)c.debugfs_create_x8hNtauh1hhjMhhhNhNubj)}(hhh](j)}(hYvoid debugfs_create_x8 (const char *name, umode_t mode, struct dentry *parent, u8 *value)h]j)}(hXvoid debugfs_create_x8(const char *name, umode_t mode, struct dentry *parent, u8 *value)h](jf)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj`hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hjshhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj`hhhjrhMubjC)}(hdebugfs_create_x8h]jI)}(hdebugfs_create_x8h]hdebugfs_create_x8}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhj`hhhjrhMubj=)}(hB(const char *name, umode_t mode, struct dentry *parent, u8 *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_x8asbuh1hhjubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hj/hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjDubj2)}(h h]h }(hjUhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubh)}(hhh]jI)}(hdentryh]hdentry}(hjfhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj )}j ]jc.debugfs_create_x8asbuh1hhjDubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjDubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjDubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u8 *valueh](h)}(hhh]jI)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_x8asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hj`hhhjrhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj\hhhjrhMubah}(h]jWah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjrhMhjYhhubjw)}(hhh]h)}(hLcreate a debugfs file that is used to read and write an unsigned 8-bit valueh]hLcreate a debugfs file that is used to read and write an unsigned 8-bit value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjYhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``u8 *value`` a pointer to the variable that the file should read to and write from.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj:ubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hj_h]hconst char *name}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjYubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF, then the file will be created in the root of the debugfs filesystem.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubj)}(hT``u8 *value`` a pointer to the variable that the file should read to and write from.h](j)}(h ``u8 *value``h]j)}(hjh]h u8 *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_x16 (C function)c.debugfs_create_x16hNtauh1hhjMhhhNhNubj)}(hhh](j)}(h[void debugfs_create_x16 (const char *name, umode_t mode, struct dentry *parent, u16 *value)h]j)}(hZvoid debugfs_create_x16(const char *name, umode_t mode, struct dentry *parent, u16 *value)h](jf)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjrhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM)ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjrhhhjhM)ubjC)}(hdebugfs_create_x16h]jI)}(hdebugfs_create_x16h]hdebugfs_create_x16}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjrhhhjhM)ubj=)}(hC(const char *name, umode_t mode, struct dentry *parent, u16 *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_x16asbuh1hhj ubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjI)}(hmodeh]hmode}(hjAhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjVubj2)}(h h]h }(hjghhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubh)}(hhh]jI)}(hdentryh]hdentry}(hjxhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj )}j ]j/c.debugfs_create_x16asbuh1hhjVubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjVubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u16 *valueh](h)}(hhh]jI)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j/c.debugfs_create_x16asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjrhhhjhM)ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjnhhhjhM)ubah}(h]jiah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM)hjkhhubjw)}(hhh]h)}(hMcreate a debugfs file that is used to read and write an unsigned 16-bit valueh]hMcreate a debugfs file that is used to read and write an unsigned 16-bit value}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM)hj-hhubah}(h]h ]h"]h$]h&]uh1jvhjkhhhjhM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``u16 *value`` a pointer to the variable that the file should read to and write from.h](h)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM-hjLubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjqh]hconst char *name}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM*hjkubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjhubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM+hjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjhubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM.hjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF, then the file will be created in the root of the debugfs filesystem.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjhubj)}(hU``u16 *value`` a pointer to the variable that the file should read to and write from.h](j)}(h``u16 *value``h]j)}(hj/h]h u16 *value}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM/hj)ubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM/hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhM/hjhubeh}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_x32 (C function)c.debugfs_create_x32hNtauh1hhjMhhhNhNubj)}(hhh](j)}(h[void debugfs_create_x32 (const char *name, umode_t mode, struct dentry *parent, u32 *value)h]j)}(hZvoid debugfs_create_x32(const char *name, umode_t mode, struct dentry *parent, u32 *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM;ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM;ubjC)}(hdebugfs_create_x32h]jI)}(hdebugfs_create_x32h]hdebugfs_create_x32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM;ubj=)}(hC(const char *name, umode_t mode, struct dentry *parent, u32 *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_x32asbuh1hhjubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jAc.debugfs_create_x32asbuh1hhjhubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u32 *valueh](h)}(hhh]jI)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jAc.debugfs_create_x32asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM;ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM;ubah}(h]j{ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM;hj}hhubjw)}(hhh]h)}(hMcreate a debugfs file that is used to read and write an unsigned 32-bit valueh]hMcreate a debugfs file that is used to read and write an unsigned 32-bit value}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM;hj?hhubah}(h]h ]h"]h$]h&]uh1jvhj}hhhjhM;ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``u32 *value`` a pointer to the variable that the file should read to and write from.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM?hj^ubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM<hj}ubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjzubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM=hjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjzubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM@hjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF, then the file will be created in the root of the debugfs filesystem.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM>hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM@hjzubj)}(hU``u32 *value`` a pointer to the variable that the file should read to and write from.h](j)}(h``u32 *value``h]j)}(hjAh]h u32 *value}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMAhj;ubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMAhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMAhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_x64 (C function)c.debugfs_create_x64hNtauh1hhjMhhhNhNubj)}(hhh](j)}(h[void debugfs_create_x64 (const char *name, umode_t mode, struct dentry *parent, u64 *value)h]j)}(hZvoid debugfs_create_x64(const char *name, umode_t mode, struct dentry *parent, u64 *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMMubjC)}(hdebugfs_create_x64h]jI)}(hdebugfs_create_x64h]hdebugfs_create_x64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMMubj=)}(hC(const char *name, umode_t mode, struct dentry *parent, u64 *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj7hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_x64asbuh1hhj0ubj2)}(h h]h }(hjWhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj0ubjI)}(hmodeh]hmode}(hjehhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj0ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jSc.debugfs_create_x64asbuh1hhjzubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjzubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h u64 *valueh](h)}(hhh]jI)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jSc.debugfs_create_x64asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hj*hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMMhjhhubjw)}(hhh]h)}(hMcreate a debugfs file that is used to read and write an unsigned 64-bit valueh]hMcreate a debugfs file that is used to read and write an unsigned 64-bit value}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMMhjQhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjljjljjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``u64 *value`` a pointer to the variable that the file should read to and write from.h](h)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMQhjpubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMNhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMOhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMRhjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hj hhhNhNubj)}(h``NULL``h]hNULL}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhF, then the file will be created in the root of the debugfs filesystem.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubj)}(hU``u64 *value`` a pointer to the variable that the file should read to and write from.h](j)}(h``u64 *value``h]j)}(hjSh]h u64 *value}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMShjMubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMShjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMShjubeh}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j "debugfs_create_size_t (C function)c.debugfs_create_size_thNtauh1hhjMhhhNhNubj)}(hhh](j)}(havoid debugfs_create_size_t (const char *name, umode_t mode, struct dentry *parent, size_t *value)h]j)}(h`void debugfs_create_size_t(const char *name, umode_t mode, struct dentry *parent, size_t *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMoubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMoubjC)}(hdebugfs_create_size_th]jI)}(hdebugfs_create_size_th]hdebugfs_create_size_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMoubj=)}(hF(const char *name, umode_t mode, struct dentry *parent, size_t *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjIhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_size_tasbuh1hhjBubj2)}(h h]h }(hjihhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjBubjI)}(hmodeh]hmode}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjBubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jec.debugfs_create_size_tasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h size_t *valueh](h)}(hhh]jI)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jec.debugfs_create_size_tasbuh1hhjubj2)}(h h]h }(hj!hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMoubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMoubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMohjhhubjw)}(hhh]h)}(hDcreate a debugfs file that is used to read and write an size_t valueh]hDcreate a debugfs file that is used to read and write an size_t value}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMohjchhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMoubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``size_t *value`` a pointer to the variable that the file should read to and write from.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMshjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMphjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMqhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMthjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hj2hhhNhNubj)}(h``NULL``h]hNULL}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubhF, then the file will be created in the root of the debugfs filesystem.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMrhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMthjubj)}(hX``size_t *value`` a pointer to the variable that the file should read to and write from.h](j)}(h``size_t *value``h]j)}(hjeh]h size_t *value}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMuhj_ubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMuhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMuhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $debugfs_create_atomic_t (C function)c.debugfs_create_atomic_thNtauh1hhjMhhhNhNubj)}(hhh](j)}(hevoid debugfs_create_atomic_t (const char *name, umode_t mode, struct dentry *parent, atomic_t *value)h]j)}(hdvoid debugfs_create_atomic_t(const char *name, umode_t mode, struct dentry *parent, atomic_t *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hdebugfs_create_atomic_th]jI)}(hdebugfs_create_atomic_th]hdebugfs_create_atomic_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hH(const char *name, umode_t mode, struct dentry *parent, atomic_t *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrach"]h$]h&]uh1jehjubj2)}(h h]h }(hj$hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hj?hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj[hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_atomic_tasbuh1hhjTubj2)}(h h]h }(hj{hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjTubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjTubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jwc.debugfs_create_atomic_tasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hatomic_t *valueh](h)}(hhh]jI)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jwc.debugfs_create_atomic_tasbuh1hhjubj2)}(h h]h }(hj3hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hvalueh]hvalue}(hjNhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hFcreate a debugfs file that is used to read and write an atomic_t valueh]hFcreate a debugfs file that is used to read and write an atomic_t value}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``atomic_t *value`` a pointer to the variable that the file should read to and write from.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hj+h]hstruct dentry *parent}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj%ubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjDhhhNhNubj)}(h``NULL``h]hNULL}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubhF, then the file will be created in the root of the debugfs filesystem.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubj)}(hZ``atomic_t *value`` a pointer to the variable that the file should read to and write from.h](j)}(h``atomic_t *value``h]j)}(hjwh]hatomic_t *value}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjqubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  debugfs_create_bool (C function)c.debugfs_create_boolhNtauh1hhjMhhhNhNubj)}(hhh](j)}(h]void debugfs_create_bool (const char *name, umode_t mode, struct dentry *parent, bool *value)h]j)}(h\void debugfs_create_bool(const char *name, umode_t mode, struct dentry *parent, bool *value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hdebugfs_create_boolh]jI)}(hdebugfs_create_boolh]hdebugfs_create_bool}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hD(const char *name, umode_t mode, struct dentry *parent, bool *value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubjf)}(hcharh]hchar}(hj(hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hj6hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hnameh]hname}(hjQhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjmhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_boolasbuh1hhjfubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjfubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjfubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_boolasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h bool *valueh](jf)}(hjih]hbool}(hj$hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj ubj2)}(h h]h }(hj1hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjI)}(hvalueh]hvalue}(hjLhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(hDcreate a debugfs file that is used to read and write a boolean valueh]hDcreate a debugfs file that is used to read and write a boolean value}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjshhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``bool *value`` a pointer to the variable that the file should read to and write from. **Description** This function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hj)h]hstruct dentry *parent}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj#ubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjBhhhNhNubj)}(h``NULL``h]hNULL}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubhF, then the file will be created in the root of the debugfs filesystem.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjubj)}(hW``bool *value`` a pointer to the variable that the file should read to and write from. h](j)}(h``bool *value``h]j)}(hjuh]h bool *value}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjoubj)}(hhh]h)}(hFa pointer to the variable that the file should read to and write from.h]hFa pointer to the variable that the file should read to and write from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubh)}(hThis function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](hdThis function creates a file in debugfs with the given name that contains the value of the variable }(hjhhhNhNubj)}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . If the }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 variable is so set, it can be read from, and written to.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j debugfs_create_str (C function)c.debugfs_create_strhNtauh1hhjMhhhNhNubj)}(hhh](j)}(h]void debugfs_create_str (const char *name, umode_t mode, struct dentry *parent, char **value)h]j)}(h\void debugfs_create_str(const char *name, umode_t mode, struct dentry *parent, char **value)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMcubj2)}(h h]h }(hj)hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhj(hMcubjC)}(hdebugfs_create_strh]jI)}(hdebugfs_create_strh]hdebugfs_create_str}(hj;hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj7ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhj(hMcubj=)}(hE(const char *name, umode_t mode, struct dentry *parent, char **value)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjWhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj2)}(h h]h }(hjdhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjSubjf)}(hcharh]hchar}(hjrhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjSubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjSubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jj=sbc.debugfs_create_strasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_strasbuh1hhjubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubjC)}(h char **valueh](jf)}(hcharh]hchar}(hjnhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjjubj2)}(h h]h }(hj|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjI)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjOubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhj(hMcubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhj(hMcubah}(h]j ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhj(hMchjhhubjw)}(hhh]h)}(hCcreate a debugfs file that is used to read and write a string valueh]hCcreate a debugfs file that is used to read and write a string value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMchjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhj(hMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``char **value`` a pointer to the variable that the file should read to and write from. This pointer and the string it points to must not be ``NULL``. **Description** This function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMghjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMdhj ubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMdhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMdhjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjHh]h umode_t mode}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMehjBubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMehj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMehjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhhj{ubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF, then the file will be created in the root of the debugfs filesystem.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMfhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(h``char **value`` a pointer to the variable that the file should read to and write from. This pointer and the string it points to must not be ``NULL``. h](j)}(h``char **value``h]j)}(hjh]h char **value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMjhjubj)}(hhh]h)}(ha pointer to the variable that the file should read to and write from. This pointer and the string it points to must not be ``NULL``.h](h|a pointer to the variable that the file should read to and write from. This pointer and the string it points to must not be }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMlhjubh)}(hThis function creates a file in debugfs with the given name that contains the value of the variable **value**. If the **mode** variable is so set, it can be read from, and written to.h](hdThis function creates a file in debugfs with the given name that contains the value of the variable }(hj1hhhNhNubj)}(h **value**h]hvalue}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh . If the }(hj1hhhNhNubj)}(h**mode**h]hmode}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh9 variable is so set, it can be read from, and written to.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j  debugfs_create_blob (C function)c.debugfs_create_blobhNtauh1hhjMhhhNhNubj)}(hhh](j)}(h~struct dentry * debugfs_create_blob (const char *name, umode_t mode, struct dentry *parent, struct debugfs_blob_wrapper *blob)h]j)}(h|struct dentry *debugfs_create_blob(const char *name, umode_t mode, struct dentry *parent, struct debugfs_blob_wrapper *blob)h](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jdebugfs_create_blobsbc.debugfs_create_blobasbuh1hhjhhhjhMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjC)}(hdebugfs_create_blobh]jI)}(hjh]hdebugfs_create_blob}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hZ(const char *name, umode_t mode, struct dentry *parent, struct debugfs_blob_wrapper *blob)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hj'hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjBhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj^hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj )}j ]jc.debugfs_create_blobasbuh1hhjWubj2)}(h h]h }(hj|hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjWubjI)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjWubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_blobasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h!struct debugfs_blob_wrapper *blobh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hj hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdebugfs_blob_wrapperh]hdebugfs_blob_wrapper}(hj1hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj )}j ]jc.debugfs_create_blobasbuh1hhjubj2)}(h h]h }(hjOhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hblobh]hblob}(hjjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhj|hhhjhMubah}(h]jwah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjyhhubjw)}(hhh]h)}(hBcreate a debugfs file that is used to read and write a binary blobh]hBcreate a debugfs file that is used to read and write a binary blob}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjyhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hXa**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``struct debugfs_blob_wrapper *blob`` a pointer to a struct debugfs_blob_wrapper which contains a pointer to the blob data and the size of the data. **Description** This function creates a file in debugfs with the given name that exports **blob->data** as a binary blob. If the **mode** variable is so set it can be read from and written to. This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned. If debugfs is not enabled in the kernel, the value ERR_PTR(-ENODEV) will be returned.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjGh]hstruct dentry *parent}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjAubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hj`hhhNhNubj)}(h``NULL``h]hNULL}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubhF, then the file will be created in the root of the debugfs filesystem.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubj)}(h``struct debugfs_blob_wrapper *blob`` a pointer to a struct debugfs_blob_wrapper which contains a pointer to the blob data and the size of the data. h](j)}(h%``struct debugfs_blob_wrapper *blob``h]j)}(hjh]h!struct debugfs_blob_wrapper *blob}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(hna pointer to a struct debugfs_blob_wrapper which contains a pointer to the blob data and the size of the data.h]hna pointer to a struct debugfs_blob_wrapper which contains a pointer to the blob data and the size of the data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubh)}(hThis function creates a file in debugfs with the given name that exports **blob->data** as a binary blob. If the **mode** variable is so set it can be read from and written to.h](hIThis function creates a file in debugfs with the given name that exports }(hjhhhNhNubj)}(h**blob->data**h]h blob->data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh as a binary blob. If the }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh7 variable is so set it can be read from and written to.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubh)}(hX(This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned.h]hX(This function will return a pointer to a dentry if it succeeds. This pointer must be passed to the debugfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubh)}(hUIf debugfs is not enabled in the kernel, the value ERR_PTR(-ENODEV) will be returned.h]hUIf debugfs is not enabled in the kernel, the value ERR_PTR(-ENODEV) will be returned.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j %debugfs_create_u32_array (C function)c.debugfs_create_u32_arrayhNtauh1hhjMhhhNhNubj)}(hhh](j)}(hvvoid debugfs_create_u32_array (const char *name, umode_t mode, struct dentry *parent, struct debugfs_u32_array *array)h]j)}(huvoid debugfs_create_u32_array(const char *name, umode_t mode, struct dentry *parent, struct debugfs_u32_array *array)h](jf)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjRhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hjehhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjRhhhjdhMubjC)}(hdebugfs_create_u32_arrayh]jI)}(hdebugfs_create_u32_arrayh]hdebugfs_create_u32_array}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjsubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjRhhhjdhMubj=)}(hX(const char *name, umode_t mode, struct dentry *parent, struct debugfs_u32_array *array)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]j)}jjysbc.debugfs_create_u32_arrayasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hj!hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj6ubj2)}(h h]h }(hjGhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubh)}(hhh]jI)}(hdentryh]hdentry}(hjXhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj )}j ]jc.debugfs_create_u32_arrayasbuh1hhj6ubj2)}(h h]h }(hjvhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj6ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj6ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct debugfs_u32_array *arrayh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdebugfs_u32_arrayh]hdebugfs_u32_array}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jc.debugfs_create_u32_arrayasbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(harrayh]harray}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjRhhhjdhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjNhhhjdhMubah}(h]jIah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjdhMhjKhhubjw)}(hhh]h)}(h5create a debugfs file that is used to read u32 array.h]h5create a debugfs file that is used to read u32 array.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jvhjKhhhjdhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have. ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``struct debugfs_u32_array *array`` wrapper struct containing data pointer and size of the array. **Description** This function creates a file in debugfs with the given name that exports **array** as data. If the **mode** variable is so set it can be read from. Writing is not supported. Seek within the file is also not supported. Once array is created its size can not be changed.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjGubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjlh]hconst char *name}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjfubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h;``umode_t mode`` the permission that the file should have. h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h)the permission that the file should have.h]h)the permission that the file should have.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM hjubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF, then the file will be created in the root of the debugfs filesystem.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjcubj)}(hb``struct debugfs_u32_array *array`` wrapper struct containing data pointer and size of the array. h](j)}(h#``struct debugfs_u32_array *array``h]j)}(hj*h]hstruct debugfs_u32_array *array}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM hj$ubj)}(hhh]h)}(h=wrapper struct containing data pointer and size of the array.h]h=wrapper struct containing data pointer and size of the array.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hjcubeh}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM hjGubh)}(hX This function creates a file in debugfs with the given name that exports **array** as data. If the **mode** variable is so set it can be read from. Writing is not supported. Seek within the file is also not supported. Once array is created its size can not be changed.h](hIThis function creates a file in debugfs with the given name that exports }(hj{hhhNhNubj)}(h **array**h]harray}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh as data. If the }(hj{hhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh variable is so set it can be read from. Writing is not supported. Seek within the file is also not supported. Once array is created its size can not be changed.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j !debugfs_print_regs32 (C function)c.debugfs_print_regs32hNtauh1hhjMhhhNhNubj)}(hhh](j)}(h}void debugfs_print_regs32 (struct seq_file *s, const struct debugfs_reg32 *regs, int nregs, void __iomem *base, char *prefix)h]j)}(h|void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs, int nregs, void __iomem *base, char *prefix)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM#ubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhM#ubjC)}(hdebugfs_print_regs32h]jI)}(hdebugfs_print_regs32h]hdebugfs_print_regs32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhM#ubj=)}(hc(struct seq_file *s, const struct debugfs_reg32 *regs, int nregs, void __iomem *base, char *prefix)h](jC)}(hstruct seq_file *sh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hseq_fileh]hseq_file}(hj)hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj )}j ]j)}jjsbc.debugfs_print_regs32asbuh1hhjubj2)}(h h]h }(hjIhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hjh]hs}(hjdhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h const struct debugfs_reg32 *regsh](j )}(hjh]hconst}(hj|hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjxubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjxubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubh)}(hhh]jI)}(h debugfs_reg32h]h debugfs_reg32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jEc.debugfs_print_regs32asbuh1hhjxubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjxubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjI)}(hregsh]hregs}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjxubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h int nregsh](jf)}(hinth]hint}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hnregsh]hnregs}(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hvoid __iomem *baseh](jf)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehj8ubj2)}(h h]h }(hjJhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8ubh__iomem}(hj8hhhNhNubj2)}(h h]h }(hj\hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj8ubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjI)}(hbaseh]hbase}(hjwhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj8ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h char *prefixh](jf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hprefixh]hprefix}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhM#ubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhM#ubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhM#hjhhubjw)}(hhh]h)}(h,use seq_print to describe a set of registersh]h,use seq_print to describe a set of registers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM#hjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct seq_file *s`` the seq_file structure being used to generate output ``const struct debugfs_reg32 *regs`` an array if struct debugfs_reg32 structures ``int nregs`` the length of the above array ``void __iomem *base`` the base address to be used in reading the registers ``char *prefix`` a string to be prefixed to every output line **Description** This function outputs a text block describing the current values of some 32-bit hardware registers. It is meant to be used within debugfs files based on seq_file that need to show registers, intermixed with other information. The prefix argument may be used to specify a leading string, because some peripherals have several blocks of identical registers, for example configuration of dma channelsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM'hjubj)}(hhh](j)}(hL``struct seq_file *s`` the seq_file structure being used to generate output h](j)}(h``struct seq_file *s``h]j)}(hj$h]hstruct seq_file *s}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM$hjubj)}(hhh]h)}(h4the seq_file structure being used to generate outputh]h4the seq_file structure being used to generate output}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM$hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM$hjubj)}(hQ``const struct debugfs_reg32 *regs`` an array if struct debugfs_reg32 structures h](j)}(h$``const struct debugfs_reg32 *regs``h]j)}(hj]h]h const struct debugfs_reg32 *regs}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM%hjWubj)}(hhh]h)}(h+an array if struct debugfs_reg32 structuresh]h+an array if struct debugfs_reg32 structures}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM%hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM%hjubj)}(h,``int nregs`` the length of the above array h](j)}(h ``int nregs``h]j)}(hjh]h int nregs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM&hjubj)}(hhh]h)}(hthe length of the above arrayh]hthe length of the above array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjubj)}(hL``void __iomem *base`` the base address to be used in reading the registers h](j)}(h``void __iomem *base``h]j)}(hjh]hvoid __iomem *base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM'hjubj)}(hhh]h)}(h4the base address to be used in reading the registersh]h4the base address to be used in reading the registers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubj)}(h>``char *prefix`` a string to be prefixed to every output line h](j)}(h``char *prefix``h]j)}(hjh]h char *prefix}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM(hjubj)}(hhh]h)}(h,a string to be prefixed to every output lineh]h,a string to be prefixed to every output line}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM*hjubh)}(hXThis function outputs a text block describing the current values of some 32-bit hardware registers. It is meant to be used within debugfs files based on seq_file that need to show registers, intermixed with other information. The prefix argument may be used to specify a leading string, because some peripherals have several blocks of identical registers, for example configuration of dma channelsh]hXThis function outputs a text block describing the current values of some 32-bit hardware registers. It is meant to be used within debugfs files based on seq_file that need to show registers, intermixed with other information. The prefix argument may be used to specify a leading string, because some peripherals have several blocks of identical registers, for example configuration of dma channels}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM)hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j $debugfs_create_regset32 (C function)c.debugfs_create_regset32hNtauh1hhjMhhhNhNubj)}(hhh](j)}(huvoid debugfs_create_regset32 (const char *name, umode_t mode, struct dentry *parent, struct debugfs_regset32 *regset)2qh]j)}(htvoid debugfs_create_regset32(const char *name, umode_t mode, struct dentry *parent, struct debugfs_regset32 *regset)h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMSubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMSubjC)}(hdebugfs_create_regset32h]jI)}(hdebugfs_create_regset32h]hdebugfs_create_regset32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMSubj=)}(hX(const char *name, umode_t mode, struct dentry *parent, struct debugfs_regset32 *regset)h](jC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(h umode_t modeh](h)}(hhh]jI)}(humode_th]humode_t}(hj%hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_regset32asbuh1hhjubj2)}(h h]h }(hjEhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjI)}(hmodeh]hmode}(hjShhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jAc.debugfs_create_regset32asbuh1hhjhubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjI)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjhubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubjC)}(hstruct debugfs_regset32 *regseth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdebugfs_regset32h]hdebugfs_regset32}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jAc.debugfs_create_regset32asbuh1hhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hregseth]hregset}(hj3hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhjubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMSubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMSubah}(h]j{ah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMShj}hhubjw)}(hhh]h)}(h2create a debugfs file that returns register valuesh]h2create a debugfs file that returns register values}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMShjZhhubah}(h]h ]h"]h$]h&]uh1jvhj}hhhjhMSubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jhhhjMhNhNubj)}(hX@**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``struct debugfs_regset32 *regset`` a pointer to a struct debugfs_regset32, which contains a pointer to an array of register definitions, the array size and the base address where the register bank is to be found. **Description** This function creates a file in debugfs with the given name that reports the names and values of a set of 32-bit registers. If the **mode** variable is so set it can be read from. Writing is not supported.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMWhjyubj)}(hhh](j)}(hV``const char *name`` a pointer to a string containing the name of the file to create. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMThjubj)}(hhh]h)}(h@a pointer to a string containing the name of the file to create.h]h@a pointer to a string containing the name of the file to create.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMUhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hjh]hstruct dentry *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMXhj ubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hj)hhhNhNubj)}(h``NULL``h]hNULL}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhF, then the file will be created in the root of the debugfs filesystem.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMVhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMXhjubj)}(h``struct debugfs_regset32 *regset`` a pointer to a struct debugfs_regset32, which contains a pointer to an array of register definitions, the array size and the base address where the register bank is to be found. h](j)}(h#``struct debugfs_regset32 *regset``h]j)}(hj\h]hstruct debugfs_regset32 *regset}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM[hjVubj)}(hhh]h)}(ha pointer to a struct debugfs_regset32, which contains a pointer to an array of register definitions, the array size and the base address where the register bank is to be found.h]ha pointer to a struct debugfs_regset32, which contains a pointer to an array of register definitions, the array size and the base address where the register bank is to be found.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMYhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM[hjubeh}(h]h ]h"]h$]h&]uh1jhjyubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM]hjyubh)}(hThis function creates a file in debugfs with the given name that reports the names and values of a set of 32-bit registers. If the **mode** variable is so set it can be read from. Writing is not supported.h](hThis function creates a file in debugfs with the given name that reports the names and values of a set of 32-bit registers. If the }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB variable is so set it can be read from. Writing is not supported.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chM\hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](j (debugfs_create_devm_seqfile (C function)c.debugfs_create_devm_seqfilehNtauh1hhjMhhhNhNubj)}(hhh](j)}(hvoid debugfs_create_devm_seqfile (struct device *dev, const char *name, struct dentry *parent, int (*read_fn)(struct seq_file *s, void *data))h]j)}(hvoid debugfs_create_devm_seqfile(struct device *dev, const char *name, struct dentry *parent, int (*read_fn)(struct seq_file *s, void *data))h](jf)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjhhhjhMubjC)}(hdebugfs_create_devm_seqfileh]jI)}(hdebugfs_create_devm_seqfileh]hdebugfs_create_devm_seqfile}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj ubah}(h]h ](j[j\eh"]h$]h&]j`jauh1jBhjhhhjhMubj=)}(hm(struct device *dev, const char *name, struct dentry *parent, int (*read_fn)(struct seq_file *s, void *data))h](jC)}(hstruct device *devh](j )}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(ubj2)}(h h]h }(hj9hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubh)}(hhh]jI)}(hdeviceh]hdevice}(hjJhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj )}j ]j)}jjsbc.debugfs_create_devm_seqfileasbuh1hhj(ubj2)}(h h]h }(hjjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hj(ubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjI)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhj(ubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubjC)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubjf)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubjC)}(hstruct dentry *parenth](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubh)}(hhh]jI)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jfc.debugfs_create_devm_seqfileasbuh1hhjubj2)}(h h]h }(hj7hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(hparenth]hparent}(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubjC)}(h.int (*read_fn)(struct seq_file *s, void *data)h](jf)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjgubj2)}(h h]h }(hjyhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(hread_fnh]hread_fn}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjgubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubh)}(hhh]jI)}(hseq_fileh]hseq_file}(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj )}j ]jfc.debugfs_create_devm_seqfileasbuh1hhjgubj2)}(h h]h }(hjhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(hjh]hs}(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubj)}(hj3h]h,}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj2)}(h h]h }(hj:hhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubjf)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jrah"]h$]h&]uh1jehjgubj2)}(h h]h }(hjVhhhNhNubah}(h]h ]j>ah"]h$]h&]uh1j1hjgubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjI)}(hdatah]hdata}(hjqhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jHhjgubj)}(hjϙh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphj`jauh1jBhj$ubeh}(h]h ]h"]h$]h&]j`jauh1j<hjhhhjhMubeh}(h]h ]h"]h$]h&]j`jajhuh1jjijjhjhhhjhMubah}(h]jah ](jnjoeh"]h$]h&]jsjt)juhuh1jhjhMhjhhubjw)}(hhh]h)}(h.create a debugfs file that is bound to device.h]h.create a debugfs file that is bound to device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jvhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct device *dev`` device related to this debugfs file. ``const char *name`` name of the debugfs file. ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. ``int (*read_fn)(struct seq_file *s, void *data)`` function pointer called to print the seq_file content.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh](j)}(h<``struct device *dev`` device related to this debugfs file. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h$device related to this debugfs file.h]h$device related to this debugfs file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``const char *name`` name of the debugfs file. h](j)}(h``const char *name``h]j)}(hj"h]hconst char *name}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(hname of the debugfs file.h]hname of the debugfs file.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem. h](j)}(h``struct dentry *parent``h]j)}(hj[h]hstruct dentry *parent}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjUubj)}(hhh]h)}(ha pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the debugfs filesystem.h](hoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is }(hjthhhNhNubj)}(h``NULL``h]hNULL}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubhF, then the file will be created in the root of the debugfs filesystem.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubj)}(hi``int (*read_fn)(struct seq_file *s, void *data)`` function pointer called to print the seq_file content.h](j)}(h2``int (*read_fn)(struct seq_file *s, void *data)``h]j)}(hjh]h.int (*read_fn)(struct seq_file *s, void *data)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h6function pointer called to print the seq_file content.h]h6function pointer called to print the seq_file content.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:149: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubeh}(h]debugfs-interfaceah ]h"]debugfs interfaceah$]h&]uh1hhj<hhhhhKubeh}(h]the-debugfs-filesystemah ]h"]the debugfs filesystemah$]h&]uh1hhhhhhhhKubeh}(h]linux-filesystems-api-summaryah ]h"]linux filesystems api summaryah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj#error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehʌ _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj.j.jDjDjjjjj#j #jVjVj-j-jSjSjQjQjSjSj~`j{`jmjmj9j6jjjju nametypes}(jj.jDjjj#jVj-jSjQjSj~`jmj9jjuh}(jhj.hjDhj jjjj\jajjjjjXj]jjjjj5j:jjj!j!j#j#j@&jE&j(j(j+j+j#-j(-j.j.j1j"1j2j2j84j=4j06j56j7j7j29j79j:j:j4<j9<j>j>jR?jW?j@j@jTBjYBjjDj EjEjFjFjIjIjKjKjMjMjOjOjPjPj RjRjTjTjVjVjXjXj[j [j0^j5^jSajXaj'dj,djejej)gj.gjeijjijlj lj/nj4njojpjrjrjsjsjnujsuj*wj/wjyjyjzjzj|j|j%j*jjjjj҃j׃jSjXjԆjنj߈jj`jejjjɍj΍jSjXjԐjِjjjj jEjJjIjNjjjjjƨj˨j$j)jRjWjjjjjjj3j8j̾jѾjKjPj!j&jjjjjtjyj*j/jjjyj~j7j<jjjjj}jj"j'jjj;j@jjjSjXjjjjj?jDjVj[jjjjjoj #jjj jjj:j?jjjnjsjjj&j+jjj[j`j- j2 jjj8j=jtjyjjjjj7j<jjjVj#j/#j4#j%j%j('j-'j *j*j+j+j-j-j/j/j 3j3jZ6j_6j8j8j:j:j}>j>j@j@jKBjPBjUDjZDjFjFjmIjrIjLjLjNjNjPjQjSjSj-jVj;Vj@Vj Yj%Yj]j]j`j`jcjcj@ejEejfjfj]hjbhjXlj]lj%pj*pjIsjNsjujujxjxjx|j}|jjjNjSj jj`jejŌjʌj*j/jjj9j>jjjjj7j<j#j(j"j'jjjj jNjSjjjhjmj+j0jjjjjxj}jjjWj\jjj*j/jjjjjj!jjjjjGjLjjjjjjjjj?jDjjjAjFjj jljqjj jjj j jP jU jj j jjjjjj}jjjje jj jB$jG$j&j&j[*j`*j-j-j0j0jQ3jV3j5j5jp9ju9jJ<jO<j ?j?jAjAjhCjmCjEjEjGjGjJjJjLjLj?OjDOjRjRjTjTj-Xj2XjYjYj[j[j]j]j_j_jbjbj1dj6dj]fjbfjij ij!kj&kj>mjCmjnjnjpjpjrjrj)vj.vjzjzj~j~jjjj#jjjjjj$jpjujOjTjjjjjjjjjxj}j j%jjŧjjjjjjIJjjjjjKjPjjjjjjjjjojjj jjQjVjjjkjpjjj(j-jjjPjUjQjVjFjKj~jj2j7jxj}j_jdj=jBjjjjjj$j~jj j j j jjjjjjjujzjjjvj{jjjw j| j!j!jy#j~#jD%jI%j&j&ji(jn(j)j)j,j,jSj.jQj.j6.j;.j,2j12j6j$6j:j:j=j=jAjAjEjEjIjIjMjMjSjQjQjQj{`jSjSjSjUjUjVWj[Wj}ZjZj\j\j]^jb^jmj`j`j`jbjbjIdjNdjgjgjjjjj6jmjmjmjpjpjwsj|sjvjvjxjxjjCj]jbj|jjՈjڈjjŋjȐj͐jbjgj,j1jj"jj<jjMjjjojjj"j'j}jj(j-jjjjj0j5jGjLj߶jjjjjjj jMjRjxj}jjj4j9jjjjjWj\jijnj{jjjjjjjjjj jjwj|jIjNjjj{jjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.