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]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&]uh1j hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hpositive_aop_returnsh]h desc_sig_name)}(hjh]hpositive_aop_returns}(hj6hhhNhNubah}(h]h ]nah"]h$]h&]uh1j4hj0ubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1j.hjhhhjhKubeh}(h]h ]h"]h$]h&]jLjM add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhjhKhhhhubh desc_content)}(hhh]h)}(h(aop return codes with specific semanticsh]h(aop return codes with specific semantics}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM9hjdhhubah}(h]h ]h"]h$]h&]uh1jbhhhhhjhKubeh}(h]h ](cenumeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1hhhhhhNhNubh 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.hhM=hjubhdefinition_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.hhMGhjubh 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.hhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjubj)}(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)}(hjh]hAOP_TRUNCATED_PAGE}(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.hhMOhjubj)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMJhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMOhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(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.hhMShhhhubh)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMLhhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](haddress_space (C struct)c.address_spacehNtauh1hhhhhhNhNubh)}(hhh](j)}(h address_spaceh]j)}(hstruct address_spaceh](j )}(hstructh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjthhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMTubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjthhhjhMTubj/)}(h address_spaceh]j5)}(hjrh]h address_space}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjthhhjhMTubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjphhhjhMTubah}(h]jkah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMThjmhhubjc)}(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&]uh1jbhjmhhhjhMTubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1hhhhhhNhNubj)}(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; #ifdef CONFIG_READ_ONLY_THP_FOR_FS; atomic_t nr_thps; #endif; 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 list_head i_private_list; struct rw_semaphore i_mmap_rwsem; void * i_private_data; }; **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. ``nr_thps`` Number of THPs in the pagecache (non-shmem only). ``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_private_list`` For use by the owner of the address_space. ``i_mmap_rwsem`` Protects **i_mmap** and **i_mmap_writable**. ``i_private_data`` For use by the owner of the address_space.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)}(hXsstruct address_space { struct inode *host; struct xarray i_pages; struct rw_semaphore invalidate_lock; gfp_t gfp_mask; atomic_t i_mmap_writable; #ifdef CONFIG_READ_ONLY_THP_FOR_FS; atomic_t nr_thps; #endif; 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 list_head i_private_list; struct rw_semaphore i_mmap_rwsem; void * i_private_data; };h]hXsstruct address_space { struct inode *host; struct xarray i_pages; struct rw_semaphore invalidate_lock; gfp_t gfp_mask; atomic_t i_mmap_writable; #ifdef CONFIG_READ_ONLY_THP_FOR_FS; atomic_t nr_thps; #endif; 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 list_head i_private_list; struct rw_semaphore i_mmap_rwsem; void * i_private_data; };}hjsbah}(h]h ]h"]h$]h&]jLjMuh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubh)}(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.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.hhMhj$ubj)}(hhh]h)}(h,Owner, either the inode or the block_device.h]h,Owner, either the inode or the block_device.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj!ubj)}(h``i_pages`` Cached pages. h](j)}(h ``i_pages``h]j)}(hjch]hi_pages}(hjehhhNhNubah}(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.hhMhj]ubj)}(hhh]h)}(h Cached pages.h]h Cached pages.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhj!ubj)}(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&]uh1jhjhMhj!ubj)}(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&]uh1jhjhMhj!ubj)}(h?``i_mmap_writable`` Number of VM_SHARED, VM_MAYWRITE mappings. h](j)}(h``i_mmap_writable``h]j)}(hjh]hi_mmap_writable}(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)}(h*Number of VM_SHARED, VM_MAYWRITE mappings.h]h*Number of VM_SHARED, VM_MAYWRITE mappings.}(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>``nr_thps`` Number of THPs in the pagecache (non-shmem only). h](j)}(h ``nr_thps``h]j)}(hjHh]hnr_thps}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjBubj)}(hhh]h)}(h1Number of THPs in the pagecache (non-shmem only).h]h1Number of THPs in the pagecache (non-shmem only).}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj!ubj)}(h0``i_mmap`` Tree of private and shared mappings. h](j)}(h ``i_mmap``h]j)}(hjh]hi_mmap}(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.hhMhj{ubj)}(hhh]h)}(h$Tree of private and shared mappings.h]h$Tree of private and shared mappings.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj!ubj)}(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&]uh1jhjhMhj!ubj)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj!ubj)}(h``a_ops`` Methods. h](j)}(h ``a_ops``h]j)}(hj,h]ha_ops}(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)}(hMethods.h]hMethods.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj!ubj)}(h'``flags`` Error bits and flags (AS_*). h](j)}(h ``flags``h]j)}(hjeh]hflags}(hjghhhNhNubah}(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.hhMhj_ubj)}(hhh]h)}(hError bits and flags (AS_*).h]hError bits and flags (AS_*).}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj!ubj)}(h5``wb_err`` The most recent error which has occurred. h](j)}(h ``wb_err``h]j)}(hjh]hwb_err}(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)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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj!ubj)}(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&]uh1jhjhMhj!ubj)}(h>``i_private_list`` For use by the owner of the address_space. h](j)}(h``i_private_list``h]j)}(hjh]hi_private_list}(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.hhMhj ubj)}(hhh]h)}(h*For use by the owner of the address_space.h]h*For use by the owner of the address_space.}(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>``i_mmap_rwsem`` Protects **i_mmap** and **i_mmap_writable**. h](j)}(h``i_mmap_rwsem``h]j)}(hjIh]h i_mmap_rwsem}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjCubj)}(hhh]h)}(h,Protects **i_mmap** and **i_mmap_writable**.h](h Protects }(hjbhhhNhNubj)}(h **i_mmap**h]hi_mmap}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh and }(hjbhhhNhNubj)}(h**i_mmap_writable**h]hi_mmap_writable}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj!ubj)}(h=``i_private_data`` For use by the owner of the address_space.h](j)}(h``i_private_data``h]j)}(hjh]hi_private_data}(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&]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&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfile_ra_state (C struct)c.file_ra_statehNtauh1hhhhhhNhNubh)}(hhh](j)}(h file_ra_stateh]j)}(hstruct file_ra_stateh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj hMubj/)}(h file_ra_stateh]j5)}(hjh]h file_ra_state}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj hMhjhhubjc)}(hhh]h)}(hTrack a file's readahead state.h]h!Track a file’s readahead state.}(hjBhhhNhNubah}(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&]uh1jbhjhhhj hMubeh}(h]h ](jstructeh"]h$]h&]jjjjZjjZjjjuh1hhhhhhNhNubj)}(hX**Definition**:: struct file_ra_state { pgoff_t start; unsigned int size; unsigned int async_size; unsigned int ra_pages; unsigned int 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. ``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}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh:}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj^ubj)}(hstruct file_ra_state { pgoff_t start; unsigned int size; unsigned int async_size; unsigned int ra_pages; unsigned int 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 int mmap_miss; loff_t prev_pos; };}hjsbah}(h]h ]h"]h$]h&]jLjMuh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj^ubh)}(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.hhMhj^ubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``size`` Number of pages read in the most recent readahead. h](j)}(h``size``h]j)}(hjh]hsize}(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)}(h2Number of pages read in the most recent readahead.h]h2Number of pages read in the most recent readahead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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)}(hj!h]h async_size}(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.hhM hjubj)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM hjubj)}(hG``ra_pages`` Maximum size of a readahead request, copied from the bdi. h](j)}(h ``ra_pages``h]j)}(hj[h]hra_pages}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjUubj)}(hhh]h)}(h9Maximum size of a readahead request, copied from the bdi.h]h9Maximum size of a readahead request, copied from the bdi.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM hjubj)}(h?``mmap_miss`` How many mmap accesses missed in the page cache. h](j)}(h ``mmap_miss``h]j)}(hjh]h mmap_miss}(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 hjubj)}(hhh]h)}(h0How many mmap accesses missed in the page cache.h]h0How many mmap accesses missed in the page cache.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h;``prev_pos`` The last byte in the most recent read request.h](j)}(h ``prev_pos``h]j)}(hjh]hprev_pos}(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 hjubj)}(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.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(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.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.}(hj& hhhNhNubah}(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](hfile (C struct)c.filehNtauh1hhhhhhNhNubh)}(hhh](j)}(hfileh]j)}(h struct fileh](j )}(hjzh]hstruct}(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJ hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hj\ hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJ hhhj[ hMubj/)}(hfileh]j5)}(hjH h]hfile}(hjn hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjj ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjJ hhhj[ hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjF hhhj[ hMubah}(h]jA ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj[ hMhjC hhubjc)}(hhh]h)}(hRepresents a fileh]hRepresents a file}(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&]uh1jbhjC hhhj[ hMubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jjjuh1hhhhhhNhNubj)}(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; 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 ``f_path`` path of the file ``{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}(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.hhM'hj 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; 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; 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; };}hj sbah}(h]h ]h"]h$]h&]jLjMuh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM)hj 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.hhMKhj 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.hhM%hj 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 hM%hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM%hj ubj)}(h0``f_mode`` FMODE_* flags often used in hotpaths h](j)}(h ``f_mode``h]j)}(hj6 h]hf_mode}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4 ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM&hj0 ubj)}(hhh]h)}(h$FMODE_* flags often used in hotpathsh]h$FMODE_* flags often used in hotpaths}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK hM&hjL ubah}(h]h ]h"]h$]h&]uh1jhj0 ubeh}(h]h ]h"]h$]h&]uh1jhjK hM&hj ubj)}(h``f_op`` file operations h](j)}(h``f_op``h]j)}(hjo h]hf_op}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM'hji ubj)}(hhh]h)}(hfile operationsh]hfile operations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM'hj ubah}(h]h ]h"]h$]h&]uh1jhji ubeh}(h]h ]h"]h$]h&]uh1jhj hM'hj ubj)}(h8``f_mapping`` Contents of a cacheable, mappable object. h](j)}(h ``f_mapping``h]j)}(hj h]h f_mapping}(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)Contents of a cacheable, mappable object.h]h)Contents of a cacheable, mappable object.}(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)}(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.hhM)hj ubj)}(hhh]h)}(h"filesystem or driver specific datah]h"filesystem or driver specific data}(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``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.hhM*hj ubj)}(hhh]h)}(h cached inodeh]h cached inode}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ hM*hj0 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj/ hM*hj ubj)}(h``f_flags`` file flags h](j)}(h ``f_flags``h]j)}(hjS h]hf_flags}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM+hjM ubj)}(hhh]h)}(h file flagsh]h file flags}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh hM+hji ubah}(h]h ]h"]h$]h&]uh1jhjM ubeh}(h]h ]h"]h$]h&]uh1jhjh hM+hj ubj)}(h``f_iocb_flags`` iocb flags h](j)}(h``f_iocb_flags``h]j)}(hj h]h f_iocb_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.hhM,hj ubj)}(hhh]h)}(h iocb flagsh]h iocb flags}(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)}(h1``f_cred`` stashed credentials of creator/opener h](j)}(h ``f_cred``h]j)}(hj h]hf_cred}(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%stashed credentials of creator/openerh]h%stashed credentials of creator/opener}(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``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.hhM.hj ubj)}(hhh]h)}(h file ownerh]h file owner}(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``f_path`` path of the file h](j)}(h ``f_path``h]j)}(hj7 h]hf_path}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5 ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM/hj1 ubj)}(hhh]h)}(hpath of the fileh]hpath of the file}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL hM/hjM ubah}(h]h ]h"]h$]h&]uh1jhj1 ubeh}(h]h ]h"]h$]h&]uh1jhjL hM/hj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjp h]h{unnamed_union}}(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.hhM2hjj ubj)}(hhh]h)}(h anonymoush]h anonymous}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM2hj ubah}(h]h ]h"]h$]h&]uh1jhjj ubeh}(h]h ]h"]h$]h&]uh1jhj hM2hj 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.hhM0hj ubj)}(hhh]h)}(hlock protecting file positionh]hlock protecting file position}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM0hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM0hj 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.hhM1hj ubj)}(hhh]h)}(hspecific to pipesh]hspecific to pipes}(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``f_pos`` file position h](j)}(h ``f_pos``h]j)}(hj h]hf_pos}(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.hhM2hj ubj)}(hhh]h)}(h file positionh]h file position}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0 hM2hj1 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj0 hM2hj ubj)}(h1``f_security`` LSM security context of this file h](j)}(h``f_security``h]j)}(hjT h]h f_security}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM3hjN ubj)}(hhh]h)}(h!LSM security context of this fileh]h!LSM security context of this file}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji hM3hjj ubah}(h]h ]h"]h$]h&]uh1jhjN ubeh}(h]h ]h"]h$]h&]uh1jhji hM3hj 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.hhM4hj ubj)}(hhh]h)}(hwriteback errorh]hwriteback error}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM4hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM4hj ubj)}(h%``f_sb_err`` per sb writeback errors h](j)}(h ``f_sb_err``h]j)}(hj h]hf_sb_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.hhM5hj ubj)}(hhh]h)}(hper sb writeback errorsh]hper sb writeback errors}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM5hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM5hj ubj)}(h/``f_ep`` link of all epoll hooks for this file h](j)}(h``f_ep``h]j)}(hj h]hf_ep}(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.hhM6hj ubj)}(hhh]h)}(h%link of all epoll hooks for this fileh]h%link of all epoll hooks for this file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhM6hj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj8h]h{unnamed_union}}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM9hj2ubj)}(hhh]h)}(h anonymoush]h anonymous}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhM9hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhM9hj ubj)}(h&``f_task_work`` task work entry point h](j)}(h``f_task_work``h]j)}(hjqh]h f_task_work}(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.hhM7hjkubj)}(hhh]h)}(htask work entry pointh]htask work entry point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhM7hj 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.hhM8hjubj)}(hhh]h)}(hwork queue entrypointh]hwork queue entrypoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hj ubj)}(h ``f_ra`` file's readahead state h](j)}(h``f_ra``h]j)}(hjh]hf_ra}(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.hhM9hjubj)}(hhh]h)}(hfile's readahead stateh]hfile’s readahead state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hj ubj)}(hM``f_freeptr`` Pointer used by SLAB_TYPESAFE_BY_RCU file cache (don't touch.) h](j)}(h ``f_freeptr``h]j)}(hjh]h f_freeptr}(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:hjubj)}(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.)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM:hj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hM:hj ubj)}(h``f_ref`` reference counth](j)}(h ``f_ref``h]j)}(hjUh]hf_ref}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM:hjOubj)}(hhh]h)}(hreference counth]hreference count}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM;hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhM:hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hi_uid_into_vfsuid (C function)c.i_uid_into_vfsuidhNtauh1hhhhhhNhNubh)}(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]j5)}(hvfsuid_th]hvfsuid_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(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.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hi_uid_into_vfsuidh]j5)}(hjh]hi_uid_into_vfsuid}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubhdesc_parameterlist)}(h4(struct mnt_idmap *idmap, const struct inode *inode)h](hdesc_parameter)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hj+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]jc.i_uid_into_vfsuidasbuh1hhj ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubhdesc_sig_punctuation)}(h*h]h*}(hjYhhhNhNubah}(h]h ]pah"]h$]h&]uh1jWhj ubj5)}(hidmaph]hidmap}(hjhhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hconst struct inode *inodeh](j )}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj}ubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj}ubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.i_uid_into_vfsuidasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj}ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj}ubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj}ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h3map an inode's i_uid down according to an idmappingh]h5map an inode’s i_uid down according to an idmapping}(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&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1hhhhhhNhNubj)}(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}(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.hhMhj: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}(hjahhhNhNubah}(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}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubj)}(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&]uh1jhjhMhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(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.hhMhj:ubh)}(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 }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC. If the inode’s i_uid has no mapping INVALID_VFSUID is returned.}(hjhhhNhNubeh}(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](hi_uid_needs_update (C function)c.i_uid_needs_updatehNtauh1hhhhhhNhNubh)}(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}(hj,hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j*hj&hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj&hhhj;hMubj/)}(hi_uid_needs_updateh]j5)}(hi_uid_needs_updateh]hi_uid_needs_update}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj&hhhj;hMubj)}(hN(struct mnt_idmap *idmap, const struct iattr *attr, const struct inode *inode)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj)}(h h]h }(hjwhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjPsbc.i_uid_needs_updateasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjfubj5)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjbubj)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubvj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hiattrh]hiattr}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.i_uid_needs_updateasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjAhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hattrh]hattr}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjbubj)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjcubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjcubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.i_uid_needs_updateasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjcubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjcubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjcubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjbubeh}(h]h ]h"]h$]h&]jLjMuh1jhj&hhhj;hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj"hhhj;hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj;hMhjhhubjc)}(hhh]h)}(h/check whether inode's i_uid needs to be updatedh]h1check whether inode’s i_uid 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&]uh1jbhjhhhj;hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhhhNhNubj)}(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}(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.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)}(hjDh]hstruct mnt_idmap *idmap}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(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&]uh1hhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj;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}(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.hhMhjwubj)}(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&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhj;ubj)}(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&]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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubh)}(h **Return**h]j)}(hj&h]hReturn}(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.hhMhjubh)}(hBtrue if **inode**'s i_uid field needs to be updated, false if not.h](htrue if }(hj<hhhNhNubj)}(h **inode**h]hinode}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh3’s i_uid field needs to be updated, false if not.}(hj<hhhNhNubeh}(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](hi_uid_update (C function)c.i_uid_updatehNtauh1hhhhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyhhhjhMubj/)}(h i_uid_updateh]j5)}(h i_uid_updateh]h i_uid_update}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjyhhhjhMubj)}(hH(struct mnt_idmap *idmap, const struct iattr *attr, struct inode *inode)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.i_uid_updateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(ubj )}(hjzh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj)}(h h]h }(hjThhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(ubh)}(hhh]j5)}(hiattrh]hiattr}(hjehhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]jc.i_uid_updateasbuh1hhj(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj(ubj5)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.i_uid_updateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjyhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjuhhhjhMubah}(h]jpah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjrhhubjc)}(hhh]h)}(hupdate **inode**'s i_uid fieldh](hupdate }(hj8hhhNhNubj)}(h **inode**h]hinode}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh’s i_uid field}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jbhjrhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1hhhhhhNhNubj)}(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)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjfubj)}(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}(hjhhhNhNubah}(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)}(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.hhMhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjfubh)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(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.hhMhjfubh)}(hlSafely update **inode**'s i_uid field translating the vfsuid of any idmapped mount into the filesystem kuid.h](hSafely update }(hj\hhhNhNubj)}(h **inode**h]hinode}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubhW’s i_uid field translating the vfsuid of any idmapped mount into the filesystem kuid.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hi_gid_into_vfsgid (C function)c.i_gid_into_vfsgidhNtauh1hhhhhhNhNubh)}(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]j5)}(hvfsgid_th]hvfsgid_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(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.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM ubj/)}(hi_gid_into_vfsgidh]j5)}(hjh]hi_gid_into_vfsgid}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM ubj)}(h4(struct mnt_idmap *idmap, const struct inode *inode)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.i_gid_into_vfsgidasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj9hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hidmaph]hidmap}(hjFhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[ubj )}(hjzh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[ubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.i_gid_into_vfsgidasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj[ubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM hjhhubjc)}(hhh]h)}(h3map an inode's i_gid down according to an idmappingh]h5map an inode’s i_gid down according to an idmapping}(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&]uh1jbhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhhhNhNubj)}(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)}(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)}(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.hhMhj6ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubj)}(h+``const struct inode *inode`` inode to map h](j)}(h``const struct inode *inode``h]j)}(hjuh]hconst struct inode *inode}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjoubj)}(hhh]h)}(h inode to maph]h inode to map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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.hhMhjubh)}(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}(hjhhhNhNubah}(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.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hi_gid_needs_update (C function)c.i_gid_needs_updatehNtauh1hhhhhhNhNubh)}(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](j+)}(hj.h]hbool}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hi_gid_needs_updateh]j5)}(hi_gid_needs_updateh]hi_gid_needs_update}(hj'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hN(struct mnt_idmap *idmap, const struct iattr *attr, const struct inode *inode)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j)}jj)sbc.i_gid_needs_updateasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj?ubj5)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj;ubj)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hiattrh]hiattr}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j}c.i_gid_needs_updateasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hattrh]hattr}(hj'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj;ubj)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<ubj )}(hjzh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<ubh)}(hhh]j5)}(hinodeh]hinode}(hjyhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j}c.i_gid_needs_updateasbuh1hhj<ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj<ubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj<ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj;ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhhhNhNubj)}(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)}(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}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubj)}(h=``const struct iattr *attr`` the new attributes of **inode** h](j)}(h``const struct iattr *attr``h]j)}(hjVh]hconst struct iattr *attr}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjPubj)}(hhh]h)}(hthe new attributes of **inode**h](hthe new attributes of }(hjohhhNhNubj)}(h **inode**h]hinode}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjubj)}(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&]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:14: ./include/linux/fs.hhMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjubh)}(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.hhMhjubh)}(hBtrue if **inode**'s i_gid field needs to be updated, false if not.h](htrue if }(hjhhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh3’s i_gid field needs to be updated, false if not.}(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](hi_gid_update (C function)c.i_gid_updatehNtauh1hhhhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM,ubj)}(h h]h }(hjehhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjRhhhjdhM,ubj/)}(h i_gid_updateh]j5)}(h i_gid_updateh]h i_gid_update}(hjwhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjsubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjRhhhjdhM,ubj)}(hH(struct mnt_idmap *idmap, const struct iattr *attr, struct inode *inode)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjysbc.i_gid_updateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hconst struct iattr *attrh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hiattrh]hiattr}(hj>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]jc.i_gid_updateasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hattrh]hattr}(hjwhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.i_gid_updateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjRhhhjdhM,ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjNhhhjdhM,ubah}(h]jIah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjdhM,hjKhhubjc)}(hhh]h)}(hupdate **inode**'s i_gid fieldh](hupdate }(hj hhhNhNubj)}(h **inode**h]hinode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh’s i_gid field}(hj hhhNhNubeh}(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&]uh1jbhjKhhhjdhM,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj; jj; jjjuh1hhhhhhNhNubj)}(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)}(hjE h]h Parameters}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC 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)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjd h]hstruct mnt_idmap *idmap}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb 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+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&]uh1hhjy hM%hjz ubah}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jhjy hM%hj[ 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.hhM&hj 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 hM&hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM&hj[ 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.hhM'hj ubj)}(hhh]h)}(hthe inode to updateh]hthe inode to update}(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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM)hj? ubh)}(hlSafely update **inode**'s i_gid field translating the vfsgid of any idmapped mount into the filesystem kgid.h](hSafely update }(hj5!hhhNhNubj)}(h **inode**h]hinode}(hj=!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5!ubhW’s i_gid field translating the vfsgid of any idmapped mount into the filesystem kgid.}(hj5!hhhNhNubeh}(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](hinode_fsuid_set (C function)c.inode_fsuid_sethNtauh1hhhhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjv!hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjr!hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM=ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjr!hhhj!hM=ubj/)}(hinode_fsuid_seth]j5)}(hinode_fsuid_seth]hinode_fsuid_set}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjr!hhhj!hM=ubj)}(h.(struct inode *inode, struct mnt_idmap *idmap)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!ubh)}(hhh]j5)}(hinodeh]hinode}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j)}jj!sbc.inode_fsuid_setasbuh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!ubjX)}(hj[h]h*}(hj!hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj!ubj5)}(hinodeh]hinode}(hj "hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj!ubj)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hj%"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!"ubj)}(h h]h }(hj2"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!"ubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjC"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE"modnameN classnameNjj)}j]j!c.inode_fsuid_setasbuh1hhj!"ubj)}(h h]h }(hja"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!"ubjX)}(hj[h]h*}(hjo"hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj!"ubj5)}(hidmaph]hidmap}(hj|"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!"ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj!ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjr!hhhj!hM=ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjn!hhhj!hM=ubah}(h]ji!ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj!hM=hjk!hhubjc)}(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.hhM6hj"hhubah}(h]h ]h"]h$]h&]uh1jbhjk!hhhj!hM=ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1hhhhhhNhNubj)}(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.hhM:hj"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.hhM7hj"ubj)}(hhh]h)}(hinode to initializeh]hinode to initialize}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM7hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM7hj"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.hhM8hj#ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hj9#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5#hM8hj6#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj5#hM8hj"ubeh}(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)}(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 }(hjq#hhhNhNubj)}(h **inode**h]hinode}(hjy#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq#ubh]. If the inode was found/created via an idmapped mount map the caller’s fsuid according to }(hjq#hhhNhNubj)}(h **idmap**h]hidmap}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq#ubh.}(hjq#hhhNhNubeh}(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](hinode_fsgid_set (C function)c.inode_fsgid_sethNtauh1hhhhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj#hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMKubj)}(h h]h }(hj#hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#hhhj#hMKubj/)}(hinode_fsgid_seth]j5)}(hinode_fsgid_seth]hinode_fsgid_set}(hj#hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj#hhhj#hMKubj)}(h.(struct inode *inode, struct mnt_idmap *idmap)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#ubh)}(hhh]j5)}(hinodeh]hinode}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!$modnameN classnameNjj)}j]j)}jj#sbc.inode_fsgid_setasbuh1hhj#ubj)}(h h]h }(hj?$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#ubjX)}(hj[h]h*}(hjM$hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj#ubj5)}(hinodeh]hinode}(hjZ$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj#ubj)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjs$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjo$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjo$ubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j;$c.inode_fsgid_setasbuh1hhjo$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjo$ubjX)}(hj[h]h*}(hj$hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjo$ubj5)}(hidmaph]hidmap}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjo$ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj#ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj#hhhj#hMKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj#hhhj#hMKubah}(h]j#ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj#hMKhj#hhubjc)}(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.hhMDhj$hhubah}(h]h ]h"]h$]h&]uh1jbhj#hhhj#hMKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj %jj %jjjuh1hhhhhhNhNubj)}(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)}(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.hhMHhj%ubj)}(hhh](j)}(h,``struct inode *inode`` inode to initialize h](j)}(h``struct inode *inode``h]j)}(hj5%h]hstruct inode *inode}(hj7%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3%ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMEhj/%ubj)}(hhh]h)}(hinode to initializeh]hinode to initialize}(hjN%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ%hMEhjK%ubah}(h]h ]h"]h$]h&]uh1jhj/%ubeh}(h]h ]h"]h$]h&]uh1jhjJ%hMEhj,%ubj)}(hH``struct mnt_idmap *idmap`` idmap of the mount the inode was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjn%h]hstruct mnt_idmap *idmap}(hjp%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl%ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMFhjh%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%hMFhj%ubah}(h]h ]h"]h$]h&]uh1jhjh%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMFhj,%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.hhMHhj%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.hhMHhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!fsuidgid_has_mapping (C function)c.fsuidgid_has_mappinghNtauh1hhhhhhNhNubh)}(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](j+)}(hj.h]hbool}(hj&hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM\ubj)}(h h]h }(hj &hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj&hhhj&hM\ubj/)}(hfsuidgid_has_mappingh]j5)}(hfsuidgid_has_mappingh]hfsuidgid_has_mapping}(hj2&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.&ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj&hhhj&hM\ubj)}(h1(struct super_block *sb, struct mnt_idmap *idmap)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjN&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJ&ubj)}(h h]h }(hj[&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJ&ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjl&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hji&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjn&modnameN classnameNjj)}j]j)}jj4&sbc.fsuidgid_has_mappingasbuh1hhjJ&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJ&ubjX)}(hj[h]h*}(hj&hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJ&ubj5)}(hsbh]hsb}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJ&ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjF&ubj)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj&ubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j&c.fsuidgid_has_mappingasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj&ubjX)}(hj[h]h*}(hj 'hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj&ubj5)}(hidmaph]hidmap}(hj'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjF&ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj&hhhj&hM\ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj &hhhj&hM\ubah}(h]j&ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj&hM\hj&hhubjc)}(hhh]h)}(h,check whether caller's fsuid/fsgid is mappedh]h.check whether caller’s fsuid/fsgid is mapped}(hjA'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMRhj>'hhubah}(h]h ]h"]h$]h&]uh1jbhj&hhhj&hM\ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjY'jjY'jjjuh1hhhhhhNhNubj)}(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)}(hjc'h]h Parameters}(hje'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja'ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMVhj]'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.hhMShj|'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'hMShj'ubah}(h]h ]h"]h$]h&]uh1jhj|'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMShjy'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.hhMThj'ubj)}(hhh]h)}(hidmap of the relevant mounth]hidmap of the relevant mount}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMThj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMThjy'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.hhMVhj]'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 }(hj (hhhNhNubj)}(h**sb**h]hsb}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubh\. If the caller is on an idmapped mount map the caller’s fsuid and fsgid according to the }(hj (hhhNhNubj)}(h **idmap**h]hidmap}(hj&(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubh first.}(hj (hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMVhj]'ubh)}(h **Return**h]j)}(hjA(h]hReturn}(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.hhMZhj]'ubh)}(h0true if fsuid and fsgid is mapped, false if not.h]h0true if fsuid and fsgid is mapped, false if not.}(hjW(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMZhj]'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinode_set_ctime (C function)c.inode_set_ctimehNtauh1hhhhhhNhNubh)}(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 )}(hjzh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(hhhj(hMubh)}(hhh]j5)}(h timespec64h]h timespec64}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j)}jinode_set_ctimesbc.inode_set_ctimeasbuh1hhj(hhhj(hMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(hhhj(hMubj/)}(hinode_set_ctimeh]j5)}(hj(h]hinode_set_ctime}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj(hhhj(hMubj)}(h.(struct inode *inode, time64_t sec, long nsec)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(ubh)}(hhh]j5)}(hinodeh]hinode}(hj)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j(c.inode_set_ctimeasbuh1hhj(ubj)}(h h]h }(hj/)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(ubjX)}(hj[h]h*}(hj=)hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj(ubj5)}(hinodeh]hinode}(hjJ)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubj)}(h time64_t sech](h)}(hhh]j5)}(htime64_th]htime64_t}(hjf)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjc)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjh)modnameN classnameNjj)}j]j(c.inode_set_ctimeasbuh1hhj_)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj_)ubj5)}(hsech]hsec}(hj)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_)ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubj)}(h long nsech](j+)}(hlongh]hlong}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubj5)}(hnsech]hnsec}(hj)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj~(hhhj(hMubah}(h]jy(ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj(hMhj{(hhubjc)}(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&]uh1jbhj{(hhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj *jj *jjjuh1hhhhhhNhNubj)}(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** }6h](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)}(h8``struct inode *inode`` inode in which to set the ctime h](j)}(h``struct inode *inode``h]j)}(hj2*h]hstruct inode *inode}(hj4*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0*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 in which to set the ctimeh]hinode in which to set the ctime}(hjK*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG*hMhjH*ubah}(h]h ]h"]h$]h&]uh1jhj,*ubeh}(h]h ]h"]h$]h&]uh1jhjG*hMhj)*ubj)}(h%``time64_t sec`` tv_sec value to set h](j)}(h``time64_t sec``h]j)}(hjk*h]h time64_t sec}(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)}(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&]uh1jhje*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj)*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*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)}(h3Set the ctime in **inode** to { **sec**, **nsec** }h](hSet the ctime in }(hj*hhhNhNubj)}(h **inode**h]hinode}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh to { }(hj*hhhNhNubj)}(h**sec**h]hsec}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh, }(hj*hhhNhNubj)}(h**nsec**h]hnsec}(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](h__sb_write_started (C function)c.__sb_write_startedhNtauh1hhhhhhNhNubh)}(hhh](j)}(h@int __sb_write_started (const struct super_block *sb, int level)h]j)}(h?int __sb_write_started(const struct super_block *sb, int level)h](j+)}(hinth]hint}(hjZ+hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjV+hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj)}(h h]h }(hji+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjV+hhhjh+hM ubj/)}(h__sb_write_startedh]j5)}(h__sb_write_startedh]h__sb_write_started}(hj{+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjw+ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjV+hhhjh+hM ubj)}(h)(const struct super_block *sb, int level)h](j)}(hconst struct super_block *sbh](j )}(hjh]hconst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+ubj )}(hjzh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j)}jj}+sbc.__sb_write_startedasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+ubjX)}(hj[h]h*}(hj+hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj+ubj5)}(hsbh]hsb}(hj ,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj+ubj)}(h int levelh](j+)}(hinth]hint}(hj$,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ,ubj)}(h h]h }(hj2,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ,ubj5)}(hlevelh]hlevel}(hj@,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ,ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj+ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjV+hhhjh+hM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjR+hhhjh+hM ubah}(h]jM+ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjh+hM hjO+hhubjc)}(hhh]h)}(h check if sb freeze level is heldh]h check if sb freeze level is held}(hjj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjg,hhubah}(h]h ]h"]h$]h&]uh1jbhjO+hhhjh+hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1hhhhhhNhNubj)}(h**Parameters** ``const struct super_block *sb`` the super we write to ``int level`` the freeze level **Description** * > 0 - sb freeze level is held * 0 - sb freeze level is not held * < 0 - !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWNh](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)}(h7``const struct super_block *sb`` the super we write to h](j)}(h ``const struct super_block *sb``h]j)}(hj,h]hconst struct 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.hhMhj,ubj)}(hhh]h)}(hthe super we write toh]hthe super 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,ubj)}(h``int level`` the freeze level h](j)}(h ``int level``h]j)}(hj,h]h int level}(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 freeze levelh]hthe freeze level}(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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj,ubh bullet_list)}(hhh](h list_item)}(h> 0 - sb freeze level is heldh]h)}(hj>-h]h> 0 - sb freeze level is held}(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&]uh1j:-hj7-ubj;-)}(h0 - sb freeze level is not heldh]h)}(hjV-h]h0 - sb freeze level is not held}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjT-ubah}(h]h ]h"]h$]h&]uh1j:-hj7-ubj;-)}(h(< 0 - !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWNh]h)}(hjn-h]h(< 0 - !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN}(hjp-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjl-ubah}(h]h ]h"]h$]h&]uh1j:-hj7-ubeh}(h]h ]h"]h$]h&]bulletj[uh1j5-hjM-hM hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsb_write_started (C function)c.sb_write_startedhNtauh1hhhhhhNhNubh)}(hhh](j)}(h4bool sb_write_started (const struct super_block *sb)h]j)}(h3bool sb_write_started(const struct super_block *sb)h](j+)}(hj.h]hbool}(hj-hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-hhhj-hMubj/)}(hsb_write_startedh]j5)}(hsb_write_startedh]hsb_write_started}(hj-hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj-hhhj-hMubj)}(h(const struct super_block *sb)h]j)}(hconst struct super_block *sbh](j )}(hjh]hconst}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-ubj )}(hjzh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj .hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj".modnameN classnameNjj)}j]j)}jj-sbc.sb_write_startedasbuh1hhj-ubj)}(h h]h }(hj@.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-ubjX)}(hj[h]h*}(hjN.hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj-ubj5)}(hsbh]hsb}(hj[.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj-ubah}(h]h ]h"]h$]h&]jLjMuh1jhj-hhhj-hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj-hhhj-hMubah}(h]j-ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj-hMhj-hhubjc)}(hhh]h)}(h check if SB_FREEZE_WRITE is heldh]h check if SB_FREEZE_WRITE is 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&]uh1jbhj-hhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1hhhhhhNhNubj)}(h**Parameters** ``const struct super_block *sb`` the super we write to **Description** May be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN.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)}(h7``const struct super_block *sb`` the super we write to h](j)}(h ``const struct super_block *sb``h]j)}(hj.h]hconst struct 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.hhMhj.ubj)}(hhh]h)}(hthe super we write toh]hthe super 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)}(h>May be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN.h]h>May be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN.}(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](h!sb_write_not_started (C function)c.sb_write_not_startedhNtauh1hhhhhhNhNubh)}(hhh](j)}(h8bool sb_write_not_started (const struct super_block *sb)h]j)}(h7bool sb_write_not_started(const struct super_block *sb)h](j+)}(hj.h]hbool}(hjF/hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjB/hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM#ubj)}(h h]h }(hjT/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjB/hhhjS/hM#ubj/)}(hsb_write_not_startedh]j5)}(hsb_write_not_startedh]hsb_write_not_started}(hjf/hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjb/ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjB/hhhjS/hM#ubj)}(h(const struct super_block *sb)h]j)}(hconst struct super_block *sbh](j )}(hjh]hconst}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj~/ubj )}(hjzh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj~/ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj/hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j)}jjh/sbc.sb_write_not_startedasbuh1hhj~/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj~/ubjX)}(hj[h]h*}(hj/hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj~/ubj5)}(hsbh]hsb}(hj/hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj~/ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjz/ubah}(h]h ]h"]h$]h&]jLjMuh1jhjB/hhhjS/hM#ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj>/hhhjS/hM#ubah}(h]j9/ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjS/hM#hj;/hhubjc)}(hhh]h)}(h$check if SB_FREEZE_WRITE is not heldh]h$check if SB_FREEZE_WRITE is not held}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1jbhj;/hhhjS/hM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj80jj80jjjuh1hhhhhhNhNubj)}(h**Parameters** ``const struct super_block *sb`` the super we write to **Description** May be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN.h](h)}(h**Parameters**h]j)}(hjB0h]h Parameters}(hjD0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@0ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM"hj<0ubj)}(hhh]j)}(h7``const struct super_block *sb`` the super we write to h](j)}(h ``const struct super_block *sb``h]j)}(hja0h]hconst struct super_block *sb}(hjc0hhhNhNubah}(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.hhMhj[0ubj)}(hhh]h)}(hthe super we write toh]hthe super we write to}(hjz0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv0hMhjw0ubah}(h]h ]h"]h$]h&]uh1jhj[0ubeh}(h]h ]h"]h$]h&]uh1jhjv0hMhjX0ubah}(h]h ]h"]h$]h&]uh1jhj<0ubh)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM!hj<0ubh)}(h>May be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN.h]h>May be false positive with !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM!hj<0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfile_write_started (C function)c.file_write_startedhNtauh1hhhhhhNhNubh)}(hhh](j)}(h1bool file_write_started (const struct file *file)h]j)}(h0bool file_write_started(const struct file *file)h](j+)}(hj.h]hbool}(hj0hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj0hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0hhhj0hM0ubj/)}(hfile_write_startedh]j5)}(hfile_write_startedh]hfile_write_started}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj0hhhj0hM0ubj)}(h(const struct file *file)h]j)}(hconst struct file *fileh](j )}(hjh]hconst}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj)}(h h]h }(hj*1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj1ubj )}(hjzh]hstruct}(hj81hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj)}(h h]h }(hjE1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj1ubh)}(hhh]j5)}(hfileh]hfile}(hjV1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjS1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjX1modnameN classnameNjj)}j]j)}jj1sbc.file_write_startedasbuh1hhj1ubj)}(h h]h }(hjv1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj1ubjX)}(hj[h]h*}(hj1hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj1ubj5)}(hfileh]hfile}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj1ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj1ubah}(h]h ]h"]h$]h&]jLjMuh1jhj0hhhj0hM0ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj0hhhj0hM0ubah}(h]j0ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj0hM0hj0hhubjc)}(hhh]h)}(h check if SB_FREEZE_WRITE is heldh]h check if SB_FREEZE_WRITE is held}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM)hj1hhubah}(h]h ]h"]h$]h&]uh1jbhj0hhhj0hM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1hhhhhhNhNubj)}(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)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM-hj1ubj)}(hhh]j)}(h1``const struct file *file`` the file we write to h](j)}(h``const struct file *file``h]j)}(hj1h]hconst struct file *file}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM*hj1ubj)}(hhh]h)}(hthe file we write toh]hthe file we write to}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM*hj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hM*hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h**Description**h]j)}(hj72h]h Description}(hj92hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj52ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM,hj1ubh)}(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.}(hjM2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM,hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#file_write_not_started (C function)c.file_write_not_startedhNtauh1hhhhhhNhNubh)}(hhh](j)}(h5bool file_write_not_started (const struct file *file)h]j)}(h4bool file_write_not_started(const struct file *file)h](j+)}(hj.h]hbool}(hj|2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjx2hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM?ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjx2hhhj2hM?ubj/)}(hfile_write_not_startedh]j5)}(hfile_write_not_startedh]hfile_write_not_started}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjx2hhhj2hM?ubj)}(h(const struct file *file)h]j)}(hconst struct file *fileh](j )}(hjh]hconst}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2ubj )}(hjzh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2ubh)}(hhh]j5)}(hfileh]hfile}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j)}jj2sbc.file_write_not_startedasbuh1hhj2ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2ubjX)}(hj[h]h*}(hj3hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj2ubj5)}(hfileh]hfile}(hj,3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj2ubah}(h]h ]h"]h$]h&]jLjMuh1jhjx2hhhj2hM?ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjt2hhhj2hM?ubah}(h]jo2ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj2hM?hjq2hhubjc)}(hhh]h)}(h$check if SB_FREEZE_WRITE is not heldh]h$check if SB_FREEZE_WRITE is not held}(hjV3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM8hjS3hhubah}(h]h ]h"]h$]h&]uh1jbhjq2hhhj2hM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjn3jjn3jjjuh1hhhhhhNhNubj)}(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)}(hjx3h]h Parameters}(hjz3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv3ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM<hjr3ubj)}(hhh]j)}(h1``const struct file *file`` the file we write to h](j)}(h``const struct file *file``h]j)}(hj3h]hconst struct file *file}(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.hhM9hj3ubj)}(hhh]h)}(hthe file we write toh]hthe file we write to}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM9hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM9hj3ubah}(h]h ]h"]h$]h&]uh1jhjr3ubh)}(h**Description**h]j)}(hj3h]h Description}(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;hjr3ubh)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM;hjr3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsb_end_write (C function)c.sb_end_writehNtauh1hhhhhhNhNubh)}(hhh](j)}(h*void sb_end_write (struct super_block *sb)h]j)}(h)void sb_end_write(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj4hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMMubj)}(h h]h }(hj&4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4hhhj%4hMMubj/)}(h sb_end_writeh]j5)}(h sb_end_writeh]h sb_end_write}(hj84hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj44ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj4hhhj%4hMMubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjT4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjP4ubj)}(h h]h }(hja4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjP4ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjr4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjo4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjt4modnameN classnameNjj)}j]j)}jj:4sbc.sb_end_writeasbuh1hhjP4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjP4ubjX)}(hj[h]h*}(hj4hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjP4ubj5)}(hsbh]hsb}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjP4ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjL4ubah}(h]h ]h"]h$]h&]jLjMuh1jhj4hhhj%4hMMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj4hhhj%4hMMubah}(h]j 4ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj%4hMMhj 4hhubjc)}(hhh]h)}(h!drop write access to a superblockh]h!drop write access to a superblock}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMGhj4hhubah}(h]h ]h"]h$]h&]uh1jbhj 4hhhj%4hMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1hhhhhhNhNubj)}(h**Parameters** ``struct super_block *sb`` the super we wrote to **Description** Decrement number of writers to the filesystem. Wake up possible waiters wanting to freeze the filesystem.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMKhj4ubj)}(hhh]j)}(h1``struct super_block *sb`` the super we wrote to h](j)}(h``struct super_block *sb``h]j)}(hj5h]hstruct super_block *sb}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMHhj5ubj)}(hhh]h)}(hthe super we wrote toh]hthe super we wrote to}(hj15hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-5hMHhj.5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj-5hMHhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hjS5h]h Description}(hjU5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMJhj4ubh)}(hiDecrement number of writers to the filesystem. Wake up possible waiters wanting to freeze the filesystem.h]hiDecrement number of writers to the filesystem. Wake up possible waiters wanting to freeze the filesystem.}(hji5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMJhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsb_end_pagefault (C function)c.sb_end_pagefaulthNtauh1hhhhhhNhNubh)}(hhh](j)}(h.void sb_end_pagefault (struct super_block *sb)h]j)}(h-void sb_end_pagefault(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj5hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMYubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5hhhj5hMYubj/)}(hsb_end_pagefaulth]j5)}(hsb_end_pagefaulth]hsb_end_pagefault}(hj5hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj5hhhj5hMYubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj5hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j)}jj5sbc.sb_end_pagefaultasbuh1hhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5ubjX)}(hj[h]h*}(hj!6hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj5ubj5)}(hsbh]hsb}(hj.6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubah}(h]h ]h"]h$]h&]jLjMuh1jhj5hhhj5hMYubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj5hhhj5hMYubah}(h]j5ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj5hMYhj5hhubjc)}(hhh]h)}(h3drop write access to a superblock from a page faulth]h3drop write access to a superblock from a page fault}(hjX6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMShjU6hhubah}(h]h ]h"]h$]h&]uh1jbhj5hhhj5hMYubeh}(h]h ](jfunctioneh"]h$]h&]jjjjp6jjp6jjjuh1hhhhhhNhNubj)}(h**Parameters** ``struct super_block *sb`` the super we wrote to **Description** Decrement number of processes handling write page fault to the filesystem. Wake up possible waiters wanting to freeze the filesystem.h](h)}(h**Parameters**h]j)}(hjz6h]h Parameters}(hj|6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx6ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMWhjt6ubj)}(hhh]j)}(h1``struct super_block *sb`` the super we wrote to h](j)}(h``struct super_block *sb``h]j)}(hj6h]hstruct super_block *sb}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMThj6ubj)}(hhh]h)}(hthe super we wrote toh]hthe super we wrote to}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMThj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMThj6ubah}(h]h ]h"]h$]h&]uh1jhjt6ubh)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMVhjt6ubh)}(hDecrement number of processes handling write page fault to the filesystem. Wake up possible waiters wanting to freeze the filesystem.h]hDecrement number of processes handling write page fault to the filesystem. Wake up possible waiters wanting to freeze the filesystem.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMVhjt6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsb_end_intwrite (C function)c.sb_end_intwritehNtauh1hhhhhhNhNubh)}(hhh](j)}(h-void sb_end_intwrite (struct super_block *sb)h]j)}(h,void sb_end_intwrite(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj7hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMeubj)}(h h]h }(hj(7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj7hhhj'7hMeubj/)}(hsb_end_intwriteh]j5)}(hsb_end_intwriteh]hsb_end_intwrite}(hj:7hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj67ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj7hhhj'7hMeubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjV7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjR7ubj)}(h h]h }(hjc7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjR7ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjt7hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjq7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjv7modnameN classnameNjj)}j]j)}jj<7sbc.sb_end_intwriteasbuh1hhjR7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjR7ubjX)}(hj[h]h*}(hj7hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjR7ubj5)}(hsbh]hsb}(hj7hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjR7ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjN7ubah}(h]h ]h"]h$]h&]jLjMuh1jhj7hhhj'7hMeubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj7hhhj'7hMeubah}(h]j 7ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj'7hMehj7hhubjc)}(hhh]h)}(h:drop write access to a superblock for internal fs purposesh]h:drop write access to a superblock for internal fs purposes}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM_hj7hhubah}(h]h ]h"]h$]h&]uh1jbhj7hhhj'7hMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1hhhhhhNhNubj)}(h**Parameters** ``struct super_block *sb`` the super we wrote to **Description** Decrement fs-internal number of writers to the filesystem. Wake up possible waiters wanting to freeze the filesystem.h](h)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(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.hhMchj7ubj)}(hhh]j)}(h1``struct super_block *sb`` the super we wrote to h](j)}(h``struct super_block *sb``h]j)}(hj8h]hstruct super_block *sb}(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 super we wrote toh]hthe super we wrote to}(hj38hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/8hM`hj08ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj/8hM`hj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hjU8h]h Description}(hjW8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS8ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMbhj7ubh)}(hvDecrement fs-internal number of writers to the filesystem. Wake up possible waiters wanting to freeze the filesystem.h]hvDecrement fs-internal number of writers to the filesystem. Wake up possible waiters wanting to freeze the filesystem.}(hjk8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMbhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsb_start_write (C function)c.sb_start_writehNtauh1hhhhhhNhNubh)}(hhh](j)}(h,void sb_start_write (struct super_block *sb)h]j)}(h+void sb_start_write(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj8hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM}ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8hhhj8hM}ubj/)}(hsb_start_writeh]j5)}(hsb_start_writeh]hsb_start_write}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj8hhhj8hM}ubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)}jj8sbc.sb_start_writeasbuh1hhj8ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8ubjX)}(hj[h]h*}(hj#9hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj8ubj5)}(hsbh]hsb}(hj09hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj8ubah}(h]h ]h"]h$]h&]jLjMuh1jhj8hhhj8hM}ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj8hhhj8hM}ubah}(h]j8ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj8hM}hj8hhubjc)}(hhh]h)}(h get write access to a superblockh]h get write access to a superblock}(hjZ9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMkhjW9hhubah}(h]h ]h"]h$]h&]uh1jbhj8hhhj8hM}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjr9jjr9jjjuh1hhhhhhNhNubj)}(hX(**Parameters** ``struct super_block *sb`` the super we write to **Description** When a process wants to write data or metadata to a file system (i.e. dirty a page or an inode), it should embed the operation in a sb_start_write() - sb_end_write() pair to get exclusion against file system freezing. This function increments number of writers preventing freezing. If the file system is already frozen, the function waits until the file system is thawed. Since freeze protection behaves as a lock, users have to preserve ordering of freeze protection and other filesystem locks. Generally, freeze protection should be the outermost lock. In particular, we have: sb_start_write -> i_mutex (write path, truncate, directory ops, ...) -> s_umount (freeze_super, thaw_super)h](h)}(h**Parameters**h]j)}(hj|9h]h Parameters}(hj~9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz9ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMohjv9ubj)}(hhh]j)}(h1``struct super_block *sb`` the super we write to h](j)}(h``struct super_block *sb``h]j)}(hj9h]hstruct super_block *sb}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMlhj9ubj)}(hhh]h)}(hthe super we write toh]hthe super we write to}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMlhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMlhj9ubah}(h]h ]h"]h$]h&]uh1jhjv9ubh)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMnhjv9ubh)}(hXsWhen a process wants to write data or metadata to a file system (i.e. dirty a page or an inode), it should embed the operation in a sb_start_write() - sb_end_write() pair to get exclusion against file system freezing. This function increments number of writers preventing freezing. If the file system is already frozen, the function waits until the file system is thawed.h]hXsWhen a process wants to write data or metadata to a file system (i.e. dirty a page or an inode), it should embed the operation in a sb_start_write() - sb_end_write() pair to get exclusion against file system freezing. This function increments number of writers preventing freezing. If the file system is already frozen, the function waits until the file system is thawed.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMnhjv9ubh)}(hSince freeze protection behaves as a lock, users have to preserve ordering of freeze protection and other filesystem locks. Generally, freeze protection should be the outermost lock. In particular, we have:h]hSince freeze protection behaves as a lock, users have to preserve ordering of freeze protection and other filesystem locks. Generally, freeze protection should be the outermost lock. In particular, we have:}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMuhjv9ubj)}(hhh]j)}(hsb_start_write -> i_mutex (write path, truncate, directory ops, ...) -> s_umount (freeze_super, thaw_super)h](j)}(hsb_start_writeh]hsb_start_write}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMzhj :ubj)}(hhh]h)}(h{-> i_mutex (write path, truncate, directory ops, ...) -> s_umount (freeze_super, thaw_super)h]h{-> i_mutex (write path, truncate, directory ops, ...) -> s_umount (freeze_super, thaw_super)}(hj#:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMzhj :ubah}(h]h ]h"]h$]h&]uh1jhj :ubeh}(h]h ]h"]h$]h&]uh1jhj:hMzhj :ubah}(h]h ]h"]h$]h&]uh1jhjv9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsb_start_pagefault (C function)c.sb_start_pagefaulthNtauh1hhhhhhNhNubh)}(hhh](j)}(h0void sb_start_pagefault (struct super_block *sb)h]j)}(h/void sb_start_pagefault(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hjc:hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_:hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hjr:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj_:hhhjq:hMubj/)}(hsb_start_pagefaulth]j5)}(hsb_start_pagefaulth]hsb_start_pagefault}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj_:hhhjq:hMubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j)}jj:sbc.sb_start_pagefaultasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubjX)}(hj[h]h*}(hj:hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj:ubj5)}(hsbh]hsb}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj:ubah}(h]h ]h"]h$]h&]jLjMuh1jhj_:hhhjq:hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj[:hhhjq:hMubah}(h]jV:ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjq:hMhjX:hhubjc)}(hhh]h)}(h2get write access to a superblock from a page faulth]h2get write access to a superblock from a page fault}(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&]uh1jbhjX:hhhjq:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;;jj;;jjjuh1hhhhhhNhNubj)}(hX**Parameters** ``struct super_block *sb`` the super we write to **Description** When a process starts handling write page fault, it should embed the operation into sb_start_pagefault() - sb_end_pagefault() pair to get exclusion against file system freezing. This is needed since the page fault is going to dirty a page. This function increments number of running page faults preventing freezing. If the file system is already frozen, the function waits until the file system is thawed. Since page fault freeze protection behaves as a lock, users have to preserve ordering of freeze protection and other filesystem locks. It is advised to put sb_start_pagefault() close to mmap_lock in lock ordering. Page fault handling code implies lock dependency: mmap_lock -> sb_start_pagefaulth](h)}(h**Parameters**h]j)}(hjE;h]h Parameters}(hjG;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC;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``struct super_block *sb`` the super we write to h](j)}(h``struct super_block *sb``h]j)}(hjd;h]hstruct super_block *sb}(hjf;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb;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 super we write toh]hthe super we write to}(hj};hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy;hMhjz;ubah}(h]h ]h"]h$]h&]uh1jhj^;ubeh}(h]h ]h"]h$]h&]uh1jhjy;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)}(hXWhen a process starts handling write page fault, it should embed the operation into sb_start_pagefault() - sb_end_pagefault() pair to get exclusion against file system freezing. This is needed since the page fault is going to dirty a page. This function increments number of running page faults preventing freezing. If the file system is already frozen, the function waits until the file system is thawed.h]hXWhen a process starts handling write page fault, it should embed the operation into sb_start_pagefault() - sb_end_pagefault() pair to get exclusion against file system freezing. This is needed since the page fault is going to dirty a page. This function increments number of running page faults preventing freezing. If the file system is already frozen, the function waits until the file system is thawed.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj?;ubh)}(hXSince page fault freeze protection behaves as a lock, users have to preserve ordering of freeze protection and other filesystem locks. It is advised to put sb_start_pagefault() close to mmap_lock in lock ordering. Page fault handling code implies lock dependency:h]hXSince page fault freeze protection behaves as a lock, users have to preserve ordering of freeze protection and other filesystem locks. It is advised to put sb_start_pagefault() close to mmap_lock in lock ordering. Page fault handling code implies lock dependency:}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj?;ubj)}(hhh]j)}(hmmap_lock -> sb_start_pagefaulth](j)}(h mmap_lockh]h mmap_lock}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj;ubj)}(hhh]h)}(h-> sb_start_pagefaulth]h-> sb_start_pagefault}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj?;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsb_start_intwrite (C function)c.sb_start_intwritehNtauh1hhhhhhNhNubh)}(hhh](j)}(h/void sb_start_intwrite (struct super_block *sb)h]j)}(h.void sb_start_intwrite(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hj-<hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)<hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hj<<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)<hhhj;<hMubj/)}(hsb_start_intwriteh]j5)}(hsb_start_intwriteh]hsb_start_intwrite}(hjN<hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJ<ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj)<hhhj;<hMubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjf<ubj)}(h h]h }(hjw<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjf<ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj<hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j)}jjP<sbc.sb_start_intwriteasbuh1hhjf<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjf<ubjX)}(hj[h]h*}(hj<hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjf<ubj5)}(hsbh]hsb}(hj<hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjf<ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjb<ubah}(h]h ]h"]h$]h&]jLjMuh1jhj)<hhhj;<hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj%<hhhj;<hMubah}(h]j <ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj;<hMhj"<hhubjc)}(hhh]h)}(h9get write access to a superblock for internal fs purposesh]h9get write access to a superblock for internal fs purposes}(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&]uh1jbhj"<hhhj;<hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1hhhhhhNhNubj)}(hX**Parameters** ``struct super_block *sb`` the super we write to **Description** This is the third level of protection against filesystem freezing. It is free for use by a filesystem. The only requirement is that it must rank below sb_start_pagefault. For example filesystem can call sb_start_intwrite() when starting a transaction which somewhat eases handling of freezing for internal sources of filesystem changes (internal fs threads, discarding preallocation on file close, etc.).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``struct super_block *sb`` the super we write to h](j)}(h``struct super_block *sb``h]j)}(hj.=h]hstruct super_block *sb}(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)}(hthe super we write toh]hthe super we write to}(hjG=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC=hMhjD=ubah}(h]h ]h"]h$]h&]uh1jhj(=ubeh}(h]h ]h"]h$]h&]uh1jhjC=hMhj%=ubah}(h]h ]h"]h$]h&]uh1jhj =ubh)}(h**Description**h]j)}(hji=h]h Description}(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.hhMhj =ubh)}(hThis is the third level of protection against filesystem freezing. It is free for use by a filesystem. The only requirement is that it must rank below sb_start_pagefault.h]hThis is the third level of protection against filesystem freezing. It is free for use by a filesystem. The only requirement is that it must rank below sb_start_pagefault.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj =ubh)}(hFor example filesystem can call sb_start_intwrite() when starting a transaction which somewhat eases handling of freezing for internal sources of filesystem changes (internal fs threads, discarding preallocation on file close, etc.).h]hFor example filesystem can call sb_start_intwrite() when starting a transaction which somewhat eases handling of freezing for internal sources of filesystem changes (internal fs threads, discarding preallocation on file close, etc.).}(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](hrenamedata (C struct) c.renamedatahNtauh1hhhhhhNhNubh)}(hhh](j)}(h renamedatah]j)}(hstruct renamedatah](j )}(hjzh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj=hhhj=hMubj/)}(h renamedatah]j5)}(hj=h]h renamedata}(hj=hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj=hhhj=hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj=hhhj=hMubah}(h]j=ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj=hMhj=hhubjc)}(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&]uh1jbhj=hhhj=hMubeh}(h]h ](jstructeh"]h$]h&]jjjj>jj>jjjuh1hhhhhhNhNubj)}(hX**Definition**:: struct renamedata { struct mnt_idmap *old_mnt_idmap; struct inode *old_dir; struct dentry *old_dentry; struct mnt_idmap *new_mnt_idmap; struct inode *new_dir; struct dentry *new_dentry; struct inode **delegated_inode; unsigned int flags; }; **Members** ``old_mnt_idmap`` idmap of the old mount the inode was found from ``old_dir`` parent of source ``old_dentry`` source ``new_mnt_idmap`` idmap of the new mount the inode was found from ``new_dir`` 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}(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>ubj)}(hXstruct renamedata { struct mnt_idmap *old_mnt_idmap; struct inode *old_dir; struct dentry *old_dentry; struct mnt_idmap *new_mnt_idmap; struct inode *new_dir; struct dentry *new_dentry; struct inode **delegated_inode; unsigned int flags; };h]hXstruct renamedata { struct mnt_idmap *old_mnt_idmap; struct inode *old_dir; struct dentry *old_dentry; struct mnt_idmap *new_mnt_idmap; struct inode *new_dir; struct dentry *new_dentry; struct inode **delegated_inode; unsigned int flags; };}hj<>sbah}(h]h ]h"]h$]h&]jLjMuh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj>ubh)}(h **Members**h]j)}(hjM>h]hMembers}(hjO>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj>ubj)}(hhh](j)}(hB``old_mnt_idmap`` idmap of the old mount the inode was found from h](j)}(h``old_mnt_idmap``h]j)}(hjl>h]h old_mnt_idmap}(hjn>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj>ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjf>ubj)}(hhh]h)}(h/idmap of the old mount the inode was found fromh]h/idmap of the old mount the inode was found from}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhjf>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjc>ubj)}(h``old_dir`` parent of source h](j)}(h ``old_dir``h]j)}(hj>h]hold_dir}(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>hMhjc>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}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjc>ubj)}(hB``new_mnt_idmap`` idmap of the new mount the inode was found from h](j)}(h``new_mnt_idmap``h]j)}(hj?h]h new_mnt_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 new mount the inode was found fromh]h/idmap of the new mount the inode was found from}(hj0?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,?hMhj-?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj,?hMhjc>ubj)}(h"``new_dir`` parent of destination h](j)}(h ``new_dir``h]j)}(hjP?h]hnew_dir}(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)}(hparent of destinationh]hparent of destination}(hji?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje?hMhjf?ubah}(h]h ]h"]h$]h&]uh1jhjJ?ubeh}(h]h ]h"]h$]h&]uh1jhje?hMhjc>ubj)}(h``new_dentry`` destination h](j)}(h``new_dentry``h]j)}(hj?h]h new_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)}(h destinationh]h destination}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjc>ubj)}(h@``delegated_inode`` returns an inode needing a delegation break h](j)}(h``delegated_inode``h]j)}(hj?h]hdelegated_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+returns an inode needing a delegation breakh]h+returns an inode needing a delegation break}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjc>ubj)}(h``flags`` rename flagsh](j)}(h ``flags``h]j)}(hj?h]hflags}(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 rename flagsh]h rename flags}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjc>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfreeze_holder (C enum)c.freeze_holderhNtauh1hhhhhhNhNubh)}(hhh](j)}(h freeze_holderh]j)}(henum freeze_holderh](j )}(hjh]henum}(hjU@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQ@hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMubj)}(h h]h }(hjc@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjQ@hhhjb@hMubj/)}(h freeze_holderh]j5)}(hjO@h]h freeze_holder}(hju@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjq@ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjQ@hhhjb@hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjM@hhhjb@hMubah}(h]jH@ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjb@hMhjJ@hhubjc)}(hhh]h)}(hholder of the freezeh]hholder of the freeze}(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&]uh1jbhjJ@hhhjb@hMubeh}(h]h ](jenumeh"]h$]h&]jjjj@jj@jjjuh1hhhhhhNhNubj)}(h**Constants** ``FREEZE_HOLDER_KERNEL`` kernel wants to freeze or thaw filesystem ``FREEZE_HOLDER_USERSPACE`` userspace wants to freeze or thaw filesystem ``FREEZE_MAY_NEST`` whether nesting freeze and thaw requests is allowedh](h)}(h **Constants**h]j)}(hj@h]h Constants}(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)}(hC``FREEZE_HOLDER_KERNEL`` kernel wants to freeze or thaw filesystem h](j)}(h``FREEZE_HOLDER_KERNEL``h]j)}(hj@h]hFREEZE_HOLDER_KERNEL}(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)kernel wants to freeze or thaw filesystemh]h)kernel wants to freeze or thaw filesystem}(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)}(hI``FREEZE_HOLDER_USERSPACE`` userspace wants to freeze or thaw filesystem h](j)}(h``FREEZE_HOLDER_USERSPACE``h]j)}(hjAh]hFREEZE_HOLDER_USERSPACE}(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.hhMhj Aubj)}(hhh]h)}(h,userspace wants to freeze or thaw filesystemh]h,userspace wants to freeze or thaw filesystem}(hj*AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&AhMhj'Aubah}(h]h ]h"]h$]h&]uh1jhj Aubeh}(h]h ]h"]h$]h&]uh1jhj&AhMhj@ubj)}(hG``FREEZE_MAY_NEST`` whether nesting freeze and thaw requests is allowedh](j)}(h``FREEZE_MAY_NEST``h]j)}(hjJAh]hFREEZE_MAY_NEST}(hjLAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjDAubj)}(hhh]h)}(h3whether nesting freeze and thaw requests is allowedh]h3whether nesting freeze and thaw requests is allowed}(hjcAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhj`Aubah}(h]h ]h"]h$]h&]uh1jhjDAubeh}(h]h ]h"]h$]h&]uh1jhj_AhMhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hjAh]h Description}(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.hhMhhhhubh)}(hXIndicate who the owner of the freeze or thaw request is and whether the freeze needs to be exclusive or can nest. Without **FREEZE_MAY_NEST**, multiple freeze and thaw requests from the same holder aren't allowed. It is however allowed to hold a single **FREEZE_HOLDER_USERSPACE** and a single **FREEZE_HOLDER_KERNEL** freeze at the same time. This is relied upon by some filesystems during online repair or similar.h](hzIndicate who the owner of the freeze or thaw request is and whether the freeze needs to be exclusive or can nest. Without }(hjAhhhNhNubj)}(h**FREEZE_MAY_NEST**h]hFREEZE_MAY_NEST}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubhr, multiple freeze and thaw requests from the same holder aren’t allowed. It is however allowed to hold a single }(hjAhhhNhNubj)}(h**FREEZE_HOLDER_USERSPACE**h]hFREEZE_HOLDER_USERSPACE}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh and a single }(hjAhhhNhNubj)}(h**FREEZE_HOLDER_KERNEL**h]hFREEZE_HOLDER_KERNEL}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubhb freeze at the same time. This is relied upon by some filesystems during online repair or similar.}(hjAhhhNhNubeh}(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](his_mgtime (C function) c.is_mgtimehNtauh1hhhhhhNhNubh)}(hhh](j)}(h*bool is_mgtime (const struct inode *inode)h]j)}(h)bool is_mgtime(const struct inode *inode)h](j+)}(hj.h]hbool}(hjBhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjAhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMW ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAhhhjBhMW ubj/)}(h is_mgtimeh]j5)}(h is_mgtimeh]h is_mgtime}(hj!BhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjBubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjAhhhjBhMW ubj)}(h(const struct inode *inode)h]j)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hj=BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9Bubj)}(h h]h }(hjJBhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9Bubj )}(hjzh]hstruct}(hjXBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9Bubj)}(h h]h }(hjeBhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9Bubh)}(hhh]j5)}(hinodeh]hinode}(hjvBhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjsBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxBmodnameN classnameNjj)}j]j)}jj#Bsb c.is_mgtimeasbuh1hhj9Bubj)}(h h]h }(hjBhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9BubjX)}(hj[h]h*}(hjBhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9Bubj5)}(hinodeh]hinode}(hjBhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9Bubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5Bubah}(h]h ]h"]h$]h&]jLjMuh1jhjAhhhjBhMW ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjAhhhjBhMW ubah}(h]jAah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjBhMW hjAhhubjc)}(hhh]h)}(h)is this inode using multigrain timestampsh]h)is this inode using multigrain timestamps}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMR hjBhhubah}(h]h ]h"]h$]h&]uh1jbhjAhhhjBhMW ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1hhhhhhNhNubj)}(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)}(hjBh]h Parameters}(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.hhMV hjBubj)}(hhh]j)}(hF``const struct inode *inode`` inode to test for multigrain timestamps h](j)}(h``const struct inode *inode``h]j)}(hjCh]hconst struct inode *inode}(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.hhMS hjCubj)}(hhh]h)}(h'inode to test for multigrain timestampsh]h'inode to test for multigrain timestamps}(hj5ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ChMS hj2Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj1ChMS hjCubah}(h]h ]h"]h$]h&]uh1jhjBubh)}(h**Description**h]j)}(hjWCh]h Description}(hjYChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUCubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMU hjBubh)}(hEReturn true if the inode uses multigrain timestamps, false otherwise.h]hEReturn true if the inode uses multigrain timestamps, false otherwise.}(hjmChhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMU hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_idmapped_mnt (C function)c.is_idmapped_mnthNtauh1hhhhhhNhNubh)}(hhh](j)}(h1bool is_idmapped_mnt (const struct vfsmount *mnt)h]j)}(h0bool is_idmapped_mnt(const struct vfsmount *mnt)h](j+)}(hj.h]hbool}(hjChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjChhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj)}(h h]h }(hjChhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjChhhjChM ubj/)}(his_idmapped_mnth]j5)}(his_idmapped_mnth]his_idmapped_mnt}(hjChhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjChhhjChM ubj)}(h(const struct vfsmount *mnt)h]j)}(hconst struct vfsmount *mnth](j )}(hjh]hconst}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjCubj )}(hjzh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubj)}(h h]h }(hjDhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjCubh)}(hhh]j5)}(hvfsmounth]hvfsmount}(hjDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j)}jjCsbc.is_idmapped_mntasbuh1hhjCubj)}(h h]h }(hj1DhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjCubjX)}(hj[h]h*}(hj?DhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjCubj5)}(hmnth]hmnt}(hjLDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjCubah}(h]h ]h"]h$]h&]jLjMuh1jhjChhhjChM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjChhhjChM ubah}(h]jCah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjChM hjChhubjc)}(hhh]h)}(hcheck whether a mount is mappedh]hcheck whether a mount is mapped}(hjvDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjsDhhubah}(h]h ]h"]h$]h&]uh1jbhjChhhjChM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjDjjDjjjuh1hhhhhhNhNubj)}(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)}(hjDh]h Parameters}(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 hjDubj)}(hhh]j)}(h2``const struct vfsmount *mnt`` the mount to check h](j)}(h``const struct vfsmount *mnt``h]j)}(hjDh]hconst struct vfsmount *mnt}(hjDhhhNhNubah}(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.hhM hjDubj)}(hhh]h)}(hthe mount to checkh]hthe mount to check}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjDubh)}(h**Description**h]j)}(hjDh]h Description}(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 hjDubh)}(hNIf **mnt** has an non **nop_mnt_idmap** attached to it then **mnt** is mapped.h](hIf }(hjEhhhNhNubj)}(h**mnt**h]hmnt}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh has an non }(hjEhhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj"EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh attached to it then }(hjEhhhNhNubj)}(h**mnt**h]hmnt}(hj4EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh is mapped.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjDubh)}(h **Return**h]j)}(hjOEh]hReturn}(hjQEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMEubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjDubh)}(h&true if mount is mapped, false if not.h]h&true if mount is mapped, false if not.}(hjeEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfile_start_write (C function)c.file_start_writehNtauh1hhhhhhNhNubh)}(hhh](j)}(h)void file_start_write (struct file *file)h]j)}(h(void file_start_write(struct file *file)h](j+)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjEhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjEhhhjEhM ubj/)}(hfile_start_writeh]j5)}(hfile_start_writeh]hfile_start_write}(hjEhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjEubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjEhhhjEhM ubj)}(h(struct file *file)h]j)}(hstruct file *fileh](j )}(hjzh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjEubh)}(hhh]j5)}(hfileh]hfile}(hjEhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j)}jjEsbc.file_start_writeasbuh1hhjEubj)}(h h]h }(hjFhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjEubjX)}(hj[h]h*}(hjFhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjEubj5)}(hfileh]hfile}(hj*FhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjEubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjEubah}(h]h ]h"]h$]h&]jLjMuh1jhjEhhhjEhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjEhhhjEhM ubah}(h]jEah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjEhM hjEhhubjc)}(hhh]h)}(h4get write access to a superblock for regular file ioh]h4get write access to a superblock for regular file io}(hjTFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjQFhhubah}(h]h ]h"]h$]h&]uh1jbhjEhhhjEhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjlFjjlFjjjuh1hhhhhhNhNubj)}(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-regualr file. Should be matched with a call to file_end_write().h](h)}(h**Parameters**h]j)}(hjvFh]h Parameters}(hjxFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtFubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjpFubj)}(hhh]j)}(h3``struct file *file`` the file we want to write to h](j)}(h``struct file *file``h]j)}(hjFh]hstruct file *file}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjFubj)}(hhh]h)}(hthe file we want to write toh]hthe file we want to write to}(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&]uh1jhjpFubh)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjpFubh)}(h}This is a variant of sb_start_write() which is a noop on non-regualr 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-regualr file. Should be matched with a call to file_end_write().}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjpFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfile_end_write (C function)c.file_end_writehNtauh1hhhhhhNhNubh)}(hhh](j)}(h'void file_end_write (struct file *file)h]j)}(h&void file_end_write(struct file *file)h](j+)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjGhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj)}(h h]h }(hj$GhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGhhhj#GhM ubj/)}(hfile_end_writeh]j5)}(hfile_end_writeh]hfile_end_write}(hj6GhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2Gubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjGhhhj#GhM ubj)}(h(struct file *file)h]j)}(hstruct file *fileh](j )}(hjzh]hstruct}(hjRGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNGubj)}(h h]h }(hj_GhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNGubh)}(hhh]j5)}(hfileh]hfile}(hjpGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjmGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrGmodnameN classnameNjj)}j]j)}jj8Gsbc.file_end_writeasbuh1hhjNGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNGubjX)}(hj[h]h*}(hjGhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjNGubj5)}(hfileh]hfile}(hjGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjNGubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjJGubah}(h]h ]h"]h$]h&]jLjMuh1jhjGhhhj#GhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj Ghhhj#GhM ubah}(h]jGah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj#GhM hj Ghhubjc)}(hhh]h)}(h3drop write access to a superblock of a regular fileh]h3drop write access to a superblock of a regular file}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjGhhubah}(h]h ]h"]h$]h&]uh1jbhj Ghhhj#GhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1hhhhhhNhNubj)}(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)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjGubj)}(hhh]j)}(h+``struct file *file`` the file we wrote to h](j)}(h``struct file *file``h]j)}(hjHh]hstruct file *file}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjHubj)}(hhh]h)}(hthe file we wrote toh]hthe file we wrote to}(hj/HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+HhM hj,Hubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhj+HhM hj Hubah}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjQHh]h Description}(hjSHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOHubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjGubh)}(h4Should be matched with a call to file_start_write().h]h4Should be matched with a call to file_start_write().}(hjgHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkiocb_start_write (C function)c.kiocb_start_writehNtauh1hhhhhhNhNubh)}(hhh](j)}(h+void kiocb_start_write (struct kiocb *iocb)h]j)}(h*void kiocb_start_write(struct kiocb *iocb)h](j+)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjHhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjHhhhjHhM ubj/)}(hkiocb_start_writeh]j5)}(hkiocb_start_writeh]hkiocb_start_write}(hjHhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjHhhhjHhM ubj)}(h(struct kiocb *iocb)h]j)}(hstruct kiocb *iocbh](j )}(hjzh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjHubh)}(hhh]j5)}(hkiocbh]hkiocb}(hjHhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jjHsbc.kiocb_start_writeasbuh1hhjHubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjHubjX)}(hj[h]h*}(hjIhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjHubj5)}(hiocbh]hiocb}(hj,IhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjHubah}(h]h ]h"]h$]h&]jLjMuh1jhjHhhhjHhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjHhhhjHhM ubah}(h]jHah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjHhM hjHhhubjc)}(hhh]h)}(h2get write access to a superblock for async file ioh]h2get write access to a superblock for async file io}(hjVIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjSIhhubah}(h]h ]h"]h$]h&]uh1jbhjHhhhjHhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnIjjnIjjjuh1hhhhhhNhNubj)}(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)}(hjxIh]h Parameters}(hjzIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvIubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjrIubj)}(hhh]j)}(hG``struct kiocb *iocb`` the io context we want to submit the write with h](j)}(h``struct kiocb *iocb``h]j)}(hjIh]hstruct kiocb *iocb}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjIubj)}(hhh]h)}(h/the io context we want to submit the write withh]h/the io context we want to submit the write with}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjrIubh)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjrIubh)}(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().}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjrIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkiocb_end_write (C function)c.kiocb_end_writehNtauh1hhhhhhNhNubh)}(hhh](j)}(h)void kiocb_end_write (struct kiocb *iocb)h]j)}(h(void kiocb_end_write(struct kiocb *iocb)h](j+)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjJhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj)}(h h]h }(hj&JhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJhhhj%JhM ubj/)}(hkiocb_end_writeh]j5)}(hkiocb_end_writeh]hkiocb_end_write}(hj8JhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj4Jubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjJhhhj%JhM ubj)}(h(struct kiocb *iocb)h]j)}(hstruct kiocb *iocbh](j )}(hjzh]hstruct}(hjTJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPJubj)}(h h]h }(hjaJhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjPJubh)}(hhh]j5)}(hkiocbh]hkiocb}(hjrJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjoJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtJmodnameN classnameNjj)}j]j)}jj:Jsbc.kiocb_end_writeasbuh1hhjPJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjPJubjX)}(hj[h]h*}(hjJhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjPJubj5)}(hiocbh]hiocb}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPJubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjLJubah}(h]h ]h"]h$]h&]jLjMuh1jhjJhhhj%JhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjJhhhj%JhM ubah}(h]j Jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj%JhM hj Jhhubjc)}(hhh]h)}(h5drop write access to a superblock after async file ioh]h5drop write access to a superblock after async file io}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjJhhubah}(h]h ]h"]h$]h&]uh1jbhj Jhhhj%JhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1hhhhhhNhNubj)}(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)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjJubj)}(hhh]j)}(hB``struct kiocb *iocb`` the io context we sumbitted the write with h](j)}(h``struct kiocb *iocb``h]j)}(hjKh]hstruct kiocb *iocb}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjKubj)}(hhh]h)}(h*the io context we sumbitted the write withh]h*the io context we sumbitted the write with}(hj1KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-KhM hj.Kubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhj-KhM hjKubah}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j)}(hjSKh]h Description}(hjUKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQKubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjJubh)}(h5Should be matched with a call to kiocb_start_write().h]h5Should be matched with a call to kiocb_start_write().}(hjiKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_dot_dotdot (C function)c.is_dot_dotdothNtauh1hhhhhhNhNubh)}(hhh](j)}(h1bool is_dot_dotdot (const char *name, size_t len)h]j)}(h0bool is_dot_dotdot(const char *name, size_t len)h](j+)}(hj.h]hbool}(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKhhhjKhM ubj/)}(h is_dot_dotdoth]j5)}(h is_dot_dotdoth]h is_dot_dotdot}(hjKhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjKhhhjKhM ubj)}(h(const char *name, size_t len)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubj+)}(hcharh]hchar}(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubjX)}(hj[h]h*}(hj LhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubj5)}(hnameh]hname}(hjLhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjKubj)}(h size_t lenh](h)}(hhh]j5)}(hsize_th]hsize_t}(hj4LhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj1Lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6LmodnameN classnameNjj)}j]j)}jjKsbc.is_dot_dotdotasbuh1hhj-Lubj)}(h h]h }(hjTLhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-Lubj5)}(hlenh]hlen}(hjbLhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-Lubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjKubeh}(h]h ]h"]h$]h&]jLjMuh1jhjKhhhjKhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjKhhhjKhM ubah}(h]jKah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjKhM hjKhhubjc)}(hhh]h)}(h,returns true only if **name** is "." or ".."h](hreturns true only if }(hjLhhhNhNubj)}(h**name**h]hname}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh is “.” or “..”}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjLhhubah}(h]h ]h"]h$]h&]uh1jbhjKhhhjKhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1hhhhhhNhNubj)}(hi**Parameters** ``const char *name`` file name to check ``size_t len`` length of file name, in bytesh](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(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.hhM hjLubj)}(hhh](j)}(h(``const char *name`` file name to check h](j)}(h``const char *name``h]j)}(hjLh]hconst char *name}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hjLubj)}(hhh]h)}(hfile name to checkh]hfile name to check}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM hjLubj)}(h,``size_t len`` length of file name, in bytesh](j)}(h``size_t len``h]j)}(hjMh]h size_t len}(hjMhhhNhNubah}(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.hhM hjMubj)}(hhh]h)}(hlength of file name, in bytesh]hlength of file name, in bytes}(hj1MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM hj.Mubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj-MhM hjLubeh}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinode_dio_begin (C function)c.inode_dio_beginhNtauh1hhhhhhNhNubh)}(hhh](j)}(h*void inode_dio_begin (struct inode *inode)h]j)}(h)void inode_dio_begin(struct inode *inode)h](j+)}(hvoidh]hvoid}(hjrMhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnMhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMn ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnMhhhjMhMn ubj/)}(hinode_dio_beginh]j5)}(hinode_dio_beginh]hinode_dio_begin}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjnMhhhjMhMn ubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjMubh)}(hhh]j5)}(hinodeh]hinode}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j)}jjMsbc.inode_dio_beginasbuh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjMubjX)}(hj[h]h*}(hjMhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjMubj5)}(hinodeh]hinode}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjMubah}(h]h ]h"]h$]h&]jLjMuh1jhjnMhhhjMhMn ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjjMhhhjMhMn ubah}(h]jeMah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjMhMn hjgMhhubjc)}(hhh]h)}(h%signal start of a direct I/O requestsh]h%signal start of a direct I/O requests}(hj2NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMh hj/Nhhubah}(h]h ]h"]h$]h&]uh1jbhjgMhhhjMhMn ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJNjjJNjjjuh1hhhhhhNhNubj)}(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)}(hjTNh]h Parameters}(hjVNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMl hjNNubj)}(hhh]j)}(h8``struct inode *inode`` inode the direct I/O happens on h](j)}(h``struct inode *inode``h]j)}(hjsNh]hstruct inode *inode}(hjuNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMi hjmNubj)}(hhh]h)}(hinode the direct I/O happens onh]hinode the direct I/O happens on}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMi hjNubah}(h]h ]h"]h$]h&]uh1jhjmNubeh}(h]h ]h"]h$]h&]uh1jhjNhMi hjjNubah}(h]h ]h"]h$]h&]uh1jhjNNubh)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMk hjNNubh)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMk hjNNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinode_dio_end (C function)c.inode_dio_endhNtauh1hhhhhhNhNubh)}(hhh](j)}(h(void inode_dio_end (struct inode *inode)h]j)}(h'void inode_dio_end(struct inode *inode)h](j+)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjNhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMz ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNhhhjOhMz ubj/)}(h inode_dio_endh]j5)}(h inode_dio_endh]h inode_dio_end}(hjOhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjOubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjNhhhjOhMz ubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj0OhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,Oubj)}(h h]h }(hj=OhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,Oubh)}(hhh]j5)}(hinodeh]hinode}(hjNOhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPOmodnameN classnameNjj)}j]j)}jjOsbc.inode_dio_endasbuh1hhj,Oubj)}(h h]h }(hjnOhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,OubjX)}(hj[h]h*}(hj|OhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj,Oubj5)}(hinodeh]hinode}(hjOhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,Oubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(Oubah}(h]h ]h"]h$]h&]jLjMuh1jhjNhhhjOhMz ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjNhhhjOhMz ubah}(h]jNah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjOhMz hjNhhubjc)}(hhh]h)}(h&signal finish of a direct I/O requestsh]h&signal finish of a direct I/O requests}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMt hjOhhubah}(h]h ]h"]h$]h&]uh1jbhjNhhhjOhMz ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOjjOjjjuh1hhhhhhNhNubj)}(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)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMx hjOubj)}(hhh]j)}(h8``struct inode *inode`` inode the direct I/O happens on h](j)}(h``struct inode *inode``h]j)}(hjOh]hstruct inode *inode}(hjOhhhNhNubah}(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.hhMu hjOubj)}(hhh]h)}(hinode the direct I/O happens onh]hinode the direct I/O happens on}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj PhMu hj Pubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj PhMu hjOubah}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j)}(hj/Ph]h Description}(hj1PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Pubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMw hjOubh)}(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.}(hjEPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMw hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,generic_ci_validate_strict_name (C function)!c.generic_ci_validate_strict_namehNtauh1hhhhhhNhNubh)}(hhh](j)}(hKbool generic_ci_validate_strict_name (struct inode *dir, struct qstr *name)h]j)}(hJbool generic_ci_validate_strict_name(struct inode *dir, struct qstr *name)h](j+)}(hj.h]hbool}(hjtPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjpPhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM.ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpPhhhjPhM.ubj/)}(hgeneric_ci_validate_strict_nameh]j5)}(hgeneric_ci_validate_strict_nameh]hgeneric_ci_validate_strict_name}(hjPhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjpPhhhjPhM.ubj)}(h&(struct inode *dir, struct qstr *name)h](j)}(hstruct inode *dirh](j )}(hjzh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjPubh)}(hhh]j5)}(hinodeh]hinode}(hjPhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j)}jjPsb!c.generic_ci_validate_strict_nameasbuh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjPubjX)}(hj[h]h*}(hjPhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjPubj5)}(hdirh]hdir}(hj QhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjPubj)}(hstruct qstr *nameh](j )}(hjzh]hstruct}(hj"QhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj)}(h h]h }(hj/QhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjQubh)}(hhh]j5)}(hqstrh]hqstr}(hj@QhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=Qubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBQmodnameN classnameNjj)}j]jP!c.generic_ci_validate_strict_nameasbuh1hhjQubj)}(h h]h }(hj^QhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjQubjX)}(hj[h]h*}(hjlQhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjQubj5)}(hnameh]hname}(hjyQhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjQubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjPubeh}(h]h ]h"]h$]h&]jLjMuh1jhjpPhhhjPhM.ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjlPhhhjPhM.ubah}(h]jgPah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjPhM.hjiPhhubjc)}(hhh]h)}(h1Check if a given name is suitable for a directoryh]h1Check if a given name is suitable for a directory}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jbhjiPhhhjPhM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1hhhhhhNhNubj)}(hXr**Parameters** ``struct inode *dir`` inode of the directory where the new file will be created ``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)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjQubj)}(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)}(hjQh]hstruct inode *dir}(hjQhhhNhNubah}(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.hhM#hjQubj)}(hhh]h)}(h9inode of the directory where the new file will be createdh]h9inode of the directory where the new file will be created}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM#hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhM#hjQubj)}(h+``struct qstr *name`` name of the new file h](j)}(h``struct qstr *name``h]j)}(hjRh]hstruct qstr *name}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM$hjRubj)}(hhh]h)}(hname of the new fileh]hname of the new file}(hj6RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2RhM$hj3Rubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhj2RhM$hjQubeh}(h]h ]h"]h$]h&]uh1jhjQubh)}(h**Description**h]j)}(hjXRh]h Description}(hjZRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVRubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM&hjQubh)}(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.}(hjnRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhMhjQubh)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Rubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM!hjQubj6-)}(hhh](j;-)}(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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM&hjRubah}(h]h ]h"]h$]h&]uh1j:-hjRubj;-)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:14: ./include/linux/fs.hhM)hjRubah}(h]h ]h"]h$]h&]uh1j:-hjRubeh}(h]h ]h"]h$]h&]j-j[uh1j5-hjRhM&hjQubeh}(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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_drop (C function)c.d_drophNtauh1hhjRhhhNhNubh)}(hhh](j)}(h#void d_drop (struct dentry *dentry)h]j)}(h"void d_drop(struct dentry *dentry)h](j+)}(hvoidh]hvoid}(hj ShhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjShhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMNubj)}(h h]h }(hjShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjShhhjShMNubj/)}(hd_droph]j5)}(hd_droph]hd_drop}(hj*ShhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&Subah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjShhhjShMNubj)}(h(struct dentry *dentry)h]j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hjFShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBSubj)}(h h]h }(hjSShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjBSubh)}(hhh]j5)}(hdentryh]hdentry}(hjdShhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfSmodnameN classnameNjj)}j]j)}jj,Ssbc.d_dropasbuh1hhjBSubj)}(h h]h }(hjShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjBSubjX)}(hj[h]h*}(hjShhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjBSubj5)}(hdentryh]hdentry}(hjShhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjBSubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj>Subah}(h]h ]h"]h$]h&]jLjMuh1jhjShhhjShMNubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjShhhjShMNubah}(h]jRah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjShMNhjRhhubjc)}(hhh]h)}(h drop a dentryh]h drop a dentry}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM=hjShhubah}(h]h ]h"]h$]h&]uh1jbhjRhhhjShMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1hhhhjRhNhNubj)}(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)}(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.chMAhjSubj)}(hhh]j)}(h)``struct dentry *dentry`` dentry to drop h](j)}(h``struct dentry *dentry``h]j)}(hj Th]hstruct dentry *dentry}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM>hjTubj)}(hhh]h)}(hdentry to droph]hdentry to drop}(hj#ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThM>hj Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThM>hjTubah}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjETh]h Description}(hjGThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCTubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM@hjSubh)}(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.}(hj[ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM@hjSubh)}(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).}(hjjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMFhjSubh)}(h __d_drop requires dentry->d_lockh]h __d_drop requires dentry->d_lock}(hjyThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMIhjSubh)}(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).}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMKhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_find_any_alias (C function)c.d_find_any_aliashNtauh1hhjRhhhNhNubh)}(hhh](j)}(h6struct dentry * d_find_any_alias (struct inode *inode)h]j)}(h4struct dentry *d_find_any_alias(struct inode *inode)h](j )}(hjzh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjThhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj)}(h h]h }(hjThhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjThhhjThMubh)}(hhh]j5)}(hdentryh]hdentry}(hjThhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j)}jd_find_any_aliassbc.d_find_any_aliasasbuh1hhjThhhjThMubj)}(h h]h }(hjThhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjThhhjThMubjX)}(hj[h]h*}(hjUhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjThhhjThMubj/)}(hd_find_any_aliash]j5)}(hjTh]hd_find_any_alias}(hjUhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjUubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjThhhjThMubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj1UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-Uubj)}(h h]h }(hj>UhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-Uubh)}(hhh]j5)}(hinodeh]hinode}(hjOUhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjLUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQUmodnameN classnameNjj)}j]jTc.d_find_any_aliasasbuh1hhj-Uubj)}(h h]h }(hjmUhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-UubjX)}(hj[h]h*}(hj{UhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj-Uubj5)}(hinodeh]hinode}(hjUhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-Uubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj)Uubah}(h]h ]h"]h$]h&]jLjMuh1jhjThhhjThMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjThhhjThMubah}(h]jTah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjThMhjThhubjc)}(hhh]h)}(h find any alias for a given inodeh]h find any alias for a given inode}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jbhjThhhjThMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1hhhhjRhNhNubj)}(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)}(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.chMhjUubj)}(hhh]j)}(h3``struct inode *inode`` inode to find an alias for h](j)}(h``struct inode *inode``h]j)}(hjUh]hstruct inode *inode}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjUubj)}(hhh]h)}(hinode to find an alias forh]hinode to find an alias for}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhj Vubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubh)}(h**Description**h]j)}(hj.Vh]h Description}(hj0VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Vubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjUubh)}(h}If any aliases exist for the given inode, take and return a reference for one of them. If no aliases exist, return ``NULL``.h](htIf any aliases exist for the given inode, take and return a reference for one of them. If no aliases exist, return }(hjDVhhhNhNubj)}(h``NULL``h]hNULL}(hjLVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDVubh.}(hjDVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_find_alias (C function)c.d_find_aliashNtauh1hhjRhhhNhNubh)}(hhh](j)}(h2struct dentry * d_find_alias (struct inode *inode)h]j)}(h0struct dentry *d_find_alias(struct inode *inode)h](j )}(hjzh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj)}(h h]h }(hjVhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVhhhjVhMubh)}(hhh]j5)}(hdentryh]hdentry}(hjVhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j)}j d_find_aliassbc.d_find_aliasasbuh1hhjVhhhjVhMubj)}(h h]h }(hjVhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVhhhjVhMubjX)}(hj[h]h*}(hjVhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjVhhhjVhMubj/)}(h d_find_aliash]j5)}(hjVh]h d_find_alias}(hjVhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjVubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjVhhhjVhMubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj)}(h h]h }(hj WhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVubh)}(hhh]j5)}(hinodeh]hinode}(hjWhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]jVc.d_find_aliasasbuh1hhjVubj)}(h h]h }(hj;WhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVubjX)}(hj[h]h*}(hjIWhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjVubj5)}(hinodeh]hinode}(hjVWhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjVubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjVubah}(h]h ]h"]h$]h&]jLjMuh1jhjVhhhjVhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj}VhhhjVhMubah}(h]jxVah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjVhMhjzVhhubjc)}(hhh]h)}(hgrab a hashed alias of inodeh]hgrab a hashed alias of inode}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj}Whhubah}(h]h ]h"]h$]h&]uh1jbhjzVhhhjVhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1hhhhjRhNhNubj)}(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)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjWubj)}(hhh]j)}(h*``struct inode *inode`` inode in question h](j)}(h``struct inode *inode``h]j)}(hjWh]hstruct inode *inode}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjWubj)}(hhh]h)}(hinode in questionh]hinode in question}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubh)}(h**Description**h]j)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjWubh)}(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.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjWubh)}(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.}(hj!XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hshrink_dcache_sb (C function)c.shrink_dcache_sbhNtauh1hhjRhhhNhNubh)}(hhh](j)}(h.void shrink_dcache_sb (struct super_block *sb)h]j)}(h-void shrink_dcache_sb(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hjPXhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjLXhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj)}(h h]h }(hj_XhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLXhhhj^XhMubj/)}(hshrink_dcache_sbh]j5)}(hshrink_dcache_sbh]hshrink_dcache_sb}(hjqXhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjmXubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjLXhhhj^XhMubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjXubh)}(hhh]j5)}(h super_blockh]h super_block}(hjXhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j)}jjsXsbc.shrink_dcache_sbasbuh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjXubjX)}(hj[h]h*}(hjXhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjXubj5)}(hsbh]hsb}(hjXhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjXubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjXubah}(h]h ]h"]h$]h&]jLjMuh1jhjLXhhhj^XhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjHXhhhj^XhMubah}(h]jCXah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj^XhMhjEXhhubjc)}(hhh]h)}(hshrink dcache for a superblockh]hshrink dcache for a superblock}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj Yhhubah}(h]h ]h"]h$]h&]uh1jbhjEXhhhj^XhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(Yjj(Yjjjuh1hhhhjRhNhNubj)}(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)}(hj2Yh]h Parameters}(hj4YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Yubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj,Yubj)}(hhh]j)}(h&``struct super_block *sb`` superblock h](j)}(h``struct super_block *sb``h]j)}(hjQYh]hstruct super_block *sb}(hjSYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOYubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjKYubj)}(hhh]h)}(h superblockh]h superblock}(hjjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfYhMhjgYubah}(h]h ]h"]h$]h&]uh1jhjKYubeh}(h]h ]h"]h$]h&]uh1jhjfYhMhjHYubah}(h]h ]h"]h$]h&]uh1jhj,Yubh)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj,Yubh)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj,Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpath_has_submounts (C function)c.path_has_submountshNtauh1hhjRhhhNhNubh)}(hhh](j)}(h2int path_has_submounts (const struct path *parent)h]j)}(h1int path_has_submounts(const struct path *parent)h](j+)}(hinth]hint}(hjYhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjYhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM~ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjYhhhjYhM~ubj/)}(hpath_has_submountsh]j5)}(hpath_has_submountsh]hpath_has_submounts}(hjYhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjYubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjYhhhjYhM~ubj)}(h(const struct path *parent)h]j)}(hconst struct path *parenth](j )}(hjh]hconst}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Zubj)}(h h]h }(hjZhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj Zubj )}(hjzh]hstruct}(hj)ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Zubj)}(h h]h }(hj6ZhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj Zubh)}(hhh]j5)}(hpathh]hpath}(hjGZhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjDZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjIZmodnameN classnameNjj)}j]j)}jjYsbc.path_has_submountsasbuh1hhj Zubj)}(h h]h }(hjgZhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ZubjX)}(hj[h]h*}(hjuZhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj Zubj5)}(hparenth]hparent}(hjZhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj Zubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubah}(h]h ]h"]h$]h&]jLjMuh1jhjYhhhjYhM~ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjYhhhjYhM~ubah}(h]jYah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjYhM~hjYhhubjc)}(hhh]h)}(h8check for mounts over a dentry in the current namespace.h]h8check for mounts over a dentry in the current namespace.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMwhjZhhubah}(h]h ]h"]h$]h&]uh1jbhjYhhhjYhM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1hhhhjRhNhNubj)}(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)}(hjZh]h Parameters}(hjZhhhNhNubah}(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)}(h-``const struct path *parent`` path to check. h](j)}(h``const struct path *parent``h]j)}(hjZh]hconst struct path *parent}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMyhjZubj)}(hhh]h)}(hpath to check.h]hpath to check.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMyhj[ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj[hMyhjZubah}(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&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM{hjZubh)}(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.}(hj>[hhhNhNubah}(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&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!shrink_dcache_parent (C function)c.shrink_dcache_parenthNtauh1hhjRhhhNhNubh)}(hhh](j)}(h1void shrink_dcache_parent (struct dentry *parent)h]j)}(h0void shrink_dcache_parent(struct dentry *parent)h](j+)}(hvoidh]hvoid}(hjm[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hji[hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj)}(h h]h }(hj|[hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhji[hhhj{[hMubj/)}(hshrink_dcache_parenth]j5)}(hshrink_dcache_parenth]hshrink_dcache_parent}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hji[hhhj{[hMubj)}(h(struct dentry *parent)h]j)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[ubh)}(hhh]j5)}(hdentryh]hdentry}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j)}jj[sbc.shrink_dcache_parentasbuh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[ubjX)}(hj[h]h*}(hj[hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj[ubj5)}(hparenth]hparent}(hj\hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj[ubah}(h]h ]h"]h$]h&]jLjMuh1jhji[hhhj{[hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhje[hhhj{[hMubah}(h]j`[ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj{[hMhjb[hhubjc)}(hhh]h)}(h prune dcacheh]h prune dcache}(hj-\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj*\hhubah}(h]h ]h"]h$]h&]uh1jbhjb[hhhj{[hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjE\jjE\jjjuh1hhhhjRhNhNubj)}(h**Parameters** ``struct dentry *parent`` parent of entries to prune **Description** Prune the dcache to remove unused children of the parent dentry.h](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.chMhjI\ubj)}(hhh]j)}(h5``struct dentry *parent`` parent of entries to prune h](j)}(h``struct dentry *parent``h]j)}(hjn\h]hstruct dentry *parent}(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.chMhjh\ubj)}(hhh]h)}(hparent of entries to pruneh]hparent of entries to prune}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhjh\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhje\ubah}(h]h ]h"]h$]h&]uh1jhjI\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.chMhjI\ubh)}(h@Prune the dcache to remove unused children of the parent dentry.h]h@Prune the dcache to remove unused children of the parent dentry.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjI\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_invalidate (C function)c.d_invalidatehNtauh1hhjRhhhNhNubh)}(hhh](j)}(h)void d_invalidate (struct dentry *dentry)h]j)}(h(void d_invalidate(struct dentry *dentry)h](j+)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMbubj)}(h h]h }(hj\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\hhhj\hMbubj/)}(h d_invalidateh]j5)}(h d_invalidateh]h d_invalidate}(hj]hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ]ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj\hhhj\hMbubj)}(h(struct dentry *dentry)h]j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hj+]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj']ubj)}(h h]h }(hj8]hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj']ubh)}(hhh]j5)}(hdentryh]hdentry}(hjI]hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjF]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjK]modnameN classnameNjj)}j]j)}jj]sbc.d_invalidateasbuh1hhj']ubj)}(h h]h }(hji]hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj']ubjX)}(hj[h]h*}(hjw]hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj']ubj5)}(hdentryh]hdentry}(hj]hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj']ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj#]ubah}(h]h ]h"]h$]h&]jLjMuh1jhj\hhhj\hMbubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj\hhhj\hMbubah}(h]j\ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj\hMbhj\hhubjc)}(hhh]h)}(h(detach submounts, prune dcache, and droph]h(detach submounts, prune dcache, and drop}(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&]uh1jbhj\hhhj\hMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1hhhhjRhNhNubj)}(h]**Parameters** ``struct dentry *dentry`` dentry to invalidate (aka detach, prune and drop)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.chMchj]ubj)}(hhh]j)}(hK``struct dentry *dentry`` dentry to invalidate (aka detach, prune and drop)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.chMehj]ubj)}(hhh]h)}(h1dentry to invalidate (aka detach, prune and drop)h]h1dentry to invalidate (aka detach, prune and drop)}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM`hj^ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj^hMehj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_alloc (C function) c.d_allochNtauh1hhjRhhhNhNubh)}(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 )}(hjzh]hstruct}(hjI^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjE^hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj)}(h h]h }(hjW^hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjE^hhhjV^hMubh)}(hhh]j5)}(hdentryh]hdentry}(hjh^hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hje^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjj^modnameN classnameNjj)}j]j)}jd_allocsb c.d_allocasbuh1hhjE^hhhjV^hMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjE^hhhjV^hMubjX)}(hj[h]h*}(hj^hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjE^hhhjV^hMubj/)}(hd_alloch]j5)}(hj^h]hd_alloc}(hj^hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjE^hhhjV^hMubj)}(h0(struct dentry *parent, const struct qstr *name)h](j)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubh)}(hhh]j5)}(hdentryh]hdentry}(hj^hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j^ c.d_allocasbuh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubjX)}(hj[h]h*}(hj _hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj^ubj5)}(hparenth]hparent}(hj_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj^ubj)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hj3_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/_ubj)}(h h]h }(hj@_hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/_ubj )}(hjzh]hstruct}(hjN_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/_ubj)}(h h]h }(hj[_hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/_ubh)}(hhh]j5)}(hqstrh]hqstr}(hjl_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hji_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjn_modnameN classnameNjj)}j]j^ c.d_allocasbuh1hhj/_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/_ubjX)}(hj[h]h*}(hj_hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj/_ubj5)}(hnameh]hname}(hj_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj/_ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj^ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjE^hhhjV^hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjA^hhhjV^hMubah}(h]j<^ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjV^hMhj>^hhubjc)}(hhh]h)}(hallocate a dcache entryh]hallocate a dcache entry}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jbhj>^hhhjV^hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1hhhhjRhNhNubj)}(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)}(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.chMhj_ubj)}(hhh](j)}(h7``struct dentry * parent`` parent of entry to allocate 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&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj `ubj)}(hhh]h)}(hparent of entry to allocateh]hparent of entry to allocate}(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 qstr *name`` qstr of the name h](j)}(h``const struct qstr *name``h]j)}(hjI`h]hconst struct qstr *name}(hjK`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjC`ubj)}(hhh]h)}(hqstr of the nameh]hqstr of the name}(hjb`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^`hMhj_`ubah}(h]h ]h"]h$]h&]uh1jhjC`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:20: ./fs/dcache.chMhj_ubh)}(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 }(hj`hhhNhNubj)}(h``NULL``h]hNULL}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh 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.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_instantiate (C function)c.d_instantiatehNtauh1hhjRhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`hhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj)}(h h]h }(hj`hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`hhhj`hMubj/)}(h d_instantiateh]j5)}(h d_instantiateh]h d_instantiate}(hj`hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj`ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj`hhhj`hMubj)}(h+(struct dentry *entry, struct inode *inode)h](j)}(hstruct dentry *entryh](j )}(hjzh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj)}(h h]h }(hj%ahhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjaubh)}(hhh]j5)}(hdentryh]hdentry}(hj6ahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8amodnameN classnameNjj)}j]j)}jj`sbc.d_instantiateasbuh1hhjaubj)}(h h]h }(hjVahhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjaubjX)}(hj[h]h*}(hjdahhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjaubj5)}(hentryh]hentry}(hjqahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjaubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjaubh)}(hhh]j5)}(hinodeh]hinode}(hjahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]jRac.d_instantiateasbuh1hhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjaubjX)}(hj[h]h*}(hjahhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjaubj5)}(hinodeh]hinode}(hjahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjaubeh}(h]h ]h"]h$]h&]jLjMuh1jhj`hhhj`hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj`hhhj`hMubah}(h]j`ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj`hMhj`hhubjc)}(hhh]h)}(h&fill in inode information for a dentryh]h&fill in inode information for a dentry}(hj bhhhNhNubah}(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&]uh1jbhj`hhhj`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#bjj#bjjjuh1hhhhjRhNhNubj)}(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)}(hj-bh]h Parameters}(hj/bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+bubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj'bubj)}(hhh](j)}(h,``struct dentry *entry`` dentry to complete h](j)}(h``struct dentry *entry``h]j)}(hjLbh]hstruct dentry *entry}(hjNbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJbubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjFbubj)}(hhh]h)}(hdentry to completeh]hdentry to complete}(hjebhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjabhMhjbbubah}(h]h ]h"]h$]h&]uh1jhjFbubeh}(h]h ]h"]h$]h&]uh1jhjabhMhjCbubj)}(h8``struct inode * inode`` inode to attach to this dentry h](j)}(h``struct inode * inode``h]j)}(hjbh]hstruct inode * inode}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjbubj)}(hhh]h)}(hinode to attach to this dentryh]hinode to attach to this dentry}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjCbubeh}(h]h ]h"]h$]h&]uh1jhj'bubh)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj'bubh)}(h'Fill in inode information in the entry.h]h'Fill in inode information in the entry.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj'bubh)}(hEThis turns negative dentries into productive full members of society.h]hEThis turns negative dentries into productive full members of society.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj'bubh)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj'bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_obtain_alias (C function)c.d_obtain_aliashNtauh1hhjRhhhNhNubh)}(hhh](j)}(h4struct dentry * d_obtain_alias (struct inode *inode)h]j)}(h2struct dentry *d_obtain_alias(struct inode *inode)h](j )}(hjzh]hstruct}(hj#chhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjchhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj)}(h h]h }(hj1chhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjchhhj0chM ubh)}(hhh]j5)}(hdentryh]hdentry}(hjBchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?cubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDcmodnameN classnameNjj)}j]j)}jd_obtain_aliassbc.d_obtain_aliasasbuh1hhjchhhj0chM ubj)}(h h]h }(hjcchhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjchhhj0chM ubjX)}(hj[h]h*}(hjqchhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjchhhj0chM ubj/)}(hd_obtain_aliash]j5)}(hj`ch]hd_obtain_alias}(hjchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj~cubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjchhhj0chM ubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjcubh)}(hhh]j5)}(hinodeh]hinode}(hjchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j^cc.d_obtain_aliasasbuh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjcubjX)}(hj[h]h*}(hjchhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjcubj5)}(hinodeh]hinode}(hjchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjcubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjcubah}(h]h ]h"]h$]h&]jLjMuh1jhjchhhj0chM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjchhhj0chM ubah}(h]jcah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj0chM hjchhubjc)}(hhh]h)}(h8find or allocate a DISCONNECTED dentry for a given inodeh]h8find or allocate a DISCONNECTED dentry for a given inode}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjdhhubah}(h]h ]h"]h$]h&]uh1jbhjchhhj0chM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6djj6djjjuh1hhhhjRhNhNubj)}(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)}(hj@dh]h Parameters}(hjBdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>dubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj:dubj)}(hhh]j)}(h9``struct inode *inode`` inode to allocate the dentry for h](j)}(h``struct inode *inode``h]j)}(hj_dh]hstruct inode *inode}(hjadhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]dubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjYdubj)}(hhh]h)}(h inode to allocate the dentry forh]h inode to allocate the dentry for}(hjxdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtdhMhjudubah}(h]h ]h"]h$]h&]uh1jhjYdubeh}(h]h ]h"]h$]h&]uh1jhjtdhMhjVdubah}(h]h ]h"]h$]h&]uh1jhj:dubh)}(h**Description**h]j)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj:dubh)}(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).}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj:dubh)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj:dubh)}(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 }(hjdhhhNhNubj)}(h``NULL``h]hNULL}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh_ or IS_ERR inode may be passed in and the error will be propagated to the return value, with a }(hjdhhhNhNubj)}(h``NULL``h]hNULL}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh }(hjdhhhNhNubj)}(h **inode**h]hinode}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh replaced by ERR_PTR(-ESTALE).}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj:dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_obtain_root (C function)c.d_obtain_roothNtauh1hhjRhhhNhNubh)}(hhh](j)}(h3struct dentry * d_obtain_root (struct inode *inode)h]j)}(h1struct dentry *d_obtain_root(struct inode *inode)h](j )}(hjzh]hstruct}(hj3ehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ehhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMubj)}(h h]h }(hjAehhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/ehhhj@ehMubh)}(hhh]j5)}(hdentryh]hdentry}(hjRehhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjOeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTemodnameN classnameNjj)}j]j)}j d_obtain_rootsbc.d_obtain_rootasbuh1hhj/ehhhj@ehMubj)}(h h]h }(hjsehhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/ehhhj@ehMubjX)}(hj[h]h*}(hjehhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj/ehhhj@ehMubj/)}(h d_obtain_rooth]j5)}(hjpeh]h d_obtain_root}(hjehhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjeubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj/ehhhj@ehMubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjeubh)}(hhh]j5)}(hinodeh]hinode}(hjehhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]jnec.d_obtain_rootasbuh1hhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjeubjX)}(hj[h]h*}(hjehhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjeubj5)}(hinodeh]hinode}(hjfhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjeubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjeubah}(h]h ]h"]h$]h&]jLjMuh1jhj/ehhhj@ehMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj+ehhhj@ehMubah}(h]j&eah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj@ehMhj(ehhubjc)}(hhh]h)}(h+find or allocate a dentry for a given inodeh]h+find or allocate a dentry for a given inode}(hj.fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj+fhhubah}(h]h ]h"]h$]h&]uh1jbhj(ehhhj@ehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFfjjFfjjjuh1hhhhjRhNhNubj)}(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)}(hjPfh]h Parameters}(hjRfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjJfubj)}(hhh]j)}(h9``struct inode *inode`` inode to allocate the dentry for h](j)}(h``struct inode *inode``h]j)}(hjofh]hstruct inode *inode}(hjqfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmfubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjifubj)}(hhh]h)}(h inode to allocate the dentry forh]h inode to allocate the dentry for}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjifubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjffubah}(h]h ]h"]h$]h&]uh1jhjJfubh)}(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.chMhjJfubh)}(h6Obtain an IS_ROOT dentry for the root of a filesystem.h]h6Obtain an IS_ROOT dentry for the root of a filesystem.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjJfubh)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjJfubh)}(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 }(hjfhhhNhNubj)}(h``NULL``h]hNULL}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubhf or IS_ERR inode may be passed in and will be the error will be propagate to the return value, with a }(hjfhhhNhNubj)}(h``NULL``h]hNULL}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh }(hjfhhhNhNubj)}(h **inode**h]hinode}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh replaced by ERR_PTR(-ESTALE).}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjJfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_add_ci (C function) c.d_add_cihNtauh1hhjRhhhNhNubh)}(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 )}(hjzh]hstruct}(hjCghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ghhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM4ubj)}(h h]h }(hjQghhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ghhhjPghM4ubh)}(hhh]j5)}(hdentryh]hdentry}(hjbghhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_gubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdgmodnameN classnameNjj)}j]j)}jd_add_cisb c.d_add_ciasbuh1hhj?ghhhjPghM4ubj)}(h h]h }(hjghhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ghhhjPghM4ubjX)}(hj[h]h*}(hjghhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj?ghhhjPghM4ubj/)}(hd_add_cih]j5)}(hjgh]hd_add_ci}(hjghhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjgubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj?ghhhjPghM4ubj)}(h?(struct dentry *dentry, struct inode *inode, struct qstr *name)h](j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjgubh)}(hhh]j5)}(hdentryh]hdentry}(hjghhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j~g c.d_add_ciasbuh1hhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjgubjX)}(hj[h]h*}(hjhhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjgubj5)}(hdentryh]hdentry}(hjhhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjgubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjgubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj-hhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)hubj)}(h h]h }(hj:hhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)hubh)}(hhh]j5)}(hinodeh]hinode}(hjKhhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMhmodnameN classnameNjj)}j]j~g c.d_add_ciasbuh1hhj)hubj)}(h h]h }(hjihhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)hubjX)}(hj[h]h*}(hjwhhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj)hubj5)}(hinodeh]hinode}(hjhhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)hubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjgubj)}(hstruct qstr *nameh](j )}(hjzh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhubh)}(hhh]j5)}(hqstrh]hqstr}(hjhhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j~g c.d_add_ciasbuh1hhjhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhubjX)}(hj[h]h*}(hjhhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhubj5)}(hnameh]hname}(hjhhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjhubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjgubeh}(h]h ]h"]h$]h&]jLjMuh1jhj?ghhhjPghM4ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj;ghhhjPghM4ubah}(h]j6gah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjPghM4hj8ghhubjc)}(hhh]h)}(h2lookup or allocate new dentry with case-exact nameh]h2lookup or allocate new dentry with case-exact name}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM%hjihhubah}(h]h ]h"]h$]h&]uh1jbhj8ghhhjPghM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6ijj6ijjjuh1hhhhjRhNhNubj)}(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@ih]h Parameters}(hjBihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>iubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM)hj:iubj)}(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_ih]hstruct dentry *dentry}(hjaihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]iubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM&hjYiubj)}(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}(hjxihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtihM&hjuiubah}(h]h ]h"]h$]h&]uh1jhjYiubeh}(h]h ]h"]h$]h&]uh1jhjtihM&hjViubj)}(hD``struct inode *inode`` the inode case-insensitive lookup has found h](j)}(h``struct inode *inode``h]j)}(hjih]hstruct inode *inode}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM'hjiubj)}(hhh]h)}(h+the inode case-insensitive lookup has foundh]h+the inode case-insensitive lookup has found}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihM'hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihM'hjViubj)}(hT``struct qstr *name`` the case-exact name to be associated with the returned dentry h](j)}(h``struct qstr *name``h]j)}(hjih]hstruct qstr *name}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM(hjiubj)}(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}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihM(hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihM(hjViubeh}(h]h ]h"]h$]h&]uh1jhj:iubh)}(h**Description**h]j)}(hj jh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj jubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM*hj:iubh)}(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"jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM*hj:iubh)}(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.}(hj1jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM.hj:iubh)}(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@jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM1hj:iubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_same_name (C function) c.d_same_namehNtauh1hhjRhhhNhNubh)}(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](j+)}(hj.h]hbool}(hjojhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjkjhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMbubj)}(h h]h }(hj}jhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjkjhhhj|jhMbubj/)}(h d_same_nameh]j5)}(h d_same_nameh]h d_same_name}(hjjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjkjhhhj|jhMbubj)}(hS(const struct dentry *dentry, const struct dentry *parent, const struct qstr *name)h](j)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubj )}(hjzh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubh)}(hhh]j5)}(hdentryh]hdentry}(hjjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j)}jjjsb c.d_same_nameasbuh1hhjjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubjX)}(hj[h]h*}(hjkhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjjubj5)}(hdentryh]hdentry}(hjkhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjjubj)}(hconst struct dentry *parenth](j )}(hjh]hconst}(hj8khhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4kubj)}(h h]h }(hjEkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4kubj )}(hjzh]hstruct}(hjSkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4kubj)}(h h]h }(hj`khhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4kubh)}(hhh]j5)}(hdentryh]hdentry}(hjqkhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjskmodnameN classnameNjj)}j]jk c.d_same_nameasbuh1hhj4kubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4kubjX)}(hj[h]h*}(hjkhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj4kubj5)}(hparenth]hparent}(hjkhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj4kubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjjubj)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjkubj )}(hjzh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjkubh)}(hhh]j5)}(hqstrh]hqstr}(hjkhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]jk c.d_same_nameasbuh1hhjkubj)}(h h]h }(hjlhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjkubjX)}(hj[h]h*}(hj(lhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjkubj5)}(hnameh]hname}(hj5lhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjkubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjkjhhhj|jhMbubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjgjhhhj|jhMbubah}(h]jbjah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj|jhMbhjdjhhubjc)}(hhh]h)}(h(compare dentry name with case-exact nameh]h(compare dentry name with case-exact name}(hj_lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM[hj\lhhubah}(h]h ]h"]h$]h&]uh1jbhjdjhhhj|jhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwljjwljjjuh1hhhhjRhNhNubj)}(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)}(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.chM_hj{lubj)}(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)}(hjlh]hconst struct dentry *dentry}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM\hjlubj)}(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}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM\hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM\hjlubj)}(h.``const struct dentry *parent`` parent dentry h](j)}(h``const struct dentry *parent``h]j)}(hjlh]hconst struct dentry *parent}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM]hjlubj)}(hhh]h)}(h parent dentryh]h parent dentry}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM]hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM]hjlubj)}(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)}(hjmh]hconst struct qstr *name}(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=the case-exact name to be associated with the returned dentryh]h=the case-exact name to be associated with the returned dentry}(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&]uh1jhj{lubh)}(h **Return**h]j)}(hjMmh]hReturn}(hjOmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKmubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM`hj{lubh)}(h true if names are same, or falseh]h true if names are same, or false}(hjcmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM`hj{lubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_lookup (C function) c.d_lookuphNtauh1hhjRhhhNhNubh)}(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 )}(hjzh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmhhhjmhM ubh)}(hhh]j5)}(hdentryh]hdentry}(hjmhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j)}jd_lookupsb c.d_lookupasbuh1hhjmhhhjmhM ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmhhhjmhM ubjX)}(hj[h]h*}(hjmhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmhhhjmhM ubj/)}(hd_lookuph]j5)}(hjmh]hd_lookup}(hjmhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjmubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjmhhhjmhM ubj)}(h6(const struct dentry *parent, const struct qstr *name)h](j)}(hconst struct dentry *parenth](j )}(hjh]hconst}(hj nhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubj )}(hjzh]hstruct}(hj'nhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj)}(h h]h }(hj4nhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubh)}(hhh]j5)}(hdentryh]hdentry}(hjEnhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjBnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGnmodnameN classnameNjj)}j]jm c.d_lookupasbuh1hhjnubj)}(h h]h }(hjcnhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubjX)}(hj[h]h*}(hjqnhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjnubj5)}(hparenth]hparent}(hj~nhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjnubj)}(hconst struct qstr *nameh](j )}(hjh]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubj )}(hjzh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubh)}(hhh]j5)}(hqstrh]hqstr}(hjnhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jm c.d_lookupasbuh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubjX)}(hj[h]h*}(hjnhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjnubj5)}(hnameh]hname}(hj ohhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjnubeh}(h]h ]h"]h$]h&]jLjMuh1jhjmhhhjmhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjmhhhjmhM ubah}(h]jmah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjmhM hjmhhubjc)}(hhh]h)}(hsearch for a dentryh]hsearch for a dentry}(hj3ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhj0ohhubah}(h]h ]h"]h$]h&]uh1jbhjmhhhjmhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKojjKojjjuh1hhhhjRhNhNubj)}(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)}(hjUoh]h Parameters}(hjWohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSoubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjOoubj)}(hhh](j)}(h.``const struct dentry *parent`` parent dentry h](j)}(h``const struct dentry *parent``h]j)}(hjtoh]hconst struct dentry *parent}(hjvohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjroubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjnoubj)}(hhh]h)}(h parent dentryh]h parent dentry}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjnoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjkoubj)}(h9``const struct qstr *name`` qstr of name we wish to find h](j)}(h``const struct qstr *name``h]j)}(hjoh]hconst struct qstr *name}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjoubj)}(hhh]h)}(hqstr of name we wish to findh]hqstr of name we wish to find}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjkoubeh}(h]h ]h"]h$]h&]uh1jhjOoubh)}(h **Return**h]j)}(hjoh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjOoubh)}(hdentry, or NULLh]hdentry, or NULL}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjOoubh)}(h**Description**h]j)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj pubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjOoubh)}(hX 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](hd_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. }(hj%phhhNhNubj)}(h``NULL``h]hNULL}(hj-phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%pubh* is returned if the dentry does not exist.}(hj%phhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMhjOoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_hash_and_lookup (C function)c.d_hash_and_lookuphNtauh1hhjRhhhNhNubh)}(hhh](j)}(hIstruct dentry * d_hash_and_lookup (struct dentry *dir, struct qstr *name)h]j)}(hGstruct dentry *d_hash_and_lookup(struct dentry *dir, struct qstr *name)h](j )}(hjzh]hstruct}(hjfphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbphhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM` ubj)}(h h]h }(hjtphhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjbphhhjsphM` ubh)}(hhh]j5)}(hdentryh]hdentry}(hjphhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j)}jd_hash_and_lookupsbc.d_hash_and_lookupasbuh1hhjbphhhjsphM` ubj)}(h h]h }(hjphhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjbphhhjsphM` ubjX)}(hj[h]h*}(hjphhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjbphhhjsphM` ubj/)}(hd_hash_and_lookuph]j5)}(hjph]hd_hash_and_lookup}(hjphhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjbphhhjsphM` ubj)}(h'(struct dentry *dir, struct qstr *name)h](j)}(hstruct dentry *dirh](j )}(hjzh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpubh)}(hhh]j5)}(hdentryh]hdentry}(hjphhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jpc.d_hash_and_lookupasbuh1hhjpubj)}(h h]h }(hjqhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpubjX)}(hj[h]h*}(hj*qhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjpubj5)}(hdirh]hdir}(hj7qhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubj)}(hstruct qstr *nameh](j )}(hjzh]hstruct}(hjPqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLqubj)}(h h]h }(hj]qhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLqubh)}(hhh]j5)}(hqstrh]hqstr}(hjnqhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjkqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpqmodnameN classnameNjj)}j]jpc.d_hash_and_lookupasbuh1hhjLqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLqubjX)}(hj[h]h*}(hjqhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjLqubj5)}(hnameh]hname}(hjqhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjLqubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubeh}(h]h ]h"]h$]h&]jLjMuh1jhjbphhhjsphM` ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj^phhhjsphM` ubah}(h]jYpah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjsphM` hj[phhubjc)}(hhh]h)}(h&hash the qstr then search for a dentryh]h&hash the qstr then search for a dentry}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chMZ hjqhhubah}(h]h ]h"]h$]h&]uh1jbhj[phhhjsphM` ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1hhhhjRhNhNubj)}(h**Parameters** ``struct dentry *dir`` Directory to search in ``struct qstr *name`` qstr of name we wish to find **Description** On lookup failure NULL is returned; on bad name - ERR_PTR(-error)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.chM^ hjqubj)}(hhh](j)}(h.``struct dentry *dir`` Directory to search in h](j)}(h``struct dentry *dir``h]j)}(hjrh]hstruct dentry *dir}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM[ hj rubj)}(hhh]h)}(hDirectory to search inh]hDirectory to search in}(hj+rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'rhM[ hj(rubah}(h]h ]h"]h$]h&]uh1jhj rubeh}(h]h ]h"]h$]h&]uh1jhj'rhM[ hj rubj)}(h3``struct qstr *name`` qstr of name we wish to find h](j)}(h``struct qstr *name``h]j)}(hjKrh]hstruct qstr *name}(hjMrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIrubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM\ hjErubj)}(hhh]h)}(hqstr of name we wish to findh]hqstr of name we wish to find}(hjdrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`rhM\ hjarubah}(h]h ]h"]h$]h&]uh1jhjErubeh}(h]h ]h"]h$]h&]uh1jhj`rhM\ hj rubeh}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM^ hjqubh)}(hAOn lookup failure NULL is returned; on bad name - ERR_PTR(-error)h]hAOn lookup failure NULL is returned; on bad name - ERR_PTR(-error)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM^ hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_delete (C function) c.d_deletehNtauh1hhjRhhhNhNubh)}(hhh](j)}(h&void d_delete (struct dentry * dentry)h]j)}(h$void d_delete(struct dentry *dentry)h](j+)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjrhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjrhhhjrhM ubj/)}(hd_deleteh]j5)}(hd_deleteh]hd_delete}(hjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjrubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjrhhhjrhM ubj)}(h(struct dentry *dentry)h]j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjsubh)}(hhh]j5)}(hdentryh]hdentry}(hj&shhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#subah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(smodnameN classnameNjj)}j]j)}jjrsb c.d_deleteasbuh1hhjsubj)}(h h]h }(hjFshhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjsubjX)}(hj[h]h*}(hjTshhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjsubj5)}(hdentryh]hdentry}(hjashhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjsubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjsubah}(h]h ]h"]h$]h&]jLjMuh1jhjrhhhjrhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjrhhhjrhM ubah}(h]jrah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjrhM hjrhhubjc)}(hhh]h)}(hdelete a dentryh]hdelete a dentry}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjshhubah}(h]h ]h"]h$]h&]uh1jbhjrhhhjrhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1hhhhjRhNhNubj)}(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)}(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.chM hjsubj)}(hhh]j)}(h0``struct dentry * dentry`` The dentry to delete h](j)}(h``struct dentry * dentry``h]j)}(hjsh]hstruct dentry * dentry}(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.chM hjsubj)}(hhh]h)}(hThe dentry to deleteh]hThe dentry to delete}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjsubh)}(h**Description**h]j)}(hjth]h Description}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjsubh)}(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}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_rehash (C function) c.d_rehashhNtauh1hhjRhhhNhNubh)}(hhh](j)}(h%void d_rehash (struct dentry * entry)h]j)}(h#void d_rehash(struct dentry *entry)h](j+)}(hvoidh]hvoid}(hjLthhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjHthhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj)}(h h]h }(hj[thhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjHthhhjZthM ubj/)}(hd_rehashh]j5)}(hd_rehashh]hd_rehash}(hjmthhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjitubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjHthhhjZthM ubj)}(h(struct dentry *entry)h]j)}(hstruct dentry *entryh](j )}(hjzh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjtubh)}(hhh]j5)}(hdentryh]hdentry}(hjthhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j)}jjotsb c.d_rehashasbuh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjtubjX)}(hj[h]h*}(hjthhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjtubj5)}(hentryh]hentry}(hjthhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjtubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjtubah}(h]h ]h"]h$]h&]jLjMuh1jhjHthhhjZthM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjDthhhjZthM ubah}(h]j?tah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjZthM hjAthhubjc)}(hhh]h)}(hadd an entry back to the hashh]hadd an entry back to the hash}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj uhhubah}(h]h ]h"]h$]h&]uh1jbhjAthhhjZthM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$ujj$ujjjuh1hhhhjRhNhNubj)}(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)}(hj.uh]h Parameters}(hj0uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,uubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj(uubj)}(hhh]j)}(h4``struct dentry * entry`` dentry to add to the hash h](j)}(h``struct dentry * entry``h]j)}(hjMuh]hstruct dentry * entry}(hjOuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKuubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjGuubj)}(hhh]h)}(hdentry to add to the hashh]hdentry to add to the hash}(hjfuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbuhM hjcuubah}(h]h ]h"]h$]h&]uh1jhjGuubeh}(h]h ]h"]h$]h&]uh1jhjbuhM hjDuubah}(h]h ]h"]h$]h&]uh1jhj(uubh)}(h**Description**h]j)}(hjuh]h Description}(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.chM hj(uubh)}(h0Adds a dentry to the hash according to its name.h]h0Adds a dentry to the hash according to its name.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj(uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_add (C function)c.d_addhNtauh1hhjRhhhNhNubh)}(hhh](j)}(h6void d_add (struct dentry *entry, struct inode *inode)h]j)}(h5void d_add(struct dentry *entry, struct inode *inode)h](j+)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjuhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjuhhhjuhM ubj/)}(hd_addh]j5)}(hd_addh]hd_add}(hjuhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjuubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjuhhhjuhM ubj)}(h+(struct dentry *entry, struct inode *inode)h](j)}(hstruct dentry *entryh](j )}(hjzh]hstruct}(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjvubh)}(hhh]j5)}(hdentryh]hdentry}(hj(vhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*vmodnameN classnameNjj)}j]j)}jjusbc.d_addasbuh1hhjvubj)}(h h]h }(hjHvhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjvubjX)}(hj[h]h*}(hjVvhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjvubj5)}(hentryh]hentry}(hjcvhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjvubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjvubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj|vhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxvubh)}(hhh]j5)}(hinodeh]hinode}(hjvhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]jDvc.d_addasbuh1hhjxvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxvubjX)}(hj[h]h*}(hjvhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxvubj5)}(hinodeh]hinode}(hjvhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjxvubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjvubeh}(h]h ]h"]h$]h&]jLjMuh1jhjuhhhjuhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjuhhhjuhM ubah}(h]juah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjuhM hjuhhubjc)}(hhh]h)}(hadd dentry to hash queuesh]hadd dentry to hash queues}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjvhhubah}(h]h ]h"]h$]h&]uh1jbhjuhhhjuhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1hhhhjRhNhNubj)}(hX**Parameters** ``struct dentry *entry`` dentry to add ``struct inode *inode`` The inode to attach to this dentry **Description** This adds the entry to the hash queues and initializes **inode**. The entry was actually filled in earlier during d_alloc().h](h)}(h**Parameters**h]j)}(hjwh]h Parameters}(hj!whhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjwubj)}(hhh](j)}(h'``struct dentry *entry`` dentry to add h](j)}(h``struct dentry *entry``h]j)}(hj>wh]hstruct dentry *entry}(hj@whhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlookup. 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)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubj)}(hhh](j)}(hG``struct inode *inode`` the inode which may have a disconnected dentry h](j)}(h``struct inode *inode``h]j)}(hjyh]hstruct inode *inode}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubj)}(hhh]h)}(h.the inode which may have a disconnected dentryh]h.the inode which may have a disconnected dentry}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhM hjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhM hjyubj)}(hQ``struct dentry *dentry`` a negative dentry which we want to point to the inode. h](j)}(h``struct dentry *dentry``h]j)}(hjyh]hstruct dentry *dentry}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubj)}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhM hjzubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjzhM hjyubeh}(h]h ]h"]h$]h&]uh1jhjyubh)}(h**Description**h]j)}(hj)zh]h Description}(hj+zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'zubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubh)}(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.}(hj?zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubh)}(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.}(hjNzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubh)}(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.}(hj]zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubh)}(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.}(hjlzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubh)}(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.}(hj{zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_subdir (C function) c.is_subdirhNtauh1hhjRhhhNhNubh)}(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](j+)}(hj.h]hbool}(hjzhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjzhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzhhhjzhM ubj/)}(h is_subdirh]j5)}(h is_subdirh]h is_subdir}(hjzhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjzubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjzhhhjzhM ubj)}(h6(struct dentry *new_dentry, struct dentry *old_dentry)h](j)}(hstruct dentry *new_dentryh](j )}(hjzh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzubh)}(hhh]j5)}(hdentryh]hdentry}(hj{hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jjzsb c.is_subdirasbuh1hhjzubj)}(h h]h }(hj${hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzubjX)}(hj[h]h*}(hj2{hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjzubj5)}(h new_dentryh]h new_dentry}(hj?{hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjzubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjzubj)}(hstruct dentry *old_dentryh](j )}(hjzh]hstruct}(hjX{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjT{ubj)}(h h]h }(hje{hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjT{ubh)}(hhh]j5)}(hdentryh]hdentry}(hjv{hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjs{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjx{modnameN classnameNjj)}j]j { c.is_subdirasbuh1hhjT{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjT{ubjX)}(hj[h]h*}(hj{hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjT{ubj5)}(h old_dentryh]h old_dentry}(hj{hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjT{ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjzubeh}(h]h ]h"]h$]h&]jLjMuh1jhjzhhhjzhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjzhhhjzhM ubah}(h]jzah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjzhM hjzhhubjc)}(hhh]h)}(h*is new dentry a subdirectory of old_dentryh]h*is new dentry a subdirectory of old_dentry}(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&]uh1jbhjzhhhjzhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1hhhhjRhNhNubj)}(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)}(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)}(h)``struct dentry *new_dentry`` new dentry 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&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hj|ubj)}(hhh]h)}(h new dentryh]h new dentry}(hj3|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/|hM hj0|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj/|hM hj|ubj)}(h)``struct dentry *old_dentry`` old dentry h](j)}(h``struct dentry *old_dentry``h]j)}(hjS|h]hstruct dentry *old_dentry}(hjU|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ|ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:20: ./fs/dcache.chM hjM|ubj)}(hhh]h)}(h old dentryh]h old dentry}(hjl|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh|hM hji|ubah}(h]h ]h"]h$]h&]uh1jhjM|ubeh}(h]h ]h"]h$]h&]uh1jhjh|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)}(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|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&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdget_dlock (C function) c.dget_dlockhNtauh1hhjRhhhNhNubh)}(hhh](j)}(h2struct dentry * dget_dlock (struct dentry *dentry)h]j)}(h0struct dentry *dget_dlock(struct dentry *dentry)h](j )}(hjzh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|hhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM=ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|hhhj|hM=ubh)}(hhh]j5)}(hdentryh]hdentry}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j)}j dget_dlocksb c.dget_dlockasbuh1hhj|hhhj|hM=ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|hhhj|hM=ubjX)}(hj[h]h*}(hj!}hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|hhhj|hM=ubj/)}(h dget_dlockh]j5)}(hj}h]h dget_dlock}(hj2}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.}ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj|hhhj|hM=ubj)}(h(struct dentry *dentry)h]j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hjM}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjI}ubj)}(h h]h }(hjZ}hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjI}ubh)}(hhh]j5)}(hdentryh]hdentry}(hjk}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjh}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjm}modnameN classnameNjj)}j]j} c.dget_dlockasbuh1hhjI}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjI}ubjX)}(hj[h]h*}(hj}hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjI}ubj5)}(hdentryh]hdentry}(hj}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjI}ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjE}ubah}(h]h ]h"]h$]h&]jLjMuh1jhj|hhhj|hM=ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj|hhhj|hM=ubah}(h]j|ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj|hM=hj|hhubjc)}(hhh]h)}(hget a reference to a dentryh]hget a reference to a dentry}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM4hj}hhubah}(h]h ]h"]h$]h&]uh1jbhj|hhhj|hM=ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}jj}jjjuh1hhhhjRhNhNubj)}(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)}(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.hhM8hj}ubj)}(hhh]j)}(h7``struct dentry *dentry`` dentry to get a reference to 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:23: ./include/linux/dcache.hhM5hj ~ubj)}(hhh]h)}(hdentry to get a reference toh]hdentry to get a reference to}(hj(~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$~hM5hj%~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)}(hjJ~h]h Description}(hjL~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH~ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM7hj}ubh)}(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 }(hj`~hhhNhNubj)}(h**dentry->d_lock**h]hdentry->d_lock}(hjh~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`~ubh. 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.}(hj`~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM7hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdget (C function)c.dgethNtauh1hhjRhhhNhNubh)}(hhh](j)}(h,struct dentry * dget (struct dentry *dentry)h]j)}(h*struct dentry *dget(struct dentry *dentry)h](j )}(hjzh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~hhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMVubj)}(h h]h }(hj~hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj~hhhj~hMVubh)}(hhh]j5)}(hdentryh]hdentry}(hj~hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j)}jdgetsbc.dgetasbuh1hhj~hhhj~hMVubj)}(h h]h }(hj~hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj~hhhj~hMVubjX)}(hj[h]h*}(hj~hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj~hhhj~hMVubj/)}(hdgeth]j5)}(hj~h]hdget}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj~ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj~hhhj~hMVubj)}(h(struct dentry *dentry)h]j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hj9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j~c.dgetasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjehhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hdentryh]hdentry}(hjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhj~hhhj~hMVubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj~hhhj~hMVubah}(h]j~ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj~hMVhj~hhubjc)}(hhh]h)}(hget a reference to a dentryh]hget a reference to a dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMEhjhhubah}(h]h ]h"]h$]h&]uh1jbhj~hhhj~hMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjRhNhNubj)}(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)}(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:23: ./include/linux/dcache.hhMIhjubj)}(hhh]j)}(h7``struct dentry *dentry`` dentry to get a reference to 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:23: ./include/linux/dcache.hhMFhjubj)}(hhh]h)}(hdentry to get a reference toh]hdentry to get a reference to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubah}(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:23: ./include/linux/dcache.hhMHhjubh)}(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 }(hj.hhhNhNubj)}(h``NULL``h]hNULL}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubhXp 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.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMHhjubh)}(h**NOTE**h]j)}(hjQh]hNOTE}(hjShhhNhNubah}(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.hhMPhjubh)}(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 }(hjghhhNhNubj)}(h**dentry->d_lock**h]hdentry->d_lock}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh is held. From the deadlock avoidance point of view it is equivalent to spin_lock()/increment refcount/spin_unlock(), so calling it under }(hjghhhNhNubj)}(h**dentry->d_lock**h]hdentry->d_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubhM is always a bug; so’s calling it under ->d_lock on any of its descendents.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_unhashed (C function) c.d_unhashedhNtauh1hhjRhhhNhNubh)}(hhh](j)}(h,int d_unhashed (const struct dentry *dentry)h]j)}(h+int d_unhashed(const struct dentry *dentry)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMeubj)}(h h]h }(hjɀhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjȀhMeubj/)}(h d_unhashedh]j5)}(h d_unhashedh]h d_unhashed}(hjۀhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj׀ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjȀhMeubj)}(h(const struct dentry *dentry)h]j)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hj0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j)}jj݀sb c.d_unhashedasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj^hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hdentryh]hdentry}(hjkhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjȀhMeubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjȀhMeubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjȀhMehjhhubjc)}(hhh]h)}(his dentry hashedh]his dentry hashed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM`hjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjȀhMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjRhNhNubj)}(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)}(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:23: ./include/linux/dcache.hhMdhjubj)}(hhh]j)}(h/``const struct dentry *dentry`` entry to check h](j)}(h``const struct dentry *dentry``h]j)}(hjցh]hconst struct 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:23: ./include/linux/dcache.hhMahjЁubj)}(hhh]h)}(hentry to checkh]hentry to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjЁubeh}(h]h ]h"]h$]h&]uh1jhjhMahj́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&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMchjubh)}(h:Returns true if the dentry passed is not currently hashed.h]h:Returns true if the dentry passed is not currently hashed.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMchjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!d_really_is_negative (C function)c.d_really_is_negativehNtauh1hhjRhhhNhNubh)}(hhh](j)}(h7bool d_really_is_negative (const struct dentry *dentry)h]j)}(h6bool d_really_is_negative(const struct dentry *dentry)h](j+)}(hj.h]hbool}(hjVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMubj)}(h h]h }(hjdhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjRhhhjchMubj/)}(hd_really_is_negativeh]j5)}(hd_really_is_negativeh]hd_really_is_negative}(hjvhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjrubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjRhhhjchMubj)}(h(const struct dentry *dentry)h]j)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hj˂hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjȂubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj͂modnameN classnameNjj)}j]j)}jjxsbc.d_really_is_negativeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjRhhhjchMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjNhhhjchMubah}(h]jIah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjchMhjKhhubjc)}(hhh]h)}(h@Determine if a dentry is really negative (ignoring fallthroughs)h]h@Determine if a dentry is really negative (ignoring fallthroughs)}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhj-hhubah}(h]h ]h"]h$]h&]uh1jbhjKhhhjchMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1hhhhjRhNhNubj)}(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)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjLubj)}(hhh]j)}(h7``const struct dentry *dentry`` The dentry in question h](j)}(h``const struct dentry *dentry``h]j)}(hjqh]hconst struct dentry *dentry}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjkubj)}(hhh]h)}(hThe dentry in questionh]hThe dentry in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubh)}(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:23: ./include/linux/dcache.hhMhjLubh)}(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ƒhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjLubh)}(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уhhhNhNubhemphasis)}(h*only*h]honly}(hjۃhhhNhNubah}(h]h ]h"]h$]h&]uh1jكhjуubhXM 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уhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!d_really_is_positive (C function)c.d_really_is_positivehNtauh1hhjRhhhNhNubh)}(hhh](j)}(h7bool d_really_is_positive (const struct dentry *dentry)h]j)}(h6bool d_really_is_positive(const struct dentry *dentry)h](j+)}(hj.h]hbool}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj!hMubj/)}(hd_really_is_positiveh]j5)}(hd_really_is_positiveh]hd_really_is_positive}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj!hMubj)}(h(const struct dentry *dentry)h]j)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLubj )}(hjzh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj)}(h h]h }(hjxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj6sbc.d_really_is_positiveasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjLubj5)}(hdentryh]hdentry}(hjĄhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjLubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjHubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj!hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj hhhj!hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj!hMhj hhubjc)}(hhh]h)}(h@Determine if a dentry is really positive (ignoring fallthroughs)h]h@Determine if a dentry is really positive (ignoring fallthroughs)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jbhj hhhj!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjRhNhNubj)}(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)}(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:23: ./include/linux/dcache.hhMhj ubj)}(hhh]j)}(h7``const struct dentry *dentry`` The dentry in question h](j)}(h``const struct dentry *dentry``h]j)}(hj/h]hconst struct dentry *dentry}(hj1hhhNhNubah}(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.hhMhj)ubj)}(hhh]h)}(hThe dentry in questionh]hThe dentry in question}(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&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhj ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhj ubh)}(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 }(hjhhhNhNubjڃ)}(h*only*h]honly}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jكhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_inode (C function) c.d_inodehNtauh1hhjRhhhNhNubh)}(hhh](j)}(h4struct inode * d_inode (const struct dentry *dentry)h]j)}(h2struct inode *d_inode(const struct dentry *dentry)h](j )}(hjzh]hstruct}(hjЅhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj̅hhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM ubj)}(h h]h }(hjޅhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj̅hhhj݅hM ubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jd_inodesb c.d_inodeasbuh1hhj̅hhhj݅hM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj̅hhhj݅hM ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj̅hhhj݅hM ubj/)}(hd_inodeh]j5)}(hj h]hd_inode}(hj/hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj̅hhhj݅hM ubj)}(h(const struct dentry *dentry)h]j)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFubj )}(hjzh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.d_inodeasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjFubj5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjFubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjBubah}(h]h ]h"]h$]h&]jLjMuh1jhj̅hhhj݅hM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjȅhhhj݅hM ubah}(h]jÅah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj݅hM hjŅhhubjc)}(hhh]h)}(h#Get the actual inode of this dentryh]h#Get the actual inode of this dentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjŅhhhj݅hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjRhNhNubj)}(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)}(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:23: ./include/linux/dcache.hhM hjubj)}(hhh]j)}(h4``const struct dentry *dentry`` The dentry to query h](j)}(h``const struct dentry *dentry``h]j)}(hj'h]hconst struct 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:23: ./include/linux/dcache.hhMhj!ubj)}(hhh]h)}(hThe dentry to queryh]hThe dentry to query}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(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.hhM hjubh)}(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 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_inode_rcu (C function) c.d_inode_rcuhNtauh1hhjRhhhNhNubh)}(hhh](j)}(h8struct inode * d_inode_rcu (const struct dentry *dentry)h]j)}(h6struct inode *d_inode_rcu(const struct dentry *dentry)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j5)}(hinodeh]hinode}(hjƇhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjÇubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjȇmodnameN classnameNjj)}j]j)}j d_inode_rcusb c.d_inode_rcuasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhMubj/)}(h d_inode_rcuh]j5)}(hjh]h d_inode_rcu}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h(const struct dentry *dentry)h]j)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hjZhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j c.d_inode_rcuasbuh1hhjubj)}(h h]h }(hjxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h4Get the actual inode of this dentry with READ_ONCE()h]h4Get the actual inode of this dentry with READ_ONCE()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjՈjjՈjjjuh1hhhhjRhNhNubj)}(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)}(hj߈h]h Parameters}(hjhhhNhNubah}(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.hhMhjوubj)}(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.hhMhjubj)}(hhh]h)}(hThe dentry to queryh]hThe dentry to query}(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)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjوubh)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjوubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_backing_inode (C function)c.d_backing_inodehNtauh1hhjRhhhNhNubh)}(hhh](j)}(h;struct inode * d_backing_inode (const struct dentry *upper)h]j)}(h9struct inode *d_backing_inode(const struct dentry *upper)h](j )}(hjzh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzhhhjhM(ubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jd_backing_inodesbc.d_backing_inodeasbuh1hhjzhhhjhM(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzhhhjhM(ubjX)}(hj[h]h*}(hj̉hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjzhhhjhM(ubj/)}(hd_backing_inodeh]j5)}(hjh]hd_backing_inode}(hj݉hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjىubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjzhhhjhM(ubj)}(h(const struct dentry *upper)h]j)}(hconst struct dentry *upperh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]jc.d_backing_inodeasbuh1hhjubj)}(h h]h }(hjOhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj]hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hupperh]hupper}(hjjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjzhhhjhM(ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjvhhhjhM(ubah}(h]jqah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM(hjshhubjc)}(hhh]h)}(h+Get upper or lower inode we should be usingh]h+Get upper or lower inode we should be using}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjshhhjhM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjRhNhNubj)}(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)}(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:23: ./include/linux/dcache.hhM#hjubj)}(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.hhM hjϊubj)}(hhh]h)}(hThe upper layerh]hThe upper layer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjϊubeh}(h]h ]h"]h$]h&]uh1jhjhM hj̊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&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM"hjubh)}(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.hhM"hjubh)}(hBNormal filesystems should not use this to access their own inodes.h]hBNormal filesystems should not use this to access their own inodes.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM&hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_real (C function)c.d_realhNtauh1hhjRhhhNhNubh)}(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 )}(hjzh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`hhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM9ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`hhhjqhM9ubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jd_realsbc.d_realasbuh1hhj`hhhjqhM9ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`hhhjqhM9ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj`hhhjqhM9ubj/)}(hd_realh]j5)}(hjh]hd_real}(hjËhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj`hhhjqhM9ubj)}(h.(struct dentry *dentry, enum d_real_type type)h](j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hjދhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjڋubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjڋubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.d_realasbuh1hhjڋubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjڋubjX)}(hj[h]h*}(hj(hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjڋubj5)}(hdentryh]hdentry}(hj5hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjڋubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj֋ubj)}(henum d_real_type typeh](j )}(hjh]henum}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJubh)}(hhh]j5)}(h d_real_typeh]h d_real_type}(hjlhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jc.d_realasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJubj5)}(htypeh]htype}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj֋ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj`hhhjqhM9ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj\hhhjqhM9ubah}(h]jWah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjqhM9hjYhhubjc)}(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.hhM0hjhhubah}(h]h ]h"]h$]h&]uh1jbhjYhhhjqhM9ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjڌjjڌjjjuh1hhhhjRhNhNubj)}(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)}(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:23: ./include/linux/dcache.hhM4hjތubj)}(hhh](j)}(h.``struct dentry *dentry`` the dentry to query 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:23: ./include/linux/dcache.hhM1hjubj)}(hhh]h)}(hthe dentry to queryh]hthe dentry to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubj)}(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.hhM2hj6ubj)}(hhh]h)}(h*the type of real dentry (data or metadata)h]h*the type of real dentry (data or metadata)}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM2hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM2hjubeh}(h]h ]h"]h$]h&]uh1jhjތubh)}(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:23: ./include/linux/dcache.hhM4hjތ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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhM4hjތ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.hhM7hjތubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hd_real_inode (C function)c.d_real_inodehNtauh1hhjRhhhNhNubh)}(hhh](j)}(h9struct inode * d_real_inode (const struct dentry *dentry)h]j)}(h7struct inode *d_real_inode(const struct dentry *dentry)h](j )}(hjzh]hstruct}(hjˍhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjǍhhh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMHubj)}(h h]h }(hjٍhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjǍhhhj؍hMHubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}j d_real_inodesbc.d_real_inodeasbuh1hhjǍhhhj؍hMHubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjǍhhhj؍hMHubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjǍhhhj؍hMHubj/)}(h d_real_inodeh]j5)}(hjh]h d_real_inode}(hj*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjǍhhhj؍hMHubj)}(h(const struct dentry *dentry)h]j)}(hconst struct dentry *dentryh](j )}(hjh]hconst}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAubj )}(hjzh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj)}(h h]h }(hjmhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAubh)}(hhh]j5)}(hdentryh]hdentry}(hj~hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.d_real_inodeasbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjAubj5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjAubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj=ubah}(h]h ]h"]h$]h&]jLjMuh1jhjǍhhhj؍hMHubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjÍhhhj؍hMHubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj؍hMHhjhhubjc)}(hhh]h)}(h&Return the real inode hosting the datah]h&Return the real inode hosting the data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMBhjގhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj؍hMHubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjRhNhNubj)}(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)}(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:23: ./include/linux/dcache.hhMFhjubj)}(hhh]j)}(h4``const struct dentry *dentry`` The dentry to query h](j)}(h``const struct dentry *dentry``h]j)}(hj"h]hconst struct 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:23: ./include/linux/dcache.hhMChjubj)}(hhh]h)}(hThe dentry to queryh]hThe dentry to query}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMChj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMChjubah}(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:23: ./include/linux/dcache.hhMEhjubh)}(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().}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:23: ./include/linux/dcache.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubeh}(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](h"inode_init_always_gfp (C function)c.inode_init_always_gfphNtauh1hhjhhhNhNubh)}(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](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKubj)}(h h]h }(hjʏhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjɏhKubj/)}(hinode_init_always_gfph]j5)}(hinode_init_always_gfph]hinode_init_always_gfp}(hj܏hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj؏ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjɏhKubj)}(h8(struct super_block *sb, struct inode *inode, gfp_t gfp)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjޏsbc.inode_init_always_gfpasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjDhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjQhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj)}(h h]h }(hjwhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j2c.inode_init_always_gfpasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjfubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h gfp_t gfph](h)}(hhh]j5)}(hgfp_th]hgfp_t}(hjݐhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjڐubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjߐmodnameN classnameNjj)}j]j2c.inode_init_always_gfpasbuh1hhj֐ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj֐ubj5)}(hgfph]hgfp}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj֐ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjɏhKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjɏhKubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjɏhKhjhhubjc)}(hhh]h)}(h&perform inode structure initialisationh]h&perform inode structure initialisation}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhj0hhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjɏhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1hhhhjhNhNubj)}(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)}(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.chKhjOubj)}(hhh](j)}(h7``struct super_block *sb`` superblock inode belongs to h](j)}(h``struct super_block *sb``h]j)}(hjth]hstruct super_block *sb}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjnubj)}(hhh]h)}(hsuperblock inode belongs toh]hsuperblock inode belongs to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhKhjkubj)}(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‘hKhjkubj)}(h``gfp_t gfp`` allocation flags 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&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjubj)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(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:29: ./fs/inode.chKhjOubh)}(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 }(hj7hhhNhNubj)}(h**gfp**h]hgfp}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh is used.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chKhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdrop_nlink (C function) c.drop_nlinkhNtauh1hhjhhhNhNubh)}(hhh](j)}(h%void drop_nlink (struct inode *inode)h]j)}(h$void drop_nlink(struct inode *inode)h](j+)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjthhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjthhhjhMubj/)}(h drop_nlinkh]j5)}(h drop_nlinkh]h drop_nlink}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjthhhjhMubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj’hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjӒhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjВubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjՒmodnameN classnameNjj)}j]j)}jjsb c.drop_nlinkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjthhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjphhhjhMubah}(h]jkah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjmhhubjc)}(hhh]h)}(h#directly drop an inode's link counth]h%directly drop an inode’s link count}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj5hhubah}(h]h ]h"]h$]h&]uh1jbhjmhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1hhhhjhNhNubj)}(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)}(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 *inode`` inode 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.chMhjsubj)}(hhh]h)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubah}(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.chMhjTubh)}(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.}(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](hclear_nlink (C function) c.clear_nlinkhNtauh1hhjhhhNhNubh)}(hhh](j)}(h&void clear_nlink (struct inode *inode)h]j)}(h%void clear_nlink(struct inode *inode)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(h clear_nlinkh]j5)}(h clear_nlinkh]h clear_nlink}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2ubh)}(hhh]j5)}(hinodeh]hinode}(hjThhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j)}jjsb c.clear_nlinkasbuh1hhj2ubj)}(h h]h }(hjthhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj2ubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj.ubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h#directly zero an inode's link counth]h%directly zero 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&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjєjjєjjjuh1hhhhjhNhNubj)}(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)}(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)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(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.}(hjKhhhNhNubah}(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](hset_nlink (C function) c.set_nlinkhNtauh1hhjhhhNhNubh)}(hhh](j)}(h8void set_nlink (struct inode *inode, unsigned int nlink)h]j)}(h7void set_nlink(struct inode *inode, unsigned int nlink)h](j+)}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjvhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjvhhhjhMubj/)}(h set_nlinkh]j5)}(h set_nlinkh]h set_nlink}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjvhhhjhMubj)}(h)(struct inode *inode, unsigned int nlink)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjĕhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjՕhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjҕubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjוmodnameN classnameNjj)}j]j)}jjsb c.set_nlinkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned int nlinkh](j+)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubj+)}(hinth]hint}(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%ubj)}(h h]h }(hjShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubj5)}(hnlinkh]hnlink}(hjahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjvhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjrhhhjhMubah}(h]jmah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjohhubjc)}(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&]uh1jbhjohhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(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)}(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)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjƖubeh}(h]h ]h"]h$]h&]uh1jhjhMhjÖubj)}(h6``unsigned int nlink`` new nlink (should be non-zero) h](j)}(h``unsigned int nlink``h]j)}(hjh]hunsigned int nlink}(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 nlink (should be non-zero)h]hnew nlink (should be non-zero)}(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)}(hj@h]h Description}(hjBhhhNhNubah}(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)}(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.}(hjVhhhNhNubah}(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](hinc_nlink (C function) c.inc_nlinkhNtauh1hhjhhhNhNubh)}(hhh](j)}(h$void inc_nlink (struct inode *inode)h]j)}(h#void inc_nlink(struct inode *inode)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(h inc_nlinkh]j5)}(h inc_nlinkh]h inc_nlink}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj—hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjϗhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjݗubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb c.inc_nlinkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj}hhhjhMubah}(h]jxah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjzhhubjc)}(hhh]h)}(h(directly increment an inode's link counth]h*directly increment an inode’s link count}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jbhjzhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1hhhhjhNhNubj)}(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)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjaubj)}(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&]uh1jhjhMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubh)}(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.chMhjaubh)}(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.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinode_sb_list_add (C function)c.inode_sb_list_addhNtauh1hhjhhhNhNubh)}(hhh](j)}(h,void inode_sb_list_add (struct inode *inode)h]j)}(h+void inode_sb_list_add(struct inode *inode)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMpubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMpubj/)}(hinode_sb_list_addh]j5)}(hinode_sb_list_addh]hinode_sb_list_add}(hj'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMpubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ubh)}(hhh]j5)}(hinodeh]hinode}(hjahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j)}jj)sbc.inode_sb_list_addasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj?ubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj;ubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMpubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMpubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMphjhhubjc)}(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.chMmhjÙhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMpubeh}(h]h ](jfunctioneh"]h$]h&]jjjjޙjjޙjjjuh1hhhhjhNhNubj)}(h6**Parameters** ``struct inode *inode`` inode to addh](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.chMqhjubj)}(hhh]j)}(h$``struct inode *inode`` inode to addh](j)}(h``struct inode *inode``h]j)}(hjh]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.chMshjubj)}(hhh]h)}(h inode to addh]h inode to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h __insert_inode_hash (C function)c.__insert_inode_hashhNtauh1hhjhhhNhNubh)}(hhh](j)}(hEvoid __insert_inode_hash (struct inode *inode, unsigned long hashval)h]j)}(hDvoid __insert_inode_hash(struct inode *inode, unsigned long hashval)h](j+)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj]hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjphhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj]hhhjohMubj/)}(h__insert_inode_hashh]j5)}(h__insert_inode_hashh]h__insert_inode_hash}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj~ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj]hhhjohMubj)}(h,(struct inode *inode, unsigned long hashval)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.__insert_inode_hashasbuh1hhjubj)}(h h]h }(hjܚhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned long hashvalh](j+)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj+)}(hlongh]hlong}(hj,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj5)}(hhashvalh]hhashval}(hjHhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj]hhhjohMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjYhhhjohMubah}(h]jTah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjohMhjVhhubjc)}(hhh]h)}(h hash an inodeh]h hash an inode}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjohhubah}(h]h ]h"]h$]h&]uh1jbhjVhhhjohMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` unhashed inode ``unsigned long hashval`` unsigned long value used to locate this object in the inode_hashtable. 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.chMhjubj)}(hhh]h)}(hunhashed inodeh]hunhashed inode}(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 long hashval`` unsigned long value used to locate this object in the inode_hashtable. Add an inode to the inode hash for this superblock.h](j)}(h``unsigned long hashval``h]j)}(hjh]hunsigned long 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)}(hFunsigned long value used to locate this object in the inode_hashtable.h]hFunsigned long value used to locate this object in the inode_hashtable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh block_quote)}(h3Add an inode to the inode hash for this superblock.h]h)}(hjh]h3Add an inode to the inode hash for this superblock.}(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&]uh1jhj'hMhjubeh}(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](h __remove_inode_hash (C function)c.__remove_inode_hashhNtauh1hhjhhhNhNubh)}(hhh](j)}(h.void __remove_inode_hash (struct inode *inode)h]j)}(h-void __remove_inode_hash(struct inode *inode)h](j+)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjohhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\hhhjnhMubj/)}(h__remove_inode_hashh]j5)}(h__remove_inode_hashh]h__remove_inode_hash}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj}ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj\hhhjnhMubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.__remove_inode_hashasbuh1hhjubj)}(h h]h }(hjۜhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhj\hhhjnhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjXhhhjnhMubah}(h]jSah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjnhMhjUhhubjc)}(hhh]h)}(hremove an inode from the hashh]hremove an inode from the hash}(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&]uh1jbhjUhhhjnhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8jj8jjjuh1hhhhjhNhNubj)}(ha**Parameters** ``struct inode *inode`` inode to unhash Remove an inode from the superblock.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)}(hM``struct inode *inode`` inode to unhash Remove an inode from the superblock.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)}(hinode to unhashh]hinode to unhash}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjwubh)}(h$Remove an inode from the superblock.h]h$Remove an inode from the superblock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hevict_inodes (C function)c.evict_inodeshNtauh1hhjhhhNhNubh)}(hhh](j)}(h*void evict_inodes (struct super_block *sb)h]j)}(h)void evict_inodes(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hjʝhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjƝhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMbubj)}(h h]h }(hjٝhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjƝhhhj؝hMbubj/)}(h evict_inodesh]j5)}(h evict_inodesh]h evict_inodes}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjƝhhhj؝hMbubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jjsbc.evict_inodesasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjShhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hj`hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjƝhhhj؝hMbubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj؝hMbubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj؝hMbhjhhubjc)}(hhh]h)}(h+evict all evictable inodes for a superblockh]h+evict all evictable inodes for a superblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMZhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj؝hMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(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)}(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)}(h4``struct super_block *sb`` superblock to operate 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:29: ./fs/inode.chM[hjŞubj)}(hhh]h)}(hsuperblock to operate onh]hsuperblock to operate on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjŞubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjž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.chM]hjubh)}(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.chM]hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnew_inode (C function) c.new_inodehNtauh1hhjhhhNhNubh)}(hhh](j)}(h1struct inode * new_inode (struct super_block *sb)h]j)}(h/struct inode *new_inode(struct super_block *sb)h](j )}(hjzh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMuubj)}(h h]h }(hjYhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGhhhjXhMuubh)}(hhh]j5)}(hinodeh]hinode}(hjjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj)}j]j)}j new_inodesb c.new_inodeasbuh1hhjGhhhjXhMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGhhhjXhMuubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjGhhhjXhMuubj/)}(h new_inodeh]j5)}(hjh]h new_inode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjGhhhjXhMuubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjşhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjҟhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.new_inodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjGhhhjXhMuubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjChhhjXhMuubah}(h]j>ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjXhMuhj@hhubjc)}(hhh]h)}(hobtain an inodeh]hobtain an inode}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMjhjChhubah}(h]h ]h"]h$]h&]uh1jbhj@hhhjXhMuubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` superblock 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)}(hjhh]h Parameters}(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.chMnhjbubj)}(hhh]j)}(hX``struct super_block *sb`` superblock 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](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.chMqhjubj)}(hhh](h)}(h superblockh]h superblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMkhjubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMmhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hunlock_new_inode (C function)c.unlock_new_inodehNtauh1hhjhhhNhNubh)}(hhh](j)}(h+void unlock_new_inode (struct inode *inode)h]j)}(h*void unlock_new_inode(struct inode *inode)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hunlock_new_inodeh]j5)}(hunlock_new_inodeh]hunlock_new_inode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubh)}(hhh]j5)}(hinodeh]hinode}(hjKhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j)}jjsbc.unlock_new_inodeasbuh1hhj)ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubjX)}(hj[h]h*}(hjyhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj)ubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj%ubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h-clear the I_NEW state and wake up any waitersh]h-clear the I_NEW state and wake up any waiters}(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&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjȡjjȡjjjuh1hhhhjhNhNubj)}(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)}(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`` 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}(hj hhhNhNubah}(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)}(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.}(hjBhhhNhNubah}(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](h$lock_two_nondirectories (C function)c.lock_two_nondirectorieshNtauh1hhjhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjqhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjmhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmhhhjhMubj/)}(hlock_two_nondirectoriesh]j5)}(hlock_two_nondirectoriesh]hlock_two_nondirectories}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjmhhhjhMubj)}(h,(struct inode *inode1, struct inode *inode2)h](j)}(hstruct inode *inode1h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hj̢hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjɢubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj΢modnameN classnameNjj)}j]j)}jjsbc.lock_two_nondirectoriesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinode1h]hinode1}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct inode *inode2h](j )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hj>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]jc.lock_two_nondirectoriesasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinode2h]hinode2}(hjwhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjmhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjihhhjhMubah}(h]jdah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjfhhubjc)}(hhh]h)}(h+take two i_mutexes on non-directory objectsh]h+take two i_mutexes on non-directory objects}(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&]uh1jbhjfhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(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)}(hjãh]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 *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.chMhjܣubj)}(hhh]h)}(hfirst inode to lockh]hfirst inode to lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjܣubeh}(h]h ]h"]h$]h&]uh1jhjhMhj٣ubj)}(h.``struct inode *inode2`` second inode to lock h](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 lockh]hsecond inode to lock}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj٣ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjVh]h Description}(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.chMhjubh)}(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.}(hjlhhhNhNubah}(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](h&unlock_two_nondirectories (C function)c.unlock_two_nondirectorieshNtauh1hhjhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hunlock_two_nondirectoriesh]j5)}(hunlock_two_nondirectoriesh]hunlock_two_nondirectories}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h,(struct inode *inode1, struct inode *inode2)h](j)}(hstruct inode *inode1h](j )}(hjzh]hstruct}(hjؤhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjԤubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjԤubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.unlock_two_nondirectoriesasbuh1hhjԤubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjԤubjX)}(hj[h]h*}(hj$hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjԤubj5)}(hinode1h]hinode1}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjԤubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjФubj)}(hstruct inode *inode2h](j )}(hjzh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]jc.unlock_two_nondirectoriesasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjFubj5)}(hinode2h]hinode2}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjFubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjФubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h,release locks from lock_two_nondirectories()h]h,release locks from lock_two_nondirectories()}(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&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(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}(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.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)}(hjEh]hstruct inode *inode2}(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.chMhj?ubj)}(hhh]h)}(hsecond inode to unlockh]hsecond inode to unlock}(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&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinode_insert5 (C function)c.inode_insert5hNtauh1hhjhhhNhNubh)}(hhh](j)}(hstruct inode * inode_insert5 (struct inode *inode, unsigned long hashval, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *data)h]j)}(hstruct inode *inode_insert5(struct inode *inode, unsigned long hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}j inode_insert5sbc.inode_insert5asbuh1hhjhhhjhMubj)}(h h]h }(hjߦhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhMubj/)}(h inode_insert5h]j5)}(hjܦh]h inode_insert5}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h}(struct inode *inode, unsigned long hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hj7hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]jڦc.inode_insert5asbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjchhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjphhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned long hashvalh](j+)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hhashvalh]hhashval}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h!int (*test)(struct inode*, void*)h](j+)}(hinth]hint}(hjڧhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj֧ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj֧ubjX)}(h(h]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj֧ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj֧ubj5)}(htesth]htest}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj֧ubjX)}(h)h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj֧ubjX)}(hjh]h(}(hj-hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj֧ubj )}(hjzh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj֧ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj֧ubh)}(hhh]j5)}(hinodeh]hinode}(hjXhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]jڦc.inode_insert5asbuh1hhj֧ubjX)}(hj[h]h*}(hjvhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj֧ubjX)}(h,h]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj֧ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj֧ubj+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj֧ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj֧ubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj֧ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int (*set)(struct inode*, void*)h](j+)}(hinth]hint}(hjҨhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjΨubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjΨubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjΨubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjΨubj5)}(hseth]hset}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjΨubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjΨubjX)}(hjh]h(}(hj#hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjΨubj )}(hjzh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjΨubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjΨubh)}(hhh]j5)}(hinodeh]hinode}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]jڦc.inode_insert5asbuh1hhjΨubjX)}(hj[h]h*}(hjlhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjΨubjX)}(hjh]h,}(hjyhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjΨubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjΨubj+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjΨubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjΨubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjΨubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *datah](j+)}(hvoidh]hvoid}(hjǩhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjéubj)}(h h]h }(hjթhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjéubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjéubj5)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjéubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct inode *inode`` pre-allocated inode to use for insert to cache ``unsigned long 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)}(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.chMhj6ubj)}(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&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjUubj)}(hhh]h)}(h.pre-allocated inode to use for insert to cacheh]h.pre-allocated inode to use for insert to cache}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjRubj)}(hC``unsigned long hashval`` hash value (usually inode number) to get h](j)}(h``unsigned long hashval``h]j)}(hjh]hunsigned long 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 geth]h(hash value (usually inode number) to get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubj)}(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.chMhjǪubj)}(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&]uh1jhjǪubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubj)}(hC``void *data`` opaque data pointer to pass to **test** and **set** h](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)}(h3opaque data pointer to pass to **test** and **set**h](hopaque data pointer to pass to }(hjXhhhNhNubj)}(h**test**h]htest}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh and }(hjXhhhNhNubj)}(h**set**h]hset}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(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.chMhj6ubh)}(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 }(hjhhhNhNubj)}(h **hashval**h]hhashval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**data**h]hdata}(hjʫhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj6ubh)}(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.chMhj6ubh)}(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}(hj hhhNhNubah}(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.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](higet5_locked (C function)c.iget5_lockedhNtauh1hhjhhhNhNubh)}(hhh](j)}(hstruct inode * iget5_locked (struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *data)h]j)}(hstruct inode *iget5_locked(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j )}(hjzh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMEubj)}(h h]h }(hjShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAhhhjRhMEubh)}(hhh]j5)}(hinodeh]hinode}(hjdhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j)}j iget5_lockedsbc.iget5_lockedasbuh1hhjAhhhjRhMEubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAhhhjRhMEubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjAhhhjRhMEubj/)}(h iget5_lockedh]j5)}(hjh]h iget5_locked}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjAhhhjRhMEubj)}(h(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj̬hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjݬhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjڬubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj߬modnameN classnameNjj)}j]jc.iget5_lockedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned long hashvalh](j+)}(hunsignedh]hunsigned}(hj/hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj+ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+ubj+)}(hlongh]hlong}(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj+ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+ubj5)}(hhashvalh]hhashval}(hjghhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h!int (*test)(struct inode*, void*)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubj5)}(htesth]htest}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubjX)}(hj!h]h)}(hjĭhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubjX)}(hjh]h(}(hjѭhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubj )}(hjzh]hstruct}(hjޭhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.iget5_lockedasbuh1hhj|ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubjX)}(hjh]h,}(hj'hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubj+)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj|ubjX)}(hj[h]h*}(hjPhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubjX)}(hj!h]h)}(hj]hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int (*set)(struct inode*, void*)h](j+)}(hinth]hint}(hjuhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjqubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubj5)}(hseth]hset}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjqubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubjX)}(hjh]h(}(hjƮhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubj )}(hjzh]hstruct}(hjӮhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjqubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.iget5_lockedasbuh1hhjqubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubjX)}(hjh]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjqubj+)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjqubjX)}(hj[h]h*}(hjEhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubjX)}(hj!h]h)}(hjRhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *datah](j+)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjfubj)}(h h]h }(hjxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjfubj5)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjAhhhjRhMEubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj=hhhjRhMEubah}(h]j8ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjRhMEhj:hhubjc)}(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.chM2hjhhubah}(h]h ]h"]h$]h&]uh1jbhj:hhhjRhMEubeh}(h]h ](jfunctioneh"]h$]h&]jjjjկjjկjjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system ``unsigned long 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)}(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:29: ./fs/inode.chM6hjٯ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.chM3hjubj)}(hhh]h)}(hsuper block of file systemh]hsuper block of file system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(hC``unsigned long hashval`` hash value (usually inode number) to get h](j)}(h``unsigned long hashval``h]j)}(hj7h]hunsigned long hashval}(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.chM4hj1ubj)}(hhh]h)}(h(hash value (usually inode number) to geth]h(hash value (usually inode number) to get}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM4hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhM4hjubj)}(hU``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes h](j)}(h'``int (*test)(struct inode *, void *)``h]j)}(hjph]h#int (*test)(struct inode *, void *)}(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.chM5hjjubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubj)}(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.chM6hjubj)}(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&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(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.chM7hjܰubj)}(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&]uh1hhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjܰubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubeh}(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.chM9hjٯ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 }(hjShhhNhNubj)}(h **hashval**h]hhashval}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh and }(hjShhhNhNubj)}(h**data**h]hdata}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh 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.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM9hjٯ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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM>hjٯubh)}(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.chMBhjٯubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](higet5_locked_rcu (C function)c.iget5_locked_rcuhNtauh1hhjhhhNhNubh)}(hhh](j)}(hstruct inode * iget5_locked_rcu (struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *data)h]j)}(hstruct inode *iget5_locked_rcu(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMcubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMcubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jiget5_locked_rcusbc.iget5_locked_rcuasbuh1hhjhhhjhMcubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMcubjX)}(hj[h]h*}(hj6hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhMcubj/)}(higet5_locked_rcuh]j5)}(hj%h]higet5_locked_rcu}(hjGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMcubj)}(h(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), int (*set)(struct inode*, void*), void *data)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j#c.iget5_locked_rcuasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj^ubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubj)}(hunsigned long hashvalh](j+)}(hunsignedh]hunsigned}(hjҲhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjβubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjβubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjβubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjβubj5)}(hhashvalh]hhashval}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjβubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubj)}(h!int (*test)(struct inode*, void*)h](j+)}(hinth]hint}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hjh]h(}(hj?hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj[h]h*}(hjLhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htesth]htest}(hjYhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubjX)}(hj!h]h)}(hjghhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h(}(hjthhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j#c.iget5_locked_rcuasbuh1hhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h,}(hjʳhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj)}(h h]h }(hj׳hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubj)}(h int (*set)(struct inode*, void*)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hjh]h(}(hj4hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj[h]h*}(hjAhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hseth]hset}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubjX)}(hj!h]h)}(hj\hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h(}(hjihhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj )}(hjzh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j#c.iget5_locked_rcuasbuh1hhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj)}(h h]h }(hj̴hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hvoidh]hvoid}(hjڴhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubj)}(h void *datah](j+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hj)hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hdatah]hdata}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMcubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMcubah}(h]j۱ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMchjݱhhubjc)}(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.chMYhj]hhubah}(h]h ]h"]h$]h&]uh1jbhjݱhhhjhMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system ``unsigned long 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}(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|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.chMZhjubj)}(hhh]h)}(hsuper block of file systemh]hsuper block of file system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjubj)}(hC``unsigned long hashval`` hash value (usually inode number) to get h](j)}(h``unsigned long hashval``h]j)}(hjڵh]hunsigned long 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.chM[hjԵ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&]uh1hhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjԵubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(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.chM\hj ubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(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\hjubj)}(hV``int (*set)(struct inode *, void *)`` callback used to initialize a new struct inode h](j)}(h&``int (*set)(struct inode *, void *)``h]j)}(hjLh]h"int (*set)(struct inode *, void *)}(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.chM]hjFubj)}(hhh]h)}(h.callback used to initialize a new struct inodeh]h.callback used to initialize a new struct inode}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahM]hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM]hjubj)}(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.chM^hjubj)}(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&]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)}(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)}(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.chM`hj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](higet_locked (C function) c.iget_lockedhNtauh1hhjhhhNhNubh)}(hhh](j)}(hFstruct inode * iget_locked (struct super_block *sb, unsigned long ino)h]j)}(hDstruct inode *iget_locked(struct super_block *sb, unsigned long ino)h](j )}(hjzh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjEhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj3hhhjDhMubh)}(hhh]j5)}(hinodeh]hinode}(hjVhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j)}j iget_lockedsb c.iget_lockedasbuh1hhj3hhhjDhMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj3hhhjDhMubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj3hhhjDhMubj/)}(h iget_lockedh]j5)}(hjth]h iget_locked}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj3hhhjDhMubj)}(h+(struct super_block *sb, unsigned long ino)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjϷhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj̷ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjѷmodnameN classnameNjj)}j]jr c.iget_lockedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned long inoh](j+)}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hlongh]hlong}(hj=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hinoh]hino}(hjYhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj3hhhjDhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj/hhhjDhMubah}(h]j*ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjDhMhj,hhubjc)}(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&]uh1jbhj,hhhjDhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(hX#**Parameters** ``struct super_block *sb`` super block of file system ``unsigned long 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)}(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)}(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.chMhjubj)}(hhh]h)}(hsuper block of file systemh]hsuper block of file system}(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 long ino`` inode number to get h](j)}(h``unsigned long ino``h]j)}(hjh]hunsigned long 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&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj8h]h Description}(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.chMhjubh)}(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 }(hjNhhhNhNubj)}(h**ino**h]hino}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh 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.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(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().}(hjohhhNhNubah}(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](hiunique (C function) c.iuniquehNtauh1hhjhhhNhNubh)}(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]j5)}(hino_th]hino_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jiuniquesb c.iuniqueasbuh1hhjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjùhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj¹hMubj/)}(hiuniqueh]j5)}(hjh]hiunique}(hjչhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjѹubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj¹hMubj)}(h,(struct super_block *sb, ino_t max_reserved)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.iuniqueasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj:hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hino_t max_reservedh](h)}(hhh]j5)}(hino_th]hino_t}(hjchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j c.iuniqueasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\ubj5)}(h max_reservedh]h max_reserved}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj\ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj¹hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj¹hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj¹hMhjhhubjc)}(hhh]h)}(hget a unique inode numberh]hget a unique inode number}(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&]uh1jbhjhhhj¹hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjѺjjѺjjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` superblock ``ino_t max_reserved`` highest reserved inode number 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)}(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 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)}(hX``ino_t max_reserved`` highest reserved inode number 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](j)}(h``ino_t max_reserved``h]j)}(hj3h]hino_t max_reserved}(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)}(hhighest reserved inode numberh]hhighest reserved inode number}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjIubh)}(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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjIubh)}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubeh}(h]h ]h"]h$]h&]uh1jhjպubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hilookup5_nowait (C function)c.ilookup5_nowaithNtauh1hhjhhhNhNubh)}(hhh](j)}(hstruct inode * ilookup5_nowait (struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), void *data)h]j)}(h{struct inode *ilookup5_nowait(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), void *data)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM&ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM&ubh)}(hhh]j5)}(hinodeh]hinode}(hjʻhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjǻubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj̻modnameN classnameNjj)}j]j)}jilookup5_nowaitsbc.ilookup5_nowaitasbuh1hhjhhhjhM&ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM&ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhM&ubj/)}(hilookup5_nowaith]j5)}(hjh]hilookup5_nowait}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM&ubj)}(h^(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), void *data)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjChhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]jc.ilookup5_nowaitasbuh1hhj!ubj)}(h h]h }(hjahhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!ubjX)}(hj[h]h*}(hjohhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj!ubj5)}(hsbh]hsb}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned long hashvalh](j+)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hhashvalh]hhashval}(hjͼhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h!int (*test)(struct inode*, void*)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htesth]htest}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubjX)}(hj!h]h)}(hj*hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h(}(hj7hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj )}(hjzh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjbhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]jc.ilookup5_nowaitasbuh1hhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj!h]h)}(hjýhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *datah](j+)}(hvoidh]hvoid}(hj۽hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj׽ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj׽ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj׽ubj5)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj׽ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM&ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM&ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM&hjhhubjc)}(hhh]h)}(h&search for an inode in the inode cacheh]h&search for an inode in the inode cache}(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&]uh1jbhjhhhjhM&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system to search ``unsigned long 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. If the inode is in the cache, the inode is returned with an incremented reference count. Note2: **test** is called with the inode_hash_lock held, so can't sleep. **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.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(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.chMhjJubj)}(hhh](j)}(h@``struct super_block *sb`` super block of file system to search h](j)}(h``struct super_block *sb``h]j)}(hjoh]hstruct super_block *sb}(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)}(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&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(hJ``unsigned long hashval`` hash value (usually inode number) to search for h](j)}(h``unsigned long hashval``h]j)}(hjh]hunsigned long 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&]uh1jhjhMhjfubj)}(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&]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,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&]uh1jhj۾ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(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 }(hj3hhhNhNubj)}(h**test**h]htest}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjfubeh}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjJubh)}(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 }(hjyhhhNhNubj)}(h **hashval**h]hhashval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh and }(hjyhhhNhNubj)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubhm in the inode cache. If the inode is in the cache, the inode is returned with an incremented reference count.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjJubh)}(hHNote2: **test** is called with the inode_hash_lock held, so can't sleep.h](hNote2: }(hjhhhNhNubj)}(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.chM!hjJubh)}(h**Note**h]j)}(hjϿh]hNote}(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#hjJubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM!hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hilookup5 (C function) c.ilookup5hNtauh1hhjhhhNhNubh)}(hhh](j)}(hxstruct inode * ilookup5 (struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), void *data)h]j)}(htstruct inode *ilookup5(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), void *data)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMEubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj!hMEubh)}(hhh]j5)}(hinodeh]hinode}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j)}jilookup5sb c.ilookup5asbuh1hhjhhhj!hMEubj)}(h h]h }(hjThhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj!hMEubjX)}(hj[h]h*}(hjbhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhj!hMEubj/)}(hilookup5h]j5)}(hjQh]hilookup5}(hjshhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjoubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj!hMEubj)}(h^(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), void *data)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jO c.ilookup5asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh.]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned long hashvalh](j+)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hhashvalh]hhashval}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h!int (*test)(struct inode*, void*)h](j+)}(hinth]hint}(hjOhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKubj)}(h h]h }(hj]hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubjX)}(hjh]h(}(hjkhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubjX)}(hj[h]h*}(hjxhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubj5)}(htesth]htest}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jO c.ilookup5asbuh1hhjKubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubjX)}(hjh]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubj+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubjX)}(hj!h]h)}(hj,hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjKubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *datah](j+)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj@ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj@ubjX)}(hj[h]h*}(hj`hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj@ubj5)}(hdatah]hdata}(hjmhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj!hMEubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj hhhj!hMEubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj!hMEhj hhubjc)}(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.chM5hjhhubah}(h]h ]h"]h$]h&]uh1jbhj hhhj!hMEubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system to search ``unsigned long 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)}(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)}(hJ``unsigned long hashval`` hash value (usually inode number) to search for h](j)}(h``unsigned long hashval``h]j)}(hjh]hunsigned long 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.chM7hj ubj)}(hhh]h)}(h/hash value (usually inode number) to search forh]h/hash value (usually inode number) to search for}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hM7hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM7hjubj)}(hU``int (*test)(struct inode *, void *)`` callback used for comparisons between inodes h](j)}(h'``int (*test)(struct inode *, void *)``h]j)}(hjJh]h#int (*test)(struct inode *, void *)}(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.chM8hjDubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM8hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hM8hjubj)}(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.chM9hj}ubj)}(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&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubeh}(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)}(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 }(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 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM;hjubh)}(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.chM@hjubh)}(h**Note**h]j)}(hj&h]hNote}(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.chMChjubh)}(hA**test** is called with the inode_hash_lock held, so can't sleep.h](j)}(h**test**h]htest}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh; is called with the inode_hash_lock held, so can’t sleep.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMChjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hilookup (C function) c.ilookuphNtauh1hhjhhhNhNubh)}(hhh](j)}(hBstruct inode * ilookup (struct super_block *sb, unsigned long ino)h]j)}(h@struct inode *ilookup(struct super_block *sb, unsigned long ino)h](j )}(hjzh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjuhhhjhM^ubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jilookupsb c.ilookupasbuh1hhjuhhhjhM^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjuhhhjhM^ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjuhhhjhM^ubj/)}(hilookuph]j5)}(hjh]hilookup}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjuhhhjhM^ubj)}(h+(struct super_block *sb, unsigned long ino)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.ilookupasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj=hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned long inoh](j+)}(hunsignedh]hunsigned}(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj_ubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj_ubj5)}(hinoh]hino}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjuhhhjhM^ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjqhhhjhM^ubah}(h]jlah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM^hjnhhubjc)}(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.chMWhjhhubah}(h]h ]h"]h$]h&]uh1jbhjnhhhjhM^ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(hX%**Parameters** ``struct super_block *sb`` super block of file system to search ``unsigned long 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)}(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 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.chMXhjubj)}(hhh]h)}(h$super block of file system to searchh]h$super block of file system to search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h1``unsigned long ino`` inode number to search for h](j)}(h``unsigned long ino``h]j)}(hj?h]hunsigned long ino}(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.chMYhj9ubj)}(hhh]h)}(hinode number to search forh]hinode number to search for}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMYhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMYhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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.chM[hjubh)}(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.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfind_inode_nowait (C function)c.find_inode_nowaithNtauh1hhjhhhNhNubh)}(hhh](j)}(hstruct inode * find_inode_nowait (struct super_block *sb, unsigned long hashval, int (*match)(struct inode *, unsigned long, void *), void *data)h]j)}(hstruct inode *find_inode_nowait(struct super_block *sb, unsigned long hashval, int (*match)(struct inode*, unsigned long, void*), void *data)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jfind_inode_nowaitsbc.find_inode_nowaitasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhMubj/)}(hfind_inode_nowaith]j5)}(hjh]hfind_inode_nowait}(hj0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hn(struct super_block *sb, unsigned long hashval, int (*match)(struct inode*, unsigned long, void*), void *data)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj)}(h h]h }(hjXhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGubh)}(hhh]j5)}(h super_blockh]h super_block}(hjihhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j c.find_inode_nowaitasbuh1hhjGubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjGubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjGubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjCubj)}(hunsigned long hashvalh](j+)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hhashvalh]hhashval}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjCubj)}(h1int (*match)(struct inode*, unsigned long, void*)h](j+)}(hinth]hint}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hjh]h(}(hj(hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj[h]h*}(hj5hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hmatchh]hmatch}(hjBhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubjX)}(hj!h]h)}(hjPhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h(}(hj]hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj )}(hjzh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjwhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.find_inode_nowaitasbuh1hhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjX)}(hjh]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjX)}(hj[h]h*}(hj!hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj!h]h)}(hj.hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjCubj)}(h void *datah](j+)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjBubj)}(h h]h }(hjThhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjBubjX)}(hj[h]h*}(hjbhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjBubj5)}(hdatah]hdata}(hjohhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjBubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjCubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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.chMshjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` super block of file system to search ``unsigned long hashval`` hash value (usually inode number) to search for ``int (*match)(struct inode *, unsigned long, 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.chMwhjubj)}(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.chMthjubj)}(hhh]h)}(h$super block of file system to searchh]h$super block of file system to search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(hJ``unsigned long hashval`` hash value (usually inode number) to search for h](j)}(h``unsigned long hashval``h]j)}(hjh]hunsigned long 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.chMuhj ubj)}(hhh]h)}(h/hash value (usually inode number) to search forh]h/hash value (usually inode number) to search for}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMuhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMuhjubj)}(he``int (*match)(struct inode *, unsigned long, void *)`` callback used for comparisons between inodes h](j)}(h7``int (*match)(struct inode *, unsigned long, void *)``h]j)}(hjLh]h3int (*match)(struct inode *, unsigned long, void *)}(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.chMvhjFubj)}(hhh]h)}(h,callback used for comparisons between inodesh]h,callback used for comparisons between inodes}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMvhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMvhjubj)}(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.chMwhjubj)}(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&]uh1hhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(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.chMyhjubh)}(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 }(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 **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubht will return 0 if the inode does not match, 1 if the inode does match, and -1 if the search should be stopped. The }(hjhhhNhNubj)}(h **match**h]hmatch}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMyhjubh)}(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 }(hj;hhhNhNubj)}(h **match**h]hmatch}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh, funtion must be very carefully implemented.}(hj;hhhNhNubeh}(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](hfind_inode_rcu (C function)c.find_inode_rcuhNtauh1hhjhhhNhNubh)}(hhh](j)}(h~struct inode * find_inode_rcu (struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), void *data)h]j)}(hzstruct inode *find_inode_rcu(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), void *data)h](j )}(hjzh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxhhhjhMubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jfind_inode_rcusbc.find_inode_rcuasbuh1hhjxhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxhhhjhMubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxhhhjhMubj/)}(hfind_inode_rcuh]j5)}(hjh]hfind_inode_rcu}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjxhhhjhMubj)}(h^(struct super_block *sb, unsigned long hashval, int (*test)(struct inode*, void*), void *data)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.find_inode_rcuasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj@hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hunsigned long hashvalh](j+)}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubj)}(h h]h }(hjthhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjbubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjbubj5)}(hhashvalh]hhashval}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjbubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h!int (*test)(struct inode*, void*)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htesth]htest}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]jc.find_inode_rcuasbuh1hhjubjX)}(hj[h]h*}(hjQhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h,}(hj^hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *datah](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjxhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjthhhjhMubah}(h]joah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjqhhubjc)}(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&]uh1jbhjqhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(hXD**Parameters** ``struct super_block *sb`` Super block of file system to search ``unsigned long 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)}(hj!h]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 super_block *sb`` Super block of file system to search h](j)}(h``struct super_block *sb``h]j)}(hj@h]hstruct super_block *sb}(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.chMhj:ubj)}(hhh]h)}(h$Super block of file system to searchh]h$Super block of file system to search}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubj)}(h&``unsigned long hashval`` Key to hash h](j)}(h``unsigned long hashval``h]j)}(hjyh]hunsigned long hashval}(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.chMhjsubj)}(hhh]h)}(h Key to hashh]h Key to hash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubj)}(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&]uh1jhjhMhj7ubj)}(h&``void *data`` Data for test function 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)}(hData for test functionh]hData for test function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubeh}(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)}(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 }(hj<hhhNhNubj)}(h **hashval**h]hhashval}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh and }(hj<hhhNhNubj)}(h**data**h]hdata}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh/ in the inode cache, where the helper function }(hj<hhhNhNubj)}(h**test**h]htest}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubhB will return 0 if the inode does not match and 1 if it does. The }(hj<hhhNhNubj)}(h**test**h]htest}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(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.chMhjubh)}(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.chMhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"find_inode_by_ino_rcu (C function)c.find_inode_by_ino_rcuhNtauh1hhjhhhNhNubh)}(hhh](j)}(hPstruct inode * find_inode_by_ino_rcu (struct super_block *sb, unsigned long ino)h]j)}(hNstruct inode *find_inode_by_ino_rcu(struct super_block *sb, unsigned long ino)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j5)}(hinodeh]hinode}(hj#hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j)}jfind_inode_by_ino_rcusbc.find_inode_by_ino_rcuasbuh1hhjhhhjhMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubjX)}(hj[h]h*}(hjRhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhMubj/)}(hfind_inode_by_ino_rcuh]j5)}(hjAh]hfind_inode_by_ino_rcu}(hjchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h+(struct super_block *sb, unsigned long ino)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j?c.find_inode_by_ino_rcuasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjzubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjzubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjvubj)}(hunsigned long inoh](j+)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hinoh]hino}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjvubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h Find an inode in the inode cacheh]h Find an inode in the inode cache}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjMhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1hhhhjhNhNubj)}(hX**Parameters** ``struct super_block *sb`` Super block of file system to search ``unsigned long 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)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjlubj)}(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)}(h0``unsigned long ino`` The inode number to match h](j)}(h``unsigned long ino``h]j)}(hjh]hunsigned long 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)}(hThe inode number to matchh]hThe inode number to match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjlubh)}(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.chMhjlubh)}(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}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**data**h]hdata}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ in the inode cache, where the helper function }(hjhhhNhNubj)}(h**test**h]htest}(hjGhhhNhNubah}(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}(hjYhhhNhNubah}(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.chMhjlubh)}(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 }(hjrhhhNhNubj)}(h**test**h]htest}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh( function returned 1 and NULL otherwise.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjlubh)}(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.chMhjlubh)}(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.chMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiput (C function)c.iputhNtauh1hhjhhhNhNubh)}(hhh](j)}(hvoid iput (struct inode *inode)h]j)}(hvoid iput(struct inode *inode)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMvubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMvubj/)}(hiputh]j5)}(hiputh]hiput}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMvubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hj>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j)}jjsbc.iputasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjlhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjyhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMvubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMvubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMvhjhhubjc)}(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.chMnhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMvubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(h**Parameters** ``struct inode *inode`` inode to put 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.chMrhjubj)}(hhh]j)}(h``struct inode *inode`` inode to put 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](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.chMshjubj)}(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.chMohjubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMqhjubh)}(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.chMthjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hbmap (C function)c.bmaphNtauh1hhjhhhNhNubh)}(hhh](j)}(h/int bmap (struct inode *inode, sector_t *block)h]j)}(h.int bmap(struct inode *inode, sector_t *block)h](j+)}(hinth]hint}(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjXhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjXhhhjjhMubj/)}(hbmaph]j5)}(hbmaph]hbmap}(hj}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjXhhhjjhMubj)}(h&(struct inode *inode, sector_t *block)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.bmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hsector_t *blockh](h)}(hhh]j5)}(hsector_th]hsector_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.bmapasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj:hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hblockh]hblock}(hjGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjXhhhjjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjThhhjjhMubah}(h]jOah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjjhMhjQhhubjc)}(hhh]h)}(hfind a block number in a fileh]hfind a block number in a file}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jbhjQhhhjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(hXD**Parameters** ``struct inode *inode`` inode owning the block number being requested ``sector_t *block`` pointer containing the block to find 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)}(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)}(hF``struct inode *inode`` inode owning the block number being requested 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)}(h-inode owning the block number being requestedh]h-inode owning the block number being requested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hX``sector_t *block`` pointer containing the block to find 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](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.chMhjubj)}(hhh](h)}(h$pointer containing the block to findh]h$pointer containing the block to find}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjubh)}(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.chMhjubh)}(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 }(hjFhhhNhNubj)}(h ``*block``h]h*block}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh is also set to 0.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(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](h$inode_update_timestamps (C function)c.inode_update_timestampshNtauh1hhjhhhNhNubh)}(hhh](j)}(hah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjXhMhj@hhubjc)}(hhh]h)}(h&Return FS time (possibly fine-grained)h]h&Return FS time (possibly fine-grained)}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jbhj@hhhjXhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1hhhhjhNhNubj)}(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)}(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:29: ./fs/inode.chMhjUubj)}(hhh]j)}(h``struct inode *inode`` inode. h](j)}(h``struct inode *inode``h]j)}(hjzh]hstruct inode *inode}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMhjtubj)}(hhh]h)}(hinode.h]hinode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubah}(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:29: ./fs/inode.chMhjUubh)}(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.chMhjUubh)}(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.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfile_update_time (C function)c.file_update_timehNtauh1hhjhhhNhNubh)}(hhh](j)}(h(int file_update_time (struct file *file)h]j)}(h'int file_update_time(struct file *file)h](j+)}(hinth]hint}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM ubj/)}(hfile_update_timeh]j5)}(hfile_update_timeh]hfile_update_time}(hj*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM ubj)}(h(struct file *file)h]j)}(hstruct file *fileh](j )}(hjzh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjBubh)}(hhh]j5)}(hfileh]hfile}(hjdhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j)}jj,sbc.file_update_timeasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjBubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjBubj5)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjBubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj>ubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM hjhhubjc)}(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&]uh1jbhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(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)}(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 accessed h](j)}(h``struct file *file``h]j)}(hj h]hstruct file *file}(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.chM hjubj)}(hhh]h)}(h file accessedh]h file accessed}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjEh]h Description}(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)}(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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjubh)}(h **Return**h]j)}(hjlh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(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](hfile_modified (C function)c.file_modifiedhNtauh1hhjhhhNhNubh)}(hhh](j)}(h%int file_modified (struct file *file)h]j)}(h$int file_modified(struct file *file)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMV ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMV ubj/)}(h file_modifiedh]j5)}(h file_modifiedh]h file_modified}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMV ubj)}(h(struct file *file)h]j)}(hstruct file *fileh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hfileh]hfile}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.file_modifiedasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj:hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hfileh]hfile}(hjGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMV ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMV ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMV hjhhubjc)}(hhh]h)}(h1handle mandated vfs changes when modifying a fileh]h1handle mandated vfs changes when modifying a file}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chML hjnhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMV ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(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.chMP 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.chMM hjubj)}(hhh]h)}(hfile that was modifiedh]hfile that was modified}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMM 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.chMO 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMO hjubh)}(h **Context**h]j)}(hjh]hContext}(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 hjubh)}(h'Caller must hold the file's inode lock.h]h)Caller must hold the file’s inode lock.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMR hjubh)}(h **Return**h]j)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMT hjubh)}(h(0 on success, negative errno on failure.h]h(0 on success, negative errno on failure.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMT hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkiocb_modified (C function)c.kiocb_modifiedhNtauh1hhjhhhNhNubh)}(hhh](j)}(h'int kiocb_modified (struct kiocb *iocb)h]j)}(h&int kiocb_modified(struct kiocb *iocb)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj|hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMg ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|hhhjhMg ubj/)}(hkiocb_modifiedh]j5)}(hkiocb_modifiedh]hkiocb_modified}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj|hhhjhMg ubj)}(h(struct kiocb *iocb)h]j)}(hstruct kiocb *iocbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hkiocbh]hkiocb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.kiocb_modifiedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hiocbh]hiocb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhj|hhhjhMg ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjxhhhjhMg ubah}(h]jsah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMg hjuhhubjc)}(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] hj=hhubah}(h]h ]h"]h$]h&]uh1jbhjuhhhjhMg ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1hhhhjhNhNubj)}(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)}(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.chMa hj\ubj)}(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^ hj{ubj)}(hhh]h)}(hiocb that was modifiedh]hiocb that was modified}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM^ hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhM^ hjxubah}(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.chM` hj\ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM` hj\ubh)}(h **Context**h]j)}(hjh]hContext}(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 hj\ubh)}(h'Caller must hold the file's inode lock.h]h)Caller must hold the file’s inode lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMc hj\ubh)}(h **Return**h]j)}(hj h]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.chMe hj\ubh)}(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.chMe hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinode_init_owner (C function)c.inode_init_ownerhNtauh1hhjhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKhhhj]hM ubj/)}(hinode_init_ownerh]j5)}(hinode_init_ownerh]hinode_init_owner}(hjphhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjlubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjKhhhj]hM ubj)}(hU(struct mnt_idmap *idmap, struct inode *inode, const struct inode *dir, umode_t mode)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjrsbc.inode_init_ownerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.inode_init_ownerasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjHhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjUhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hconst struct inode *dirh](j )}(hjh]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.inode_init_ownerasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjjubj5)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.inode_init_ownerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hmodeh]hmode}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjKhhhj]hM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjGhhhj]hM ubah}(h]jBah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj]hM hjDhhubjc)}(hhh]h)}(hh]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:29: ./fs/inode.chM hj8ubj)}(hhh]h)}(hmode of the new inodeh]hmode of the new inode}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM hjubeh}(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:29: ./fs/inode.chM hjnubh)}(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 hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#inode_owner_or_capable (C function)c.inode_owner_or_capablehNtauh1hhjhhhNhNubh)}(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](j+)}(hj.h]hbool}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM ubj/)}(hinode_owner_or_capableh]j5)}(hinode_owner_or_capableh]hinode_owner_or_capable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM ubj)}(h4(struct mnt_idmap *idmap, const struct inode *inode)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j)}jjsbc.inode_owner_or_capableasbuh1hhj,ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubjX)}(hj[h]h*}(hj|hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj,ubj5)}(hidmaph]hidmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubj)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jjc.inode_owner_or_capableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM hjhhubjc)}(hhh]h)}(h'check current task permissions to inodeh]h'check current task permissions to inode}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hj;hhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1hhhhjhNhNubj)}(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)}(hj`h]h Parameters}(hjbhhhNhNubah}(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 hjZubj)}(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&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjyubj)}(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&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM hjvubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjvubeh}(h]h ]h"]h$]h&]uh1jhjZubh)}(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 hjZubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjZubh)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This function will then take care to map the inode according to }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hj2hhhNhNubah}(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}(hjDhhhNhNubah}(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 hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinode_dio_wait (C function)c.inode_dio_waithNtauh1hhjhhhNhNubh)}(hhh](j)}(h)void inode_dio_wait (struct inode *inode)h]j)}(h(void inode_dio_wait(struct inode *inode)h](j+)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM< ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyhhhjhM< ubj/)}(hinode_dio_waith]j5)}(hinode_dio_waith]hinode_dio_wait}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjyhhhjhM< ubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.inode_dio_waitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjyhhhjhM< ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjuhhhjhM< ubah}(h]jpah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM< hjrhhubjc)}(hhh]h)}(h+wait for outstanding DIO requests to finishh]h+wait for outstanding DIO requests to finish}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM3 hj:hhubah}(h]h ]h"]h$]h&]uh1jbhjrhhhjhM< ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1hhhhjhNhNubj)}(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_mutex.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:29: ./fs/inode.chM7 hjYubj)}(hhh]j)}(h*``struct inode *inode`` inode to wait for h](j)}(h``struct inode *inode``h]j)}(hj~h]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.chM4 hjxubj)}(hhh]h)}(hinode to wait forh]hinode to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4 hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhM4 hjuubah}(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&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM6 hjYubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM6 hjYubh)}(hlMust be called under a lock that serializes taking new references to i_dio_count, usually by inode->i_mutex.h]hlMust be called under a lock that serializes taking new references to i_dio_count, usually by inode->i_mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM9 hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimestamp_truncate (C function)c.timestamp_truncatehNtauh1hhjhhhNhNubh)}(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 )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMz ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj hhhjhMz ubh)}(hhh]j5)}(h timespec64h]h timespec64}(hj,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j)}jtimestamp_truncatesbc.timestamp_truncateasbuh1hhj hhhjhMz ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj hhhjhMz ubj/)}(htimestamp_truncateh]j5)}(hjJh]htimestamp_truncate}(hj_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj hhhjhMz ubj)}(h*(struct timespec64 t, struct inode *inode)h](j)}(hstruct timespec64 th](j )}(hjzh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjvubh)}(hhh]j5)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jHc.timestamp_truncateasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjvubj5)}(hth]ht}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjvubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjrubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jHc.timestamp_truncateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj'hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjrubeh}(h]h ]h"]h$]h&]jLjMuh1jhj hhhjhMz ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMz ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMz hjhhubjc)}(hhh]h)}(h"Truncate timespec to a granularityh]h"Truncate timespec to a granularity}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMr hj[hhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMz ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1hhhhjhNhNubj)}(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&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMv hjzubj)}(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.chMs hjubj)}(hhh]h)}(hTimespech]hTimespec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMs hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMs 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.chMt hjubj)}(hhh]h)}(hinode being updatedh]hinode being updated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMt hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMt hjubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(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.chMv hjzubh)}(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).}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chMv hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$inode_set_ctime_current (C function)c.inode_set_ctime_currenthNtauh1hhjhhhNhNubh)}(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 )}(hjzh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjThhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjThhhjehM ubh)}(hhh]j5)}(h timespec64h]h timespec64}(hjwhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j)}jinode_set_ctime_currentsbc.inode_set_ctime_currentasbuh1hhjThhhjehM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjThhhjehM ubj/)}(hinode_set_ctime_currenth]j5)}(hjh]hinode_set_ctime_current}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjThhhjehM ubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.inode_set_ctime_currentasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjThhhjehM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjPhhhjehM ubah}(h]jKah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjehM hjMhhubjc)}(hhh]h)}(hset the ctime to current_timeh]hset the ctime to current_time}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjChhubah}(h]h ]h"]h$]h&]uh1jbhjMhhhjehM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1hhhhjhNhNubj)}(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)}(hjhh]h Parameters}(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.chM hjbubj)}(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.chM hjubj)}(hhh]h)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubh)}(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 hjbubh)}(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.chM hjbubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjbubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"inode_set_ctime_deleg (C function)c.inode_set_ctime_deleghNtauh1hhjhhhNhNubh)}(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 )}(hjzh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!hhhj2hM ubh)}(hhh]j5)}(h timespec64h]h timespec64}(hjDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j)}jinode_set_ctime_delegsbc.inode_set_ctime_delegasbuh1hhj!hhhj2hM ubj)}(h h]h }(hjehhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!hhhj2hM ubj/)}(hinode_set_ctime_delegh]j5)}(hjbh]hinode_set_ctime_deleg}(hjwhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjsubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj!hhhj2hM ubj)}(h/(struct inode *inode, struct timespec64 update)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j`c.inode_set_ctime_delegasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct timespec64 updateh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h timespec64h]h timespec64}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j`c.inode_set_ctime_delegasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hupdateh]hupdate}(hjLhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj!hhhj2hM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj2hM ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj2hM hjhhubjc)}(hhh]h)}(h,try to update the ctime on a delegated inodeh]h,try to update the ctime on a delegated inode}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM hjshhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj2hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhNhNubj)}(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}(hjhhhNhNubah}(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)}(hjh]hstruct timespec64 update}(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)}(htimespec64 to set the ctimeh]htimespec64 to set the ctime}(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)}(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)}(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.}(hjAhhhNhNubah}(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.}(hjPhhhNhNubah}(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.}(hj_hhhNhNubah}(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.}(hjnhhhNhNubah}(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](h in_group_or_capable (C function)c.in_group_or_capablehNtauh1hhjhhhNhNubh)}(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](j+)}(hj.h]hbool}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM7 ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM7 ubj/)}(hin_group_or_capableh]j5)}(hin_group_or_capableh]hin_group_or_capable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM7 ubj)}(hE(struct mnt_idmap *idmap, const struct inode *inode, vfsgid_t vfsgid)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.in_group_or_capableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj%hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hidmaph]hidmap}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj)}(h h]h }(hjXhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGubj )}(hjzh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj)}(h h]h }(hjshhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.in_group_or_capableasbuh1hhjGubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjGubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjGubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hvfsgid_t vfsgidh](h)}(hhh]j5)}(hvfsgid_th]hvfsgid_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.in_group_or_capableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hvfsgidh]hvfsgid}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM7 ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM7 ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM7 hjhhubjc)}(hhh]h)}(h-check whether caller is CAP_FSETID privilegedh]h-check whether caller is CAP_FSETID privileged}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM, hj,hhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhM7 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1hhhhjhNhNubj)}(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)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM0 hjKubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount **inode** was found from h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjph]hstruct mnt_idmap *idmap}(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.chM- hjjubj)}(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&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhM- hjgubj)}(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&]uh1hhjhM. hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM. hjgubj)}(h8``vfsgid_t vfsgid`` the new/current vfsgid of **inode** h](j)}(h``vfsgid_t vfsgid``h]j)}(hjh]hvfsgid_t vfsgid}(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#the new/current vfsgid of **inode**h](hthe new/current vfsgid of }(hj hhhNhNubj)}(h **inode**h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhj hM/ hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM/ hjgubeh}(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&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM1 hjKubh)}(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 }(hjShhhNhNubj)}(h **vfsgid**h]hvfsgid}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhU is in the caller’s group list or if the caller is privileged with CAP_FSETID over }(hjShhhNhNubj)}(h **inode**h]hinode}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhV. This can be used to determine whether the setgid bit can be kept or must be dropped.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:29: ./fs/inode.chM1 hjKubh)}(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.chM5 hjKubh)}(hhhhNhNubah}(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&]uh1jbhjshhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1hhhhjThNhNubj)}(hXr**Parameters** ``struct super_block *s`` superblock to deactivate 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)}(hj`h]h Parameters}(hjbhhhNhNubah}(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.chMhjZubj)}(hhh]j)}(hXV``struct super_block *s`` superblock to deactivate 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](j)}(h``struct super_block *s``h]j)}(hjh]hstruct super_block *s}(hjhhhNhNubah}(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.chMhjyubj)}(hhh](h)}(hsuperblock to deactivateh]hsuperblock to deactivate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(hACaller holds exclusive lock on superblock; that lock is released.h]hACaller holds exclusive lock on superblock; that lock is released.}(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&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdeactivate_super (C function)c.deactivate_superhNtauh1hhjThhhNhNubh)}(hhh](j)}(h-void deactivate_super (struct super_block *s)h]j)}(h,void deactivate_super(struct super_block *s)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hdeactivate_superh]j5)}(hdeactivate_superh]hdeactivate_super}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h(struct super_block *s)h]j)}(hstruct super_block *sh](j )}(hjzh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjRhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j)}jjsbc.deactivate_superasbuh1hhj0ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj0ubj5)}(hjh]hs}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj,ubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjThNhNubj)}(h**Parameters** ``struct super_block *s`` superblock to deactivate 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.chMhjubj)}(hhh]j)}(h``struct super_block *s`` superblock to deactivate 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](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.chMhjubj)}(hhh](h)}(hsuperblock to deactivateh]hsuperblock to deactivate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhj ubh)}(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}(hj'hhhNhNubah}(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.chMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hretire_super (C function)c.retire_superhNtauh1hhjThhhNhNubh)}(hhh](j)}(h*void retire_super (struct super_block *sb)h]j)}(h)void retire_super(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMLubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnhhhjhMLubj/)}(h retire_superh]j5)}(h retire_superh]h retire_super}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjnhhhjhMLubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.retire_superasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjnhhhjhMLubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjjhhhjhMLubah}(h]jeah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMLhjghhubjc)}(hhh]h)}(h%prevents superblock from being reusedh]h%prevents superblock from being reused}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM=hj/hhubah}(h]h ]h"]h$]h&]uh1jbhjghhhjhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1hhhhjThNhNubj)}(hX**Parameters** ``struct super_block *sb`` superblock to retire 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)}(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:38: ./fs/super.chMAhjNubj)}(hhh]j)}(hX``struct super_block *sb`` superblock to retire 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](j)}(h``struct super_block *sb``h]j)}(hjsh]hstruct super_block *sb}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMIhjmubj)}(hhh](h)}(hsuperblock to retireh]hsuperblock to retire}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM>hjubh)}(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.chM@hjubh)}(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.chMHhjubeh}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#generic_shutdown_super (C function)c.generic_shutdown_superhNtauh1hhjThhhNhNubh)}(hhh](j)}(h4void generic_shutdown_super (struct super_block *sb)h]j)}(h3void generic_shutdown_super(struct super_block *sb)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMgubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMgubj/)}(hgeneric_shutdown_superh]j5)}(hgeneric_shutdown_superh]hgeneric_shutdown_super}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMgubj)}(h(struct super_block *sb)h]j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj$ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjFhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jjsbc.generic_shutdown_superasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj$ubjX)}(hj[h]h*}(hjthhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj$ubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj ubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMgubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMgubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMghjhhubjc)}(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.chMZhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjThNhNubj)}(hXM**Parameters** ``struct super_block *sb`` superblock to kill 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.chM^hjubj)}(hhh]j)}(hX+``struct super_block *sb`` superblock to kill 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](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.chMdhjubj)}(hhh](h)}(hsuperblock to killh]hsuperblock to kill}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM[hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM]hjubh)}(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.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMchjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsget_fc (C function) c.sget_fchNtauh1hhjThhhNhNubh)}(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 )}(hjzh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`hhhjqhMubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jsget_fcsb c.sget_fcasbuh1hhj`hhhjqhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`hhhjqhMubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj`hhhjqhMubj/)}(hsget_fch]j5)}(hjh]hsget_fc}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj`hhhjqhMubj)}(h(struct fs_context *fc, int (*test)(struct super_block*, struct fs_context*), int (*set)(struct super_block*, struct fs_context*))h](j)}(hstruct fs_context *fch](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h fs_contexth]h fs_context}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.sget_fcasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj(hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hfch]hfc}(hj5hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h4int (*test)(struct super_block*, struct fs_context*)h](j+)}(hinth]hint}(hjNhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjJubj)}(h h]h }(hj\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJubjX)}(hjh]h(}(hjjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubjX)}(hj[h]h*}(hjwhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubj5)}(htesth]htest}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.sget_fcasbuh1hhjJubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubjX)}(hjh]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJubh)}(hhh]j5)}(h fs_contexth]h fs_context}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j c.sget_fcasbuh1hhjJubjX)}(hj[h]h*}(hjLhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubjX)}(hj!h]h)}(hjYhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h3int (*set)(struct super_block*, struct fs_context*)h](j+)}(hinth]hint}(hjqhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubj5)}(hseth]hset}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjmubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.sget_fcasbuh1hhjmubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubjX)}(hjh]h,}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubj)}(h h]h }(hj%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmubj )}(hjzh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmubh)}(hhh]j5)}(h fs_contexth]h fs_context}(hjQhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j c.sget_fcasbuh1hhjmubjX)}(hj[h]h*}(hjohhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubjX)}(hj!h]h)}(hj|hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj`hhhjqhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj\hhhjqhMubah}(h]jWah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjqhMhjYhhubjc)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjYhhhjqhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjThNhNubj)}(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.chMhjubj)}(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.chMhjubj)}(hhh]h)}(hFilesystem context.h]hFilesystem context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hO``int (*test)(struct super_block *, struct fs_context *)`` Comparison callback h](j)}(h:``int (*test)(struct super_block *, struct fs_context *)``h]j)}(hjh]h6int (*test)(struct super_block *, struct fs_context *)}(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)}(hComparison callbackh]hComparison callback}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(hI``int (*set)(struct super_block *, struct fs_context *)`` Setup callback h](j)}(h9``int (*set)(struct super_block *, struct fs_context *)``h]j)}(hjXh]h5int (*set)(struct super_block *, struct fs_context *)}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjRubj)}(hhh]h)}(hSetup callbackh]hSetup callback}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubeh}(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)}(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.chMhjubh)}(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.chMhjubh)}(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.chMhjubhenumerated_list)}(hhh](j;-)}(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 }(hjhhhNhNubj)}(h**fc**h]hfc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ and the extant superblock’s namespace differ}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubah}(h]h ]h"]h$]h&]uh1j:-hjubj;-)}(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 }(hj@hhhNhNubj)}(h**fc**h]hfc}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh? has requested that reusing an extant superblock is not allowed}(hj@hhhNhNubeh}(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&]uh1j:-hjubeh}(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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(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.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.chMhjubj)}(hhh]j)}(hgOn success, an extant or newly created superblock is returned. On failure an error pointer is returned.h](j)}(h4On success, an extant or newly created superblock ish]h4On success, an extant or newly created superblock is}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubj)}(hhh]h)}(h2returned. On failure an error pointer is returned.h]h2returned. 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.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsget (C function)c.sgethNtauh1hhjThhhNhNubh)}(hhh](j)}(hstruct super_block * sget (struct file_system_type *type, int (*test)(struct super_block *,void *), int (*set)(struct super_block *,void *), int flags, void *data)h]j)}(hstruct super_block *sget(struct file_system_type *type, int (*test)(struct super_block*, void*), int (*set)(struct super_block*, void*), int flags, void *data)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM/ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj hM/ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j)}jsgetsbc.sgetasbuh1hhjhhhj hM/ubj)}(h h]h }(hjShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj hM/ubjX)}(hj[h]h*}(hjahhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhj hM/ubj/)}(hsgeth]j5)}(hjPh]hsget}(hjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj hM/ubj)}(h(struct file_system_type *type, int (*test)(struct super_block*, void*), int (*set)(struct super_block*, void*), int flags, void *data)h](j)}(hstruct file_system_type *typeh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hfile_system_typeh]hfile_system_type}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jNc.sgetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htypeh]htype}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h'int (*test)(struct super_block*, void*)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hjh]h(}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj[h]h*}(hj& hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htesth]htest}(hj3 hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubjX)}(hj!h]h)}(hjA hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h(}(hjN hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj )}(hjzh]hstruct}(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjh hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjy hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjv ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{ modnameN classnameNjj)}j]jNc.sgetasbuh1hhjubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hjh]h,}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj!h]h)}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h&int (*set)(struct super_block*, void*)h](j+)}(hinth]hint}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hjh]h(}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hseth]hset}(hj( hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubjX)}(hj!h]h)}(hj6 hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubjX)}(hjh]h(}(hjC hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj )}(hjzh]hstruct}(hjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hj] hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjn hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjk ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjp modnameN classnameNjj)}j]jNc.sgetasbuh1hhj ubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubjX)}(hjh]h,}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubjX)}(hj!h]h)}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int flagsh](j+)}(hinth]hint}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj5)}(hflagsh]hflags}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *datah](j+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hj* hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hj8 hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hdatah]hdata}(hjE hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj hM/ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj hhhj hM/ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj hM/hjhhubjc)}(hhh]h)}(hfind or create a superblockh]hfind or create a superblock}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM(hjl hhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj hM/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1hhhhjThNhNubj)}(hX)**Parameters** ``struct file_system_type *type`` filesystem type superblock should belong to ``int (*test)(struct super_block *,void *)`` comparison callback ``int (*set)(struct super_block *,void *)`` setup callback ``int flags`` mount flags ``void *data`` argument to each of themh](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.chM,hj ubj)}(hhh](j)}(hN``struct file_system_type *type`` filesystem type superblock should belong to h](j)}(h!``struct file_system_type *type``h]j)}(hj h]hstruct file_system_type *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:38: ./fs/super.chM)hj ubj)}(hhh]h)}(h+filesystem type superblock should belong toh]h+filesystem type superblock should belong 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)}(hA``int (*test)(struct super_block *,void *)`` comparison callback h](j)}(h,``int (*test)(struct super_block *,void *)``h]j)}(hj h]h(int (*test)(struct super_block *,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:38: ./fs/super.chM*hj ubj)}(hhh]h)}(hcomparison callbackh]hcomparison callback}(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;``int (*set)(struct super_block *,void *)`` setup callback h](j)}(h+``int (*set)(struct super_block *,void *)``h]j)}(hj" h]h'int (*set)(struct super_block *,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:38: ./fs/super.chM+hj ubj)}(hhh]h)}(hsetup callbackh]hsetup callback}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7 hM+hj8 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj7 hM+hj ubj)}(h``int flags`` mount flags h](j)}(h ``int flags``h]j)}(hj[ h]h int flags}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM,hjU ubj)}(hhh]h)}(h mount flagsh]h mount flags}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp hM,hjq ubah}(h]h ]h"]h$]h&]uh1jhjU ubeh}(h]h ]h"]h$]h&]uh1jhjp hM,hj ubj)}(h'``void *data`` argument to each of themh](j)}(h``void *data``h]j)}(hj h]h void *data}(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.chM.hj ubj)}(hhh]h)}(hargument to each of themh]hargument to each of them}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM-hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM.hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h iterate_supers_type (C function)c.iterate_supers_typehNtauh1hhjThhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj hhhj hMubj/)}(hiterate_supers_typeh]j5)}(hiterate_supers_typeh]hiterate_supers_type}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj hhhj hMubj)}(hQ(struct file_system_type *type, void (*f)(struct super_block*, void*), void *arg)h](j)}(hstruct file_system_type *typeh](j )}(hjzh]hstruct}(hj+ hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj' ubj)}(h h]h }(hj8 hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj' ubh)}(hhh]j5)}(hfile_system_typeh]hfile_system_type}(hjI hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjF ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjK modnameN classnameNjj)}j]j)}jj sbc.iterate_supers_typeasbuh1hhj' ubj)}(h h]h }(hji hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj' ubjX)}(hj[h]h*}(hjw hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj' ubj5)}(htypeh]htype}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj' ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj# ubj)}(h%void (*f)(struct super_block*, void*)h](j+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hjh]h(}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hfh]hf}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubjX)}(hj!h]h)}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubjX)}(hjh]h(}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]je c.iterate_supers_typeasbuh1hhj ubjX)}(hj[h]h*}(hj7hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubjX)}(hjh]h,}(hjDhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj+)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubjX)}(hj[h]h*}(hjmhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubjX)}(hj!h]h)}(hjzhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj# ubj)}(h void *argh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hargh]harg}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj# ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj hhhj hMubah}(h]j ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj hMhj hhubjc)}(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&]uh1jbhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjThNhNubj)}(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 Scans the superblock list and calls given function, passing it locked superblock and given argument.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:38: ./fs/super.chMhjubj)}(hhh](j)}(h*``struct file_system_type *type`` fs type h](j)}(h!``struct file_system_type *type``h]j)}(hj&h]hstruct file_system_type *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:38: ./fs/super.chMhj ubj)}(hhh]h)}(hfs typeh]hfs type}(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=``void (*f)(struct super_block *, void *)`` function to call h](j)}(h+``void (*f)(struct super_block *, void *)``h]j)}(hj_h]h'void (*f)(struct super_block *, void *)}(hjahhhNhNubah}(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.chMhjYubj)}(hhh]h)}(hfunction to callh]hfunction to call}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubj)}(h``void *arg`` argument to pass to it Scans the superblock list and calls given function, passing it locked superblock and given argument.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&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(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&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_anon_bdev (C function)c.get_anon_bdevhNtauh1hhjThhhNhNubh)}(hhh](j)}(hint get_anon_bdev (dev_t *p)h]j)}(hint get_anon_bdev(dev_t *p)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(h get_anon_bdevh]j5)}(h get_anon_bdevh]h get_anon_bdev}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(h (dev_t *p)h]j)}(hdev_t *ph](h)}(hhh]j5)}(hdev_th]hdev_t}(hj@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j)}jj#sbc.get_anon_bdevasbuh1hhj9ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubjX)}(hj[h]h*}(hjnhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9ubj5)}(hjdh]hp}(hj{hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjThNhNubj)}(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.chMhjubj)}(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.chMhjubj)}(hhh]h)}(hPointer to a dev_t.h]hPointer to a dev_t.}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(h **Context**h]j)}(hjGh]hContext}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(h6Any context. Frequently called while holding sb_lock.h]h6Any context. Frequently called while holding sb_lock.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjubh)}(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:38: ./fs/super.chMhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsget_dev (C function) c.sget_devhNtauh1hhjThhhNhNubh)}(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 )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMNubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMNubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jsget_devsb c.sget_devasbuh1hhjhhhjhMNubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMNubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhMNubj/)}(hsget_devh]j5)}(hjh]hsget_dev}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMNubj)}(h"(struct fs_context *fc, dev_t dev)h](j)}(hstruct fs_context *fch](j )}(hjzh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubh)}(hhh]j5)}(h fs_contexth]h fs_context}(hjKhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j c.sget_devasbuh1hhj)ubj)}(h h]h }(hjihhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubjX)}(hj[h]h*}(hjwhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj)ubj5)}(hfch]hfc}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj%ubj)}(h dev_t devh](h)}(hhh]j5)}(hdev_th]hdev_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.sget_devasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj%ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMNubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMNubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMNhjhhubjc)}(hhh]h)}(h,Find or create a superblock by device numberh]h,Find or create a superblock by device number}(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&]uh1jbhjhhhjhMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjThNhNubj)}(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)}(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)}(hj7h]hstruct fs_context *fc}(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.chM<hj1ubj)}(hhh]h)}(hFilesystem context.h]hFilesystem context.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM<hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhM<hj.ubj)}(h``dev_t dev`` device number h](j)}(h ``dev_t dev``h]j)}(hjph]h dev_t dev}(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.chM=hjjubj)}(hhh]h)}(h device numberh]h device number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chM?hjubh)}(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.chM?hjubh)}(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.chMBhjubh)}(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.chMEhjubh)}(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.chMKhjubj)}(hhh]j)}(hPan existing or newly created superblock on success, an error pointer on failure.h](j)}(hroot**.h](h)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjlubj)}(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&]uh1jhjlubh)}(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.chMhjlubh)}(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}(hjhhhNhNubah}(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.chMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfreeze_super (C function)c.freeze_superhNtauh1hhjThhhNhNubh)}(hhh](j)}(hAint freeze_super (struct super_block *sb, enum freeze_holder who)h]j)}(h@int freeze_super(struct super_block *sb, enum freeze_holder who)h](j+)}(hinth]hint}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj1hMubj/)}(h freeze_superh]j5)}(h freeze_superh]h freeze_super}(hjDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj1hMubj)}(h0(struct super_block *sb, enum freeze_holder who)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\ubh)}(hhh]j5)}(h super_blockh]h super_block}(hj~hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjFsbc.freeze_superasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj\ubj5)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj\ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjXubj)}(henum freeze_holder whoh](j )}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h freeze_holderh]h freeze_holder}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.freeze_superasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwhoh]hwho}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjXubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj1hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj1hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj1hMhjhhubjc)}(hhh]h)}(h8lock the filesystem and force it into a consistent stateh]h8lock the filesystem and force it into a consistent state}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjChhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1hhhhjThNhNubj)}(hXh **Parameters** ``struct super_block *sb`` the super to lock ``enum freeze_holder who`` context that wants to 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)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjbubj)}(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&]uh1jhjhMhj~ubj)}(h8``enum freeze_holder who`` context that wants to freeze h](j)}(h``enum freeze_holder who``h]j)}(hjh]henum freeze_holder who}(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)}(hcontext that wants to freezeh]hcontext that wants to freeze}(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&]uh1jhjbubh)}(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.chMhjbubh)}(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.chMhjbubh)}(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}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh should be: * }(hj hhhNhNubj)}(h``FREEZE_HOLDER_USERSPACE``h]hFREEZE_HOLDER_USERSPACE}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh( if userspace wants to freeze the fs; * }(hj hhhNhNubj)}(h``FREEZE_HOLDER_KERNEL``h]hFREEZE_HOLDER_KERNEL}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) if the kernel wants to freeze the fs. * }(hj hhhNhNubj)}(h``FREEZE_MAY_NEST``h]hFREEZE_MAY_NEST}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh5 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.chMhjbubh)}(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 }(hjshhhNhNubj)}(h**who**h]hwho}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubhX[ 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.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjbubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjbubh)}(hEDuring this function, sb->s_writers.frozen goes through these values:h]hEDuring this function, sb->s_writers.frozen goes through these values:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjbubh)}(hASB_UNFROZEN: File system is normal, all writes progress as usual.h]hASB_UNFROZEN: File system is normal, all writes progress as usual.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjbubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMhjbubh)}(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.chMhjbubh)}(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.chMhjbubh)}(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.chMhjbubh)}(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.chMhjbubj)}(hhh]j)}(hfIf the freeze was successful zero is returned. If the freeze failed a negative error code is returned.h](j)}(hint thaw_super(struct super_block *sb, enum freeze_holder who)h](j+)}(hinth]hint}(hjohhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjkhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjkhhhj}hMmubj/)}(h thaw_superh]j5)}(h thaw_superh]h thaw_super}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjkhhhj}hMmubj)}(h0(struct super_block *sb, enum freeze_holder who)h](j)}(hstruct super_block *sbh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h super_blockh]h super_block}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb c.thaw_superasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(henum freeze_holder whoh](j )}(hjh]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hj+ hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(h freeze_holderh]h freeze_holder}(hj< hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj> modnameN classnameNjj)}j]j c.thaw_superasbuh1hhj ubj)}(h h]h }(hjZ hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj5)}(hwhoh]hwho}(hjh hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjkhhhj}hMmubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjghhhj}hMmubah}(h]jbah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj}hMmhjdhhubjc)}(hhh]j6-)}(hhh]j;-)}(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.chM]hj ubah}(h]h ]h"]h$]h&]uh1j:-hj hhhj hNubah}(h]h ]h"]h$]h&]j--uh1j5-hj hM]hj hhubah}(h]h ]h"]h$]h&]uh1jbhjdhhhj}hMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1hhhhjThNhNubj)}(hX**Parameters** ``struct super_block *sb`` the super to thaw ``enum freeze_holder who`` context that wants to 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.chMahj 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.chM^hj ubj)}(hhh]h)}(hthe super to thawh]hthe super to thaw}(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``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.chM_hj!ubj)}(hhh]h)}(hcontext that wants to freezeh]hcontext that wants to freeze}(hj8!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4!hM_hj5!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj4!hM_hj 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&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMahj 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.}(hjp!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:38: ./fs/super.chMahj 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.chMdhj 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.chMihj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubeh}(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](h%locks_owner_has_blockers (C function)c.locks_owner_has_blockershNtauh1hhj!hhhNhNubh)}(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](j+)}(hj.h]hbool}(hj"hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj"hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMKubj)}(h h]h }(hj("hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj"hhhj'"hMKubj/)}(hlocks_owner_has_blockersh]j5)}(hlocks_owner_has_blockersh]hlocks_owner_has_blockers}(hj:"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6"ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj"hhhj'"hMKubj)}(h3(struct file_lock_context *flctx, fl_owner_t owner)h](j)}(hstruct file_lock_context *flctxh](j )}(hjzh]hstruct}(hjV"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjR"ubj)}(h h]h }(hjc"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjR"ubh)}(hhh]j5)}(hfile_lock_contexth]hfile_lock_context}(hjt"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjq"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjv"modnameN classnameNjj)}j]j)}jj<"sbc.locks_owner_has_blockersasbuh1hhjR"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjR"ubjX)}(hj[h]h*}(hj"hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjR"ubj5)}(hflctxh]hflctx}(hj"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjR"ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjN"ubj)}(hfl_owner_t ownerh](h)}(hhh]j5)}(h fl_owner_th]h fl_owner_t}(hj"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j"c.locks_owner_has_blockersasbuh1hhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj"ubj5)}(hownerh]howner}(hj"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjN"ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj"hhhj'"hMKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj"hhhj'"hMKubah}(h]j "ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj'"hMKhj"hhubjc)}(hhh]h)}(h Check for blocking lock requestsh]h Check for blocking lock requests}(hj!#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMChj#hhubah}(h]h ]h"]h$]h&]uh1jbhj"hhhj'"hMKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9#jj9#jjjuh1hhhhj!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)}(hjC#h]h Parameters}(hjE#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA#ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMGhj=#ubj)}(hhh](j)}(h6``struct file_lock_context *flctx`` file lock context h](j)}(h#``struct file_lock_context *flctx``h]j)}(hjb#h]hstruct file_lock_context *flctx}(hjd#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.chMDhj\#ubj)}(hhh]h)}(hfile lock contexth]hfile lock context}(hj{#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw#hMDhjx#ubah}(h]h ]h"]h$]h&]uh1jhj\#ubeh}(h]h ]h"]h$]h&]uh1jhjw#hMDhjY#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.chMEhj#ubj)}(hhh]h)}(h lock ownerh]h lock owner}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMEhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMEhjY#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.chMGhj=#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.chMHhj#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}(hj-$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh: }hj$sbj)}(h **owner**h]howner}(hj?$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh has no blockers}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hMHhj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hMHhj#ubah}(h]h ]h"]h$]h&]uh1jhj=#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlocks_delete_block (C function)c.locks_delete_blockhNtauh1hhj!hhhNhNubh)}(hhh](j)}(h1int locks_delete_block (struct file_lock *waiter)h]j)}(h0int locks_delete_block(struct file_lock *waiter)h](j+)}(hinth]hint}(hj$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj$hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj$hhhj$hMubj/)}(hlocks_delete_blockh]j5)}(hlocks_delete_blockh]hlocks_delete_block}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj$hhhj$hMubj)}(h(struct file_lock *waiter)h]j)}(hstruct file_lock *waiterh](j )}(hjzh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj$ubh)}(hhh]j5)}(h file_lockh]h file_lock}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j)}jj$sbc.locks_delete_blockasbuh1hhj$ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj$ubjX)}(hj[h]h*}(hj%hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj$ubj5)}(hwaiterh]hwaiter}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj$ubah}(h]h ]h"]h$]h&]jLjMuh1jhj$hhhj$hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj$hhhj$hMubah}(h]j|$ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj$hMhj~$hhubjc)}(hhh]h)}(hstop waiting for a file lockh]hstop waiting for a file lock}(hjI%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhjF%hhubah}(h]h ]h"]h$]h&]uh1jbhj~$hhhj$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjja%jja%jjjuh1hhhhj!hNhNubj)}(h**Parameters** ``struct file_lock *waiter`` the lock which was waiting lockd/nfsd need to disconnect the lock while working on it.h](h)}(h**Parameters**h]j)}(hjk%h]h Parameters}(hjm%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji%ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhje%ubj)}(hhh]j)}(ht``struct file_lock *waiter`` the lock which was waiting lockd/nfsd need to disconnect the lock while working on it.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.chMhj%ubj)}(hhh](h)}(hthe lock which was waitingh]hthe lock which was waiting}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj%ubh)}(h;lockd/nfsd need to disconnect the lock while working on it.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.chMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhje%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hposix_lock_file (C function)c.posix_lock_filehNtauh1hhj!hhhNhNubh)}(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](j+)}(hinth]hint}(hj%hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMwubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%hhhj&hMwubj/)}(hposix_lock_fileh]j5)}(hposix_lock_fileh]hposix_lock_file}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj%hhhj&hMwubj)}(hE(struct file *filp, struct file_lock *fl, struct file_lock *conflock)h](j)}(hstruct file *filph](j )}(hjzh]hstruct}(hj0&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,&ubj)}(h h]h }(hj=&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,&ubh)}(hhh]j5)}(hfileh]hfile}(hjN&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjK&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjP&modnameN classnameNjj)}j]j)}jj&sbc.posix_lock_fileasbuh1hhj,&ubj)}(h h]h }(hjn&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,&ubjX)}(hj[h]h*}(hj|&hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj,&ubj5)}(hfilph]hfilp}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,&ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(&ubj)}(hstruct file_lock *flh](j )}(hjzh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj&ubh)}(hhh]j5)}(h file_lockh]h file_lock}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]jj&c.posix_lock_fileasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj&ubjX)}(hj[h]h*}(hj&hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj&ubj5)}(hflh]hfl}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(&ubj)}(hstruct file_lock *conflockh](j )}(hjzh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'ubh)}(hhh]j5)}(h file_lockh]h file_lock}(hj0'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2'modnameN classnameNjj)}j]jj&c.posix_lock_fileasbuh1hhj'ubj)}(h h]h }(hjN'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'ubjX)}(hj[h]h*}(hj\'hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj'ubj5)}(hconflockh]hconflock}(hji'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj'ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(&ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj%hhhj&hMwubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj%hhhj&hMwubah}(h]j%ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj&hMwhj%hhubjc)}(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.chMjhj'hhubah}(h]h ]h"]h$]h&]uh1jbhj%hhhj&hMwubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1hhhhj!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.chMnhj'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.chMkhj'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'hMkhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMkhj'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.chMlhj(ubj)}(hhh]h)}(hThe lock to be appliedh]hThe lock to be applied}(hj&(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"(hMlhj#(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj"(hMlhj'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)}(hjF(h]hstruct file_lock *conflock}(hjH(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD(ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMmhj@(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[(hMmhj\(ubah}(h]h ]h"]h$]h&]uh1jhj@(ubeh}(h]h ]h"]h$]h&]uh1jhj[(hMmhj'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.chMohj'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.chMohj'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.chMshj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__break_lease (C function)c.__break_leasehNtauh1hhj!hhhNhNubh)}(hhh](j)}(hMint __break_lease (struct inode *inode, unsigned int mode, unsigned int type)h]j)}(hLint __break_lease(struct inode *inode, unsigned int mode, unsigned int type)h](j+)}(hinth]hint}(hj(hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj(hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(hhhj(hMubj/)}(h __break_leaseh]j5)}(h __break_leaseh]h __break_lease}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj(hhhj(hMubj)}(h;(struct inode *inode, unsigned int mode, unsigned int type)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubh)}(hhh]j5)}(hinodeh]hinode}(hj0)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2)modnameN classnameNjj)}j]j)}jj(sbc.__break_leaseasbuh1hhj)ubj)}(h h]h }(hjP)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubjX)}(hj[h]h*}(hj^)hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj)ubj5)}(hinodeh]hinode}(hjk)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj )ubj)}(hunsigned int modeh](j+)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubj+)}(hinth]hint}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubj5)}(hmodeh]hmode}(hj)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj )ubj)}(hunsigned int typeh](j+)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubj+)}(hinth]hint}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)ubj5)}(htypeh]htype}(hj *hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj )ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj(hhhj(hMubah}(h]j(ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj(hMhj(hhubjc)}(hhh]h)}(h%revoke all outstanding leases on fileh]h%revoke all outstanding leases on file}(hj7*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj4*hhubah}(h]h ]h"]h$]h&]uh1jbhj(hhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjO*jjO*jjjuh1hhhhj!hNhNubj)}(hX&**Parameters** ``struct inode *inode`` the inode of the file to return ``unsigned int mode`` O_RDONLY: break only write leases; O_WRONLY or O_RDWR: break all leases ``unsigned int type`` FL_LEASE: break leases and delegations; FL_DELEG: break only delegations break_lease (inlined for speed) has checked there already is at least some kind of lock (maybe a lease) on this file. Leases are broken on a call to open() or truncate(). This function can sleep unless you specified ``O_NONBLOCK`` to your open().h](h)}(h**Parameters**h]j)}(hjY*h]h Parameters}(hj[*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW*ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhjS*ubj)}(hhh](j)}(h8``struct inode *inode`` the inode of the file to return h](j)}(h``struct inode *inode``h]j)}(hjx*h]hstruct inode *inode}(hjz*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv*ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhjr*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&]uh1jhjr*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjo*ubj)}(h^``unsigned int mode`` O_RDONLY: break only write leases; O_WRONLY or O_RDWR: break all leases h](j)}(h``unsigned int mode``h]j)}(hj*h]hunsigned int 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:44: ./fs/locks.chMhj*ubj)}(hhh]h)}(hGO_RDONLY: break only write leases; O_WRONLY or O_RDWR: break all leasesh]hGO_RDONLY: break only write leases; O_WRONLY or O_RDWR: break all leases}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjo*ubj)}(hXl``unsigned int type`` FL_LEASE: break leases and delegations; FL_DELEG: break only delegations break_lease (inlined for speed) has checked there already is at least some kind of lock (maybe a lease) on this file. Leases are broken on a call to open() or truncate(). This function can sleep unless you specified ``O_NONBLOCK`` to your open().h](j)}(h``unsigned int type``h]j)}(hj*h]hunsigned int 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:44: ./fs/locks.chMhj*ubj)}(hhh](h)}(hHFL_LEASE: break leases and delegations; FL_DELEG: break only delegationsh]hHFL_LEASE: break leases and delegations; FL_DELEG: break only delegations}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj+ubj)}(hbreak_lease (inlined for speed) has checked there already is at least some kind of lock (maybe a lease) on this file. Leases are broken on a call to open() or truncate(). This function can sleep unless you specified ``O_NONBLOCK`` to your open().h]h)}(hbreak_lease (inlined for speed) has checked there already is at least some kind of lock (maybe a lease) on this file. Leases are broken on a call to open() or truncate(). This function can sleep unless you specified ``O_NONBLOCK`` to your open().h](hbreak_lease (inlined for speed) has checked there already is at least some kind of lock (maybe a lease) on this file. Leases are broken on a call to open() or truncate(). This function can sleep unless you specified }(hj+hhhNhNubj)}(h``O_NONBLOCK``h]h O_NONBLOCK}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh to your open().}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj+ubah}(h]h ]h"]h$]h&]uh1jhj7+hMhj+ubeh}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhjo*ubeh}(h]h ]h"]h$]h&]uh1jhjS*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlease_get_mtime (C function)c.lease_get_mtimehNtauh1hhj!hhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjp+hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjl+hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMxubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjl+hhhj~+hMxubj/)}(hlease_get_mtimeh]j5)}(hlease_get_mtimeh]hlease_get_mtime}(hj+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjl+hhhj~+hMxubj)}(h.(struct inode *inode, struct timespec64 *time)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+ubh)}(hhh]j5)}(hinodeh]hinode}(hj+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j)}jj+sbc.lease_get_mtimeasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+ubjX)}(hj[h]h*}(hj+hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj+ubj5)}(hinodeh]hinode}(hj,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj+ubj)}(hstruct timespec64 *timeh](j )}(hjzh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj)}(h h]h }(hj,,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubh)}(hhh]j5)}(h timespec64h]h timespec64}(hj=,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?,modnameN classnameNjj)}j]j+c.lease_get_mtimeasbuh1hhj,ubj)}(h h]h }(hj[,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubjX)}(hj[h]h*}(hji,hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj,ubj5)}(htimeh]htime}(hjv,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj+ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjl+hhhj~+hMxubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjh+hhhj~+hMxubah}(h]jc+ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj~+hMxhje+hhubjc)}(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.chMphj,hhubah}(h]h ]h"]h$]h&]uh1jbhje+hhhj~+hMxubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1hhhhj!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.chMthj,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.chMqhj,ubj)}(hhh]h)}(h the inodeh]h the inode}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMqhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMqhj,ubj)}(hX``struct timespec64 *time`` pointer to a timespec which contains the last modified time h](j)}(h``struct timespec64 *time``h]j)}(hj-h]hstruct timespec64 *time}(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.chMrhj-ubj)}(hhh]h)}(h;pointer to a timespec which contains the last modified timeh]h;pointer to a timespec which contains the last modified time}(hj3-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/-hMrhj0-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj/-hMrhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hjU-h]h Description}(hjW-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS-ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMthj,ubh)}(hThis 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]hThis 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.}(hjk-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMthj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgeneric_setlease (C function)c.generic_setleasehNtauh1hhj!hhhNhNubh)}(hhh](j)}(hWint generic_setlease (struct file *filp, int arg, struct file_lease **flp, void **priv)h]j)}(hVint generic_setlease(struct file *filp, int arg, struct file_lease **flp, void **priv)h](j+)}(hinth]hint}(hj-hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-hhhj-hMubj/)}(hgeneric_setleaseh]j5)}(hgeneric_setleaseh]hgeneric_setlease}(hj-hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj-hhhj-hMubj)}(hB(struct file *filp, int arg, struct file_lease **flp, void **priv)h](j)}(hstruct file *filph](j )}(hjzh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-ubh)}(hhh]j5)}(hfileh]hfile}(hj-hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j)}jj-sbc.generic_setleaseasbuh1hhj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-ubjX)}(hj[h]h*}(hj#.hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj-ubj5)}(hfilph]hfilp}(hj0.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj-ubj)}(hint argh](j+)}(hinth]hint}(hjI.hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjE.ubj)}(h h]h }(hjW.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjE.ubj5)}(hargh]harg}(hje.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjE.ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj-ubj)}(hstruct file_lease **flph](j )}(hjzh]hstruct}(hj~.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjz.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjz.ubh)}(hhh]j5)}(h file_leaseh]h file_lease}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j.c.generic_setleaseasbuh1hhjz.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjz.ubjX)}(hj[h]h*}(hj.hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjz.ubjX)}(hj[h]h*}(hj.hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjz.ubj5)}(hflph]hflp}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjz.ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj-ubj)}(h void **privh](j+)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj.ubj)}(h h]h }(hj /hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj.ubjX)}(hj[h]h*}(hj/hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj.ubjX)}(hj[h]h*}(hj$/hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj.ubj5)}(hprivh]hpriv}(hj1/hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj-ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj-hhhj-hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj-hhhj-hMubah}(h]j-ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj-hMhj-hhubjc)}(hhh]h)}(hsets a lease on an open fileh]hsets a lease on an open file}(hj[/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhjX/hhubah}(h]h ]h"]h$]h&]uh1jbhj-hhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjs/jjs/jjjuh1hhhhj!hNhNubj)}(hXf**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) The (input) flp->fl_lmops->lm_break function is required by break_lease().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.chMhjw/ubj)}(hhh](j)}(h#``struct file *filp`` file pointer 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)}(h file pointerh]h file pointer}(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$``int arg`` type of lease to obtain h](j)}(h ``int arg``h]j)}(hj/h]hint arg}(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)}(htype of lease to obtainh]htype of lease to obtain}(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)}(hR``struct file_lease **flp`` input - file_lock to use, output - file_lock inserted h](j)}(h``struct file_lease **flp``h]j)}(hj0h]hstruct file_lease **flp}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 0ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj0ubj)}(hhh]h)}(h5input - file_lock to use, output - file_lock insertedh]h5input - file_lock to use, output - file_lock inserted}(hj'0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#0hMhj$0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj#0hMhj/ubj)}(h``void **priv`` private data for lm_setup (may be NULL if lm_setup doesn't require it) The (input) flp->fl_lmops->lm_break function is required by break_lease().h](j)}(h``void **priv``h]j)}(hjG0h]h void **priv}(hjI0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE0ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhjA0ubj)}(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)}(hj`0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj]0ubj)}(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().}(hjs0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\0hMhjo0ubah}(h]h ]h"]h$]h&]uh1jhj\0hMhj]0ubeh}(h]h ]h"]h$]h&]uh1jhjA0ubeh}(h]h ]h"]h$]h&]uh1jhj\0hMhj/ubeh}(h]h ]h"]h$]h&]uh1jhjw/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvfs_setlease (C function)c.vfs_setleasehNtauh1hhj!hhhNhNubh)}(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](j+)}(hinth]hint}(hj0hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj0hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0hhhj0hMubj/)}(h vfs_setleaseh]j5)}(h vfs_setleaseh]h vfs_setlease}(hj0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj0hhhj0hMubj)}(hD(struct file *filp, int arg, struct file_lease **lease, void **priv)h](j)}(hstruct file *filph](j )}(hjzh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0ubh)}(hhh]j5)}(hfileh]hfile}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j)}jj0sbc.vfs_setleaseasbuh1hhj0ubj)}(h h]h }(hj41hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0ubjX)}(hj[h]h*}(hjB1hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj0ubj5)}(hfilph]hfilp}(hjO1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj0ubj)}(hint argh](j+)}(hinth]hint}(hjh1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjd1ubj)}(h h]h }(hjv1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjd1ubj5)}(hargh]harg}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjd1ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj0ubj)}(hstruct file_lease **leaseh](j )}(hjzh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj1ubh)}(hhh]j5)}(h file_leaseh]h file_lease}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j01c.vfs_setleaseasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj1ubjX)}(hj[h]h*}(hj1hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj1ubjX)}(hj[h]h*}(hj1hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj1ubj5)}(hleaseh]hlease}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj1ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj0ubj)}(h void **privh](j+)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj2ubj)}(h h]h }(hj(2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2ubjX)}(hj[h]h*}(hj62hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj2ubjX)}(hj[h]h*}(hjC2hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj2ubj5)}(hprivh]hpriv}(hjP2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj0ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj0hhhj0hMubah}(h]j0ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj0hMhj0hhubjc)}(hhh]h)}(hsets a lease on an open fileh]hsets a lease on an open file}(hjz2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhjw2hhubah}(h]h ]h"]h$]h&]uh1jbhj0hhhj0hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1hhhhj!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)}(hj2h]h Parameters}(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.chMhj2ubj)}(hhh](j)}(h#``struct file *filp`` file pointer h](j)}(h``struct file *filp``h]j)}(hj2h]hstruct file *filp}(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)}(h file pointerh]h file pointer}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(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}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 3hMhj 3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj 3hMhj2ubj)}(hC``struct file_lease **lease`` file_lock to use when adding a lease h](j)}(h``struct file_lease **lease``h]j)}(hj-3h]hstruct file_lease **lease}(hj/3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+3ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj'3ubj)}(hhh]h)}(h$file_lock to use when adding a leaseh]h$file_lock to use when adding a lease}(hjF3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB3hMhjC3ubah}(h]h ]h"]h$]h&]uh1jhj'3ubeh}(h]h ]h"]h$]h&]uh1jhjB3hMhj2ubj)}(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)}(hjf3h]h void **priv}(hjh3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd3ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj`3ubj)}(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)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj|3ubah}(h]h ]h"]h$]h&]uh1jhj`3ubeh}(h]h ]h"]h$]h&]uh1jhj{3hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubh)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj2ubh)}(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 }(hj3hhhNhNubj)}(h ``(*lease)->fl_lmops->lm_break``h]h(*lease)->fl_lmops->lm_break}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubhm operation must be set; if not, this function will return -ENOLCK (and generate a scary-looking stack trace).}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj2ubh)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"locks_lock_inode_wait (C function)c.locks_lock_inode_waithNtauh1hhj!hhhNhNubh)}(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](j+)}(hinth]hint}(hj4hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj4hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM7ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4hhhj4hM7ubj/)}(hlocks_lock_inode_waith]j5)}(hlocks_lock_inode_waith]hlocks_lock_inode_wait}(hj)4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%4ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj4hhhj4hM7ubj)}(h+(struct inode *inode, struct file_lock *fl)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjE4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjA4ubj)}(h h]h }(hjR4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjA4ubh)}(hhh]j5)}(hinodeh]hinode}(hjc4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj`4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetje4modnameN classnameNjj)}j]j)}jj+4sbc.locks_lock_inode_waitasbuh1hhjA4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjA4ubjX)}(hj[h]h*}(hj4hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjA4ubj5)}(hinodeh]hinode}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjA4ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj=4ubj)}(hstruct file_lock *flh](j )}(hjzh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4ubh)}(hhh]j5)}(h file_lockh]h file_lock}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j4c.locks_lock_inode_waitasbuh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4ubjX)}(hj[h]h*}(hj5hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj4ubj5)}(hflh]hfl}(hj5hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj4ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj=4ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj4hhhj4hM7ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj4hhhj4hM7ubah}(h]j3ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj4hM7hj3hhubjc)}(hhh]h)}(hApply a lock to an inodeh]hApply a lock to an inode}(hj85hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM1hj55hhubah}(h]h ]h"]h$]h&]uh1jbhj3hhhj4hM7ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjP5jjP5jjjuh1hhhhj!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)}(hjZ5h]h Parameters}(hj\5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX5ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM5hjT5ubj)}(hhh](j)}(h6``struct inode *inode`` inode of the file to apply to h](j)}(h``struct inode *inode``h]j)}(hjy5h]hstruct inode *inode}(hj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM2hjs5ubj)}(hhh]h)}(hinode of the file to apply toh]hinode of the file to apply to}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM2hj5ubah}(h]h ]h"]h$]h&]uh1jhjs5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM2hjp5ubj)}(h0``struct file_lock *fl`` The lock to be applied h](j)}(h``struct file_lock *fl``h]j)}(hj5h]hstruct file_lock *fl}(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.chM3hj5ubj)}(hhh]h)}(hThe lock to be appliedh]hThe lock to be applied}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM3hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM3hjp5ubeh}(h]h ]h"]h$]h&]uh1jhjT5ubh)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM5hjT5ubh)}(h6Apply a POSIX or FLOCK style lock request to an inode.h]h6Apply a POSIX or FLOCK style lock request to an inode.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM5hjT5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvfs_test_lock (C function)c.vfs_test_lockhNtauh1hhj!hhhNhNubh)}(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](j+)}(hinth]hint}(hj26hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj.6hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMubj)}(h h]h }(hjA6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj.6hhhj@6hMubj/)}(h vfs_test_lockh]j5)}(h vfs_test_lockh]h vfs_test_lock}(hjS6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjO6ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj.6hhhj@6hMubj)}(h)(struct file *filp, struct file_lock *fl)h](j)}(hstruct file *filph](j )}(hjzh]hstruct}(hjo6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjk6ubj)}(h h]h }(hj|6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjk6ubh)}(hhh]j5)}(hfileh]hfile}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j)}jjU6sbc.vfs_test_lockasbuh1hhjk6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjk6ubjX)}(hj[h]h*}(hj6hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjk6ubj5)}(hfilph]hfilp}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjk6ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjg6ubj)}(hstruct file_lock *flh](j )}(hjzh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj6ubh)}(hhh]j5)}(h file_lockh]h file_lock}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j6c.vfs_test_lockasbuh1hhj6ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj6ubjX)}(hj[h]h*}(hj+7hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj6ubj5)}(hflh]hfl}(hj87hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjg6ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj.6hhhj@6hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj*6hhhj@6hMubah}(h]j%6ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj@6hMhj'6hhubjc)}(hhh]h)}(htest file byte range lockh]htest file byte range lock}(hjb7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj_7hhubah}(h]h ]h"]h$]h&]uh1jbhj'6hhhj@6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjz7jjz7jjjuh1hhhhj!hNhNubj)}(hX**Parameters** ``struct file *filp`` The file to test lock for ``struct file_lock *fl`` The lock to test; also used to hold result **Description** Returns -ERRNO on failure. Indicates presence of conflicting lock by setting conf->fl_type to something other than F_UNLCK.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.chMhj~7ubj)}(hhh](j)}(h0``struct file *filp`` The file to test lock for h](j)}(h``struct file *filp``h]j)}(hj7h]hstruct file *filp}(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)}(hThe file to test lock forh]hThe file to test lock for}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubj)}(hD``struct file_lock *fl`` The lock to test; also used to hold result h](j)}(h``struct file_lock *fl``h]j)}(hj7h]hstruct file_lock *fl}(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)}(h*The lock to test; also used to hold resulth]h*The lock to test; also used to hold result}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhj~7ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj~7ubh)}(h|Returns -ERRNO on failure. Indicates presence of conflicting lock by setting conf->fl_type to something other than F_UNLCK.h]h|Returns -ERRNO on failure. Indicates presence of conflicting lock by setting conf->fl_type to something other than F_UNLCK.}(hj-8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chMhj~7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvfs_lock_file (C function)c.vfs_lock_filehNtauh1hhj!hhhNhNubh)}(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](j+)}(hinth]hint}(hj\8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjX8hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM- ubj)}(h h]h }(hjk8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjX8hhhjj8hM- ubj/)}(h vfs_lock_fileh]j5)}(h vfs_lock_fileh]h vfs_lock_file}(hj}8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjy8ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjX8hhhjj8hM- ubj)}(hS(struct file *filp, unsigned int cmd, struct file_lock *fl, struct file_lock *conf)h](j)}(hstruct file *filph](j )}(hjzh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8ubh)}(hhh]j5)}(hfileh]hfile}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)}jj8sbc.vfs_lock_fileasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8ubjX)}(hj[h]h*}(hj8hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj8ubj5)}(hfilph]hfilp}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj8ubj)}(hunsigned int cmdh](j+)}(hunsignedh]hunsigned}(hj 9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubj+)}(hinth]hint}(hj'9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj9ubj)}(h h]h }(hj59hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubj5)}(hcmdh]hcmd}(hjC9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj8ubj)}(hstruct file_lock *flh](j )}(hjzh]hstruct}(hj\9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjX9ubj)}(h h]h }(hji9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjX9ubh)}(hhh]j5)}(h file_lockh]h file_lock}(hjz9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjw9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|9modnameN classnameNjj)}j]j8c.vfs_lock_fileasbuh1hhjX9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjX9ubjX)}(hj[h]h*}(hj9hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjX9ubj5)}(hflh]hfl}(hj9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjX9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj8ubj)}(hstruct file_lock *confh](j )}(hjzh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubh)}(hhh]j5)}(h file_lockh]h file_lock}(hj9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j8c.vfs_lock_fileasbuh1hhj9ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubjX)}(hj[h]h*}(hj:hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9ubj5)}(hconfh]hconf}(hj#:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj8ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjX8hhhjj8hM- ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjT8hhhjj8hM- ubah}(h]jO8ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjj8hM- hjQ8hhubjc)}(hhh]h)}(hfile byte range lockh]hfile byte range lock}(hjM:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hjJ:hhubah}(h]h ]h"]h$]h&]uh1jbhjQ8hhhjj8hM- ubeh}(h]h ](jfunctioneh"]h$]h&]jjjje:jje:jjjuh1hhhhj!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 EXPORT_OP_ASYNC_LOCK in export_operations 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)}(hjo:h]h Parameters}(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 hji: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}(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)}(hH``unsigned int cmd`` type of locking operation (F_SETLK, F_GETLK, etc.) h](j)}(h``unsigned int cmd``h]j)}(hj:h]hunsigned int cmd}(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)}(h2type of locking operation (F_SETLK, F_GETLK, etc.)h]h2type of locking operation (F_SETLK, F_GETLK, etc.)}(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)}(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)}(hj9;h]hstruct file_lock *conf}(hj;;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7;ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hj3;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.}(hjR;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN;hM hjO;ubah}(h]h ]h"]h$]h&]uh1jhj3;ubeh}(h]h ]h"]h$]h&]uh1jhjN;hM hj:ubeh}(h]h ]h"]h$]h&]uh1jhji:ubh)}(h**Description**h]j)}(hjt;h]h Description}(hjv;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr;ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hji: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 hji: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}(hj;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 hji:ubh)}(hX<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 EXPORT_OP_ASYNC_LOCK in export_operations flags need to be set.h]hX<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 EXPORT_OP_ASYNC_LOCK in export_operations flags need to be set.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM hji: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 hji:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvfs_cancel_lock (C function)c.vfs_cancel_lockhNtauh1hhj!hhhNhNubh)}(hhh](j)}(h=int vfs_cancel_lock (struct file *filp, struct file_lock *fl)h]j)}(hhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj>hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:44: ./fs/locks.chM ubj)}(h h]h }(hj0>hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj>hhhj/>hM ubj/)}(hvfs_inode_has_locksh]j5)}(hvfs_inode_has_locksh]hvfs_inode_has_locks}(hjB>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj>>ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj>hhhj/>hM ubj)}(h(struct inode *inode)h]j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj^>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZ>ubj)}(h h]h }(hjk>hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjZ>ubh)}(hhh]j5)}(hinodeh]hinode}(hj|>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjy>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~>modnameN classnameNjj)}j]j)}jjD>sbc.vfs_inode_has_locksasbuh1hhjZ>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjZ>ubjX)}(hj[h]h*}(hj>hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjZ>ubj5)}(hinodeh]hinode}(hj>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjZ>ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjV>ubah}(h]h ]h"]h$]h&]jLjMuh1jhj>hhhj/>hM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj>hhhj/>hM ubah}(h]j>ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj/>hM hj>hhubjc)}(hhh]h)}(h%are any file locks held on **inode**?h](hare any file locks held on }(hj>hhhNhNubj)}(h **inode**h]hinode}(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:44: ./fs/locks.chM hj>hhubah}(h]h ]h"]h$]h&]uh1jbhj>hhhj/>hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj ?jj ?jjjuh1hhhhj!hNhNubj)}(h**Parameters** ``struct inode *inode`` inode to check for locks **Description** Return true if there are any FL_POSIX or FL_FLOCK locks currently set on **inode**.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)}(h1``struct inode *inode`` inode to check for locks h](j)}(h``struct inode *inode``h]j)}(hj4?h]hstruct inode *inode}(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)}(hinode to check for locksh]hinode to check for locks}(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+?ubah}(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)}(hSReturn true if there are any FL_POSIX or FL_FLOCK locks currently set on **inode**.h](hIReturn true if there are any FL_POSIX or FL_FLOCK locks currently set on }(hj?hhhNhNubj)}(h **inode**h]hinode}(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:44: ./fs/locks.chM hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"posix_lock_inode_wait (C function)c.posix_lock_inode_waithNtauh1hhj!hhhNhNubh)}(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](j+)}(hinth]hint}(hj?hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj)}(h h]h }(hj?hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?hhhj?hMubj/)}(hposix_lock_inode_waith]j5)}(hposix_lock_inode_waith]hposix_lock_inode_wait}(hj?hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj?hhhj?hMubj)}(h+(struct inode *inode, struct file_lock *fl)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ubh)}(hhh]j5)}(hinodeh]hinode}(hj!@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#@modnameN classnameNjj)}j]j)}jj?sbc.posix_lock_inode_waitasbuh1hhj?ubj)}(h h]h }(hjA@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ubjX)}(hj[h]h*}(hjO@hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj?ubj5)}(hinodeh]hinode}(hj\@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj?ubj)}(hstruct file_lock *flh](j )}(hjzh]hstruct}(hju@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjq@ubh)}(hhh]j5)}(h file_lockh]h file_lock}(hj@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j=@c.posix_lock_inode_waitasbuh1hhjq@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjq@ubjX)}(hj[h]h*}(hj@hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjq@ubj5)}(hflh]hfl}(hj@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjq@ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj?ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj?hhhj?hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj?hhhj?hMubah}(h]j?ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj?hMhj?hhubjc)}(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:47: ./fs/locks.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jbhj?hhhj?hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1hhhhj!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)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjAubj)}(hhh](j)}(hN``struct inode *inode`` inode of file to which lock request should be applied h](j)}(h``struct inode *inode``h]j)}(hj7Ah]hstruct inode *inode}(hj9AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Aubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhj1Aubj)}(hhh]h)}(h5inode of file to which lock request should be appliedh]h5inode of file to which lock request should be applied}(hjPAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLAhMhjMAubah}(h]h ]h"]h$]h&]uh1jhj1Aubeh}(h]h ]h"]h$]h&]uh1jhjLAhMhj.Aubj)}(h0``struct file_lock *fl`` The lock to be applied h](j)}(h``struct file_lock *fl``h]j)}(hjpAh]hstruct file_lock *fl}(hjrAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnAubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjjAubj)}(hhh]h)}(hThe lock to be appliedh]hThe lock to be applied}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj.Aubeh}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjAubh)}(h-Apply a POSIX style lock request to an inode.h]h-Apply a POSIX style lock request to an inode.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfcntl_getlease (C function)c.fcntl_getleasehNtauh1hhj!hhhNhNubh)}(hhh](j)}(h&int fcntl_getlease (struct file *filp)h]j)}(h%int fcntl_getlease(struct file *filp)h](j+)}(hinth]hint}(hjAhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjAhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj)}(h h]h }(hjAhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAhhhjAhMubj/)}(hfcntl_getleaseh]j5)}(hfcntl_getleaseh]hfcntl_getlease}(hjBhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj Bubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjAhhhjAhMubj)}(h(struct file *filp)h]j)}(hstruct file *filph](j )}(hjzh]hstruct}(hj-BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)Bubj)}(h h]h }(hj:BhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)Bubh)}(hhh]j5)}(hfileh]hfile}(hjKBhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMBmodnameN classnameNjj)}j]j)}jjBsbc.fcntl_getleaseasbuh1hhj)Bubj)}(h h]h }(hjkBhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)BubjX)}(hj[h]h*}(hjyBhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj)Bubj5)}(hfilph]hfilp}(hjBhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)Bubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj%Bubah}(h]h ]h"]h$]h&]jLjMuh1jhjAhhhjAhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjAhhhjAhMubah}(h]jAah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjAhMhjAhhubjc)}(hhh]h)}(h&Enquire what lease is currently activeh]h&Enquire what lease is currently active}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jbhjAhhhjAhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1hhhhj!hNhNubj)}(hXA**Parameters** ``struct file *filp`` the file 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)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjBubj)}(hhh]j)}(hX``struct file *filp`` the file 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](j)}(h``struct file *filp``h]j)}(hjBh]hstruct file *filp}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjBubj)}(hhh](h)}(hthe fileh]hthe file}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjCubh)}(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):}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjCubh)}(h/``F_RDLCK`` to indicate a shared lease is held.h](j)}(h ``F_RDLCK``h]hF_RDLCK}(hj,ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Cubh$ to indicate a shared lease is held.}(hj(ChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjCubh)}(h3``F_WRLCK`` to indicate an exclusive lease is held.h](j)}(h ``F_WRLCK``h]hF_WRLCK}(hjIChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjECubh( to indicate an exclusive lease is held.}(hjEChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjCubh)}(h)``F_UNLCK`` to indicate no lease is held.h](j)}(h ``F_UNLCK``h]hF_UNLCK}(hjfChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbCubh to indicate no lease is held.}(hjbChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjCubh)}(h(if a lease break is pending):h]h(if a lease break is pending):}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjCubj)}(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}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh+ to indicate an exclusive lease needs to be}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjCubj)}(hhh]h)}(h'changed to a shared lease (or removed).h]h'changed to a shared lease (or removed).}(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)}(h6``F_UNLCK`` to indicate the lease needs to be removed.h](j)}(h ``F_UNLCK``h]hF_UNLCK}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh+ to indicate the lease needs to be removed.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjCubh)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubeh}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjChMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#check_conflicting_open (C function)c.check_conflicting_openhNtauh1hhj!hhhNhNubh)}(hhh](j)}(hHint check_conflicting_open (struct file *filp, const int arg, int flags)h]j)}(hGint check_conflicting_open(struct file *filp, const int arg, int flags)h](j+)}(hinth]hint}(hj2DhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj.DhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj)}(h h]h }(hjADhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj.Dhhhj@DhMubj/)}(hcheck_conflicting_openh]j5)}(hcheck_conflicting_openh]hcheck_conflicting_open}(hjSDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjODubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj.Dhhhj@DhMubj)}(h-(struct file *filp, const int arg, int flags)h](j)}(hstruct file *filph](j )}(hjzh]hstruct}(hjoDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkDubj)}(h h]h }(hj|DhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjkDubh)}(hhh]j5)}(hfileh]hfile}(hjDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j)}jjUDsbc.check_conflicting_openasbuh1hhjkDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjkDubjX)}(hj[h]h*}(hjDhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjkDubj5)}(hfilph]hfilp}(hjDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjkDubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjgDubj)}(h const int argh](j )}(hjh]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjDubj+)}(hinth]hint}(hjDhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjDubj)}(h h]h }(hj EhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjDubj5)}(hargh]harg}(hjEhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjDubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjgDubj)}(h int flagsh](j+)}(hinth]hint}(hj1EhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-Eubj)}(h h]h }(hj?EhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-Eubj5)}(hflagsh]hflags}(hjMEhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-Eubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjgDubeh}(h]h ]h"]h$]h&]jLjMuh1jhj.Dhhhj@DhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj*Dhhhj@DhMubah}(h]j%Dah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj@DhMhj'Dhhubjc)}(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.}(hjwEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjtEhhubah}(h]h ]h"]h$]h&]uh1jbhj'Dhhhj@DhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1hhhhj!hNhNubj)}(hX**Parameters** ``struct file *filp`` file to check ``const int arg`` type of lease that we're trying to acquire ``int flags`` current lock flags **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)}(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)}(h$``struct file *filp`` file to check h](j)}(h``struct file *filp``h]j)}(hjEh]hstruct file *filp}(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)}(h file to checkh]h file to check}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjEubj)}(h=``const int arg`` type of lease that we're trying to acquire h](j)}(h``const int arg``h]j)}(hjEh]h const int arg}(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)}(h*type of lease that we're trying to acquireh]h,type of lease that we’re trying to acquire}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubj)}(h!``int flags`` current lock flags h](j)}(h ``int flags``h]j)}(hj*Fh]h int flags}(hj,FhhhNhNubah}(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.chMhj$Fubj)}(hhh]h)}(hcurrent lock flagsh]hcurrent lock flags}(hjCFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?FhMhj@Fubah}(h]h ]h"]h$]h&]uh1jhj$Fubeh}(h]h ]h"]h$]h&]uh1jhj?FhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjeFh]h Description}(hjgFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcFubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjEubh)}(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.}(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](hfcntl_setlease (C function)c.fcntl_setleasehNtauh1hhj!hhhNhNubh)}(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](j+)}(hinth]hint}(hjFhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjFhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFhhhjFhMubj/)}(hfcntl_setleaseh]j5)}(hfcntl_setleaseh]hfcntl_setlease}(hjFhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjFubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjFhhhjFhMubj)}(h-(unsigned int fd, struct file *filp, int arg)h](j)}(hunsigned int fdh](j+)}(hunsignedh]hunsigned}(hjFhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFubj+)}(hinth]hint}(hjGhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjFubj)}(h h]h }(hjGhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFubj5)}(hfdh]hfd}(hjGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjFubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjFubj)}(hstruct file *filph](j )}(hjzh]hstruct}(hj8GhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4Gubj)}(h h]h }(hjEGhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4Gubh)}(hhh]j5)}(hfileh]hfile}(hjVGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjSGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXGmodnameN classnameNjj)}j]j)}jjFsbc.fcntl_setleaseasbuh1hhj4Gubj)}(h h]h }(hjvGhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj4GubjX)}(hj[h]h*}(hjGhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj4Gubj5)}(hfilph]hfilp}(hjGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj4Gubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjFubj)}(hint argh](j+)}(hinth]hint}(hjGhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGubj5)}(hargh]harg}(hjGhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjGubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjFubeh}(h]h ]h"]h$]h&]jLjMuh1jhjFhhhjFhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjFhhhjFhMubah}(h]jFah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjFhMhjFhhubjc)}(hhh]h)}(hsets a lease on an open fileh]hsets a lease on an open file}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjGhhubah}(h]h ]h"]h$]h&]uh1jbhjFhhhjFhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1hhhhj!hNhNubj)}(hX**Parameters** ``unsigned int fd`` open file descriptor ``struct file *filp`` file pointer ``int arg`` type of lease to obtain 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)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM hj Hubj)}(hhh](j)}(h)``unsigned int fd`` open file descriptor h](j)}(h``unsigned int fd``h]j)}(hj1Hh]hunsigned int fd}(hj3HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Hubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM hj+Hubj)}(hhh]h)}(hopen file descriptorh]hopen file descriptor}(hjJHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFHhM hjGHubah}(h]h ]h"]h$]h&]uh1jhj+Hubeh}(h]h ]h"]h$]h&]uh1jhjFHhM hj(Hubj)}(h#``struct file *filp`` file pointer h](j)}(h``struct file *filp``h]j)}(hjjHh]hstruct file *filp}(hjlHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhHubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM hjdHubj)}(hhh]h)}(h file pointerh]h file pointer}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM hjHubah}(h]h ]h"]h$]h&]uh1jhjdHubeh}(h]h ]h"]h$]h&]uh1jhjHhM hj(Hubj)}(h``int arg`` type of lease to obtain 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](j)}(h ``int arg``h]j)}(hjHh]hint arg}(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.chMhjHubj)}(hhh](h)}(htype of lease to obtainh]htype of lease to obtain}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM hjHubh)}(hCall 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](hRCall this fcntl to establish a lease on the file. Note that you also need to call }(hjHhhhNhNubj)}(h ``F_SETSIG``h]hF_SETSIG}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh. to receive a signal when the lease is broken.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chM hjHubeh}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj(Hubeh}(h]h ]h"]h$]h&]uh1jhj Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"flock_lock_inode_wait (C function)c.flock_lock_inode_waithNtauh1hhj!hhhNhNubh)}(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](j+)}(hinth]hint}(hjIhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjIhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj)}(h h]h }(hj-IhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIhhhj,IhMubj/)}(hflock_lock_inode_waith]j5)}(hflock_lock_inode_waith]hflock_lock_inode_wait}(hj?IhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj;Iubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjIhhhj,IhMubj)}(h+(struct inode *inode, struct file_lock *fl)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hj[IhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWIubj)}(h h]h }(hjhIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjWIubh)}(hhh]j5)}(hinodeh]hinode}(hjyIhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjvIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{ImodnameN classnameNjj)}j]j)}jjAIsbc.flock_lock_inode_waitasbuh1hhjWIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjWIubjX)}(hj[h]h*}(hjIhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjWIubj5)}(hinodeh]hinode}(hjIhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjWIubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjSIubj)}(hstruct file_lock *flh](j )}(hjzh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubh)}(hhh]j5)}(h file_lockh]h file_lock}(hjIhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]jIc.flock_lock_inode_waitasbuh1hhjIubj)}(h h]h }(hj JhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubjX)}(hj[h]h*}(hjJhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjIubj5)}(hflh]hfl}(hj$JhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjIubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjSIubeh}(h]h ]h"]h$]h&]jLjMuh1jhjIhhhj,IhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjIhhhj,IhMubah}(h]jIah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj,IhMhjIhhubjc)}(hhh]h)}(h"Apply a FLOCK-style lock to a fileh]h"Apply a FLOCK-style lock to a file}(hjNJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjKJhhubah}(h]h ]h"]h$]h&]uh1jbhjIhhhj,IhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfJjjfJjjjuh1hhhhj!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)}(hjpJh]h Parameters}(hjrJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnJubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjjJubj)}(hhh](j)}(h6``struct inode *inode`` inode of the file to apply to h](j)}(h``struct inode *inode``h]j)}(hjJh]hstruct inode *inode}(hjJhhhNhNubah}(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)}(hinode of the file to apply toh]hinode of the file to apply to}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjJubj)}(h0``struct file_lock *fl`` The lock to be applied h](j)}(h``struct file_lock *fl``h]j)}(hjJh]hstruct file_lock *fl}(hjJhhhNhNubah}(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)}(hThe lock to be appliedh]hThe lock to be applied}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjJubeh}(h]h ]h"]h$]h&]uh1jhjjJubh)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjjJubh)}(h-Apply a FLOCK style lock request to an inode.h]h-Apply a FLOCK style lock request to an inode.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_flock (C function) c.sys_flockhNtauh1hhj!hhhNhNubh)}(hhh](j)}(h2long sys_flock (unsigned int fd, unsigned int cmd)h]j)}(h1long sys_flock(unsigned int fd, unsigned int cmd)h](j+)}(hlongh]hlong}(hjHKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjDKhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMWubj)}(h h]h }(hjWKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjDKhhhjVKhMWubj/)}(h sys_flockh]j5)}(h sys_flockh]h sys_flock}(hjiKhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjeKubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjDKhhhjVKhMWubj)}(h#(unsigned int fd, unsigned int cmd)h](j)}(hunsigned int fdh](j+)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubj+)}(hinth]hint}(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubj5)}(hfdh]hfd}(hjKhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj}Kubj)}(hunsigned int cmdh](j+)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubj+)}(hinth]hint}(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjKubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjKubj5)}(hcmdh]hcmd}(hjLhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj}Kubeh}(h]h ]h"]h$]h&]jLjMuh1jhjDKhhhjVKhMWubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj@KhhhjVKhMWubah}(h]j;Kah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjVKhMWhj=Khhubjc)}(hhh]j6-)}(hhh]j;-)}(hflock() system call.h]h)}(hj=Lh]hflock() system call.}(hj?LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMIhj;Lubah}(h]h ]h"]h$]h&]uh1j:-hj8LhhhjLLhNubah}(h]h ]h"]h$]h&]j-j uh1j5-hjLLhMIhj5Lhhubah}(h]h ]h"]h$]h&]uh1jbhj=KhhhjVKhMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbLjjbLjjjuh1hhhhj!hNhNubj)}(hX**Parameters** ``unsigned int fd`` the file descriptor to lock. ``unsigned int cmd`` the type of lock to apply. 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)}(hjlLh]h Parameters}(hjnLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjLubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMMhjfLubj)}(hhh](j)}(h1``unsigned int fd`` the file descriptor to lock. h](j)}(h``unsigned int fd``h]j)}(hjLh]hunsigned int fd}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMJhjLubj)}(hhh]h)}(hthe file descriptor to lock.h]hthe file descriptor to lock.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMJhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhMJhjLubj)}(hXd``unsigned int cmd`` the type of lock to apply. 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](j)}(h``unsigned int cmd``h]j)}(hjLh]hunsigned int cmd}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMThjLubj)}(hhh](h)}(hthe type of lock to apply.h]hthe type of lock to apply.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMKhjLubh)}(hVApply a ``FL_FLOCK`` style lock to an open file descriptor. The **cmd** can be one of:h](hApply a }(hjLhhhNhNubj)}(h ``FL_FLOCK``h]hFL_FLOCK}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh, style lock to an open file descriptor. The }(hjLhhhNhNubj)}(h**cmd**h]hcmd}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh can be one of:}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMMhjLubj6-)}(hhh](j;-)}(h``LOCK_SH`` -- a shared lock.h]h)}(hj$Mh](j)}(h ``LOCK_SH``h]hLOCK_SH}(hj)MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Mubh -- a shared lock.}(hj&MhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMPhj"Mubah}(h]h ]h"]h$]h&]uh1j:-hjMubj;-)}(h!``LOCK_EX`` -- an exclusive lock.h]h)}(hjJMh](j)}(h ``LOCK_EX``h]hLOCK_EX}(hjOMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLMubh -- an exclusive lock.}(hjLMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMQhjHMubah}(h]h ]h"]h$]h&]uh1j:-hjMubj;-)}(h'``LOCK_UN`` -- remove an existing lock.h]h)}(hjpMh](j)}(h ``LOCK_UN``h]hLOCK_UN}(hjuMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrMubh -- remove an existing lock.}(hjrMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMRhjnMubah}(h]h ]h"]h$]h&]uh1j:-hjMubj;-)}(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}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh) -- a ‘mandatory’ flock. (DEPRECATED)}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMShjMubah}(h]h ]h"]h$]h&]uh1j:-hjMubeh}(h]h ]h"]h$]h&]j-j uh1j5-hjAMhMPhjLubh)}(h7``LOCK_MAND`` support has been removed from the kernel.h](j)}(h ``LOCK_MAND``h]h LOCK_MAND}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh* support has been removed from the kernel.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMUhjLubeh}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhMThjLubeh}(h]h ]h"]h$]h&]uh1jhjfLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h locks_translate_pid (C function)c.locks_translate_pidhNtauh1hhj!hhhNhNubh)}(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]j5)}(hpid_th]hpid_t}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]j)}jlocks_translate_pidsbc.locks_translate_pidasbuh1hhj NhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMubj)}(h h]h }(hj5NhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj Nhhhj4NhMubj/)}(hlocks_translate_pidh]j5)}(hj1Nh]hlocks_translate_pid}(hjGNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCNubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj Nhhhj4NhMubj)}(h5(struct file_lock_core *fl, struct pid_namespace *ns)h](j)}(hstruct file_lock_core *flh](j )}(hjzh]hstruct}(hjbNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^Nubj)}(h h]h }(hjoNhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^Nubh)}(hhh]j5)}(hfile_lock_coreh]hfile_lock_core}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj}Nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]j/Nc.locks_translate_pidasbuh1hhj^Nubj)}(h h]h }(hjNhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^NubjX)}(hj[h]h*}(hjNhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj^Nubj5)}(hflh]hfl}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^Nubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZNubj)}(hstruct pid_namespace *nsh](j )}(hjzh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNubh)}(hhh]j5)}(h pid_namespaceh]h pid_namespace}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]j/Nc.locks_translate_pidasbuh1hhjNubj)}(h h]h }(hjOhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNubjX)}(hj[h]h*}(hjOhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjNubj5)}(hnsh]hns}(hj)OhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjNubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZNubeh}(h]h ]h"]h$]h&]jLjMuh1jhj Nhhhj4NhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjNhhhj4NhMubah}(h]jNah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj4NhMhjNhhubjc)}(hhh]h)}(h6translate a file_lock's fl_pid number into a namespaceh]h8translate a file_lock’s fl_pid number into a namespace}(hjSOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjPOhhubah}(h]h ]h"]h$]h&]uh1jbhjNhhhj4NhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkOjjkOjjjuh1hhhhj!hNhNubj)}(hX**Parameters** ``struct file_lock_core *fl`` The file_lock who's fl_pid should be translated ``struct pid_namespace *ns`` The namespace into which the pid should be translated **Description** Used to translate a fl_pid into a namespace virtual pid numberh](h)}(h**Parameters**h]j)}(hjuOh]h Parameters}(hjwOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsOubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjoOubj)}(hhh](j)}(hN``struct file_lock_core *fl`` The file_lock who's fl_pid should be translated h](j)}(h``struct file_lock_core *fl``h]j)}(hjOh]hstruct file_lock_core *fl}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjOubj)}(hhh]h)}(h/The file_lock who's fl_pid should be translatedh]h1The file_lock who’s fl_pid should be translated}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjOubj)}(hS``struct pid_namespace *ns`` The namespace into which the pid should be translated h](j)}(h``struct pid_namespace *ns``h]j)}(hjOh]hstruct pid_namespace *ns}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjOubj)}(hhh]h)}(h5The namespace into which the pid should be translatedh]h5The namespace into which the pid should be translated}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjOubeh}(h]h ]h"]h$]h&]uh1jhjoOubh)}(h**Description**h]j)}(hjPh]h Description}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjoOubh)}(h>Used to translate a fl_pid into a namespace virtual pid numberh]h>Used to translate a fl_pid into a namespace virtual pid number}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:47: ./fs/locks.chMhjoOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubeh}(h] file-locksah ]h"] file locksah$]h&]uh1hhhhhhhhK*ubh)}(hhh](h)}(hOther Functionsh]hOther Functions}(hj?PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjSah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjYShMhj@Shhubjc)}(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}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhjThhubah}(h]h ]h"]h$]h&]uh1jbhj@ShhhjYShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1hhhhjnr_to_write** ``get_block_t get_block`` the filesystem's block mapper function. **Description** This is a library function, which implements the writepages() address_space_operation.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:53: ./fs/mpage.chMhjTubj)}(hhh](j)}(hC``struct address_space *mapping`` address space structure to write h](j)}(h!``struct address_space *mapping``h]j)}(hjUh]hstruct address_space *mapping}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhjTubj)}(hhh]h)}(h address space structure to writeh]h address space structure to write}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjTubj)}(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)}(hj=Uh]hstruct writeback_control *wbc}(hj?UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Uubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj7Uubj)}(hhh]h)}(h?subtract the number of written pages from ***wbc->nr_to_write**h](h*subtract the number of written pages from }(hjVUhhhNhNubj)}(h***wbc->nr_to_write**h]h*wbc->nr_to_write}(hj^UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVUubeh}(h]h ]h"]h$]h&]uh1hhjRUhMhjSUubah}(h]h ]h"]h$]h&]uh1jhj7Uubeh}(h]h ]h"]h$]h&]uh1jhjRUhMhjTubj)}(hB``get_block_t get_block`` the filesystem's block mapper function. h](j)}(h``get_block_t get_block``h]j)}(hjUh]hget_block_t get_block}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhj~Uubj)}(hhh]h)}(h'the filesystem's block mapper function.h]h)the filesystem’s block mapper function.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhj~Uubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjTubeh}(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&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhjTubh)}(hVThis is a library function, which implements the writepages() address_space_operation.h]hVThis is a library function, which implements the writepages() address_space_operation.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:53: ./fs/mpage.chMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRight to check for (``MAY_READ``, ``MAY_WRITE``, ``MAY_EXEC``)h](hRight to check for (}(hjj[hhhNhNubj)}(h ``MAY_READ``h]hMAY_READ}(hjr[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj[ubh, }(hjj[hhhNhNubj)}(h ``MAY_WRITE``h]h MAY_WRITE}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj[ubh, }hjj[sbj)}(h ``MAY_EXEC``h]hMAY_EXEC}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj[ubh)}(hjj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjf[hM0hjg[ubah}(h]h ]h"]h$]h&]uh1jhjK[ubeh}(h]h ]h"]h$]h&]uh1jhjf[hM0hjZubeh}(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.chM2hjZubh)}(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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM2hjZubh)}(hEWhen checking for MAY_APPEND, MAY_WRITE must also be set in **mask**.h](h]ubj)}(hhh]h)}(hpath to get the reference toh]hpath to get the reference to}(hj]]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY]hM_hjZ]ubah}(h]h ]h"]h$]h&]uh1jhj>]ubeh}(h]h ]h"]h$]h&]uh1jhjY]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:56: ./fs/namei.chMahj]ubh)}(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.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMahj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj:bubj)}(hhh](j)}(h1``struct filename *filename`` filename structure h](j)}(h``struct filename *filename``h]j)}(hj_bh]hstruct filename *filename}(hjabhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]bubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjYbubj)}(hhh]h)}(hfilename structureh]hfilename structure}(hjxbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtbhM hjububah}(h]h ]h"]h$]h&]uh1jhjYbubeh}(h]h ]h"]h$]h&]uh1jhjtbhM hjVbubj)}(h$``unsigned int flags`` lookup flags h](j)}(h``unsigned int flags``h]j)}(hjbh]hunsigned int flags}(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.chM hjbubj)}(hhh]h)}(h lookup flagsh]h lookup flags}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hjVbubj)}(h7``struct path *parent`` pointer to struct path to fill h](j)}(h``struct path *parent``h]j)}(hjbh]hstruct path *parent}(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.chM hjbubj)}(hhh]h)}(hpointer to struct path to fillh]hpointer to struct path to fill}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hjVbubj)}(h%``struct qstr *last`` last component h](j)}(h``struct qstr *last``h]j)}(hj ch]hstruct qstr *last}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjcubj)}(hhh]h)}(hlast componenth]hlast component}(hj#chhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM hj cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM hjVbubj)}(h)``int *type`` type of the last component h](j)}(h ``int *type``h]j)}(hjCch]h int *type}(hjEchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAcubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj=cubj)}(hhh]h)}(htype of the last componenth]htype of the last component}(hj\chhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXchM hjYcubah}(h]h ]h"]h$]h&]uh1jhj=cubeh}(h]h ]h"]h$]h&]uh1jhjXchM hjVbubj)}(hH``const struct path *root`` pointer to struct path of the base directoryh](j)}(h``const struct path *root``h]j)}(hj|ch]hconst struct path *root}(hj~chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzcubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjvcubj)}(hhh]h)}(h,pointer to struct path of the base directoryh]h,pointer to struct path of the base directory}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjcubah}(h]h ]h"]h$]h&]uh1jhjvcubeh}(h]h ]h"]h$]h&]uh1jhjchM hjVbubeh}(h]h ]h"]h$]h&]uh1jhj:bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhji_mutex.h](h)}(h**Parameters**h]j)}(hjTlh]h Parameters}(hjVlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRlubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMx hjNlubj)}(hhh](j)}(h2``const char *name`` pathname component to lookup h](j)}(h``const char *name``h]j)}(hjslh]hconst char *name}(hjulhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqlubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMu hjmlubj)}(hhh]h)}(hpathname component to lookuph]hpathname component to lookup}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMu hjlubah}(h]h ]h"]h$]h&]uh1jhjmlubeh}(h]h ]h"]h$]h&]uh1jhjlhMu hjjlubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hjlh]hstruct dentry *base}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMv hjlubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMv hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMv hjjlubj)}(h<``int len`` maximum length **len** should be interpreted to h](j)}(h ``int len``h]j)}(hjlh]hint len}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMw hjlubj)}(hhh]h)}(h/maximum length **len** should be interpreted toh](hmaximum length }(hjlhhhNhNubj)}(h**len**h]hlen}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh should be interpreted to}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjlhMw hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMw hjjlubeh}(h]h ]h"]h$]h&]uh1jhjNlubh)}(h**Description**h]j)}(hj2mh]h Description}(hj4mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0mubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMy hjNlubh)}(hhNote that this routine is purely a helper for filesystem usage and should not be called by generic code.h]hhNote that this routine is purely a helper for filesystem usage and should not be called by generic code.}(hjHmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMy hjNlubh)}(h#The caller must hold base->i_mutex.h]h#The caller must hold base->i_mutex.}(hjWmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM| hjNlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhji_mutex.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjoubj)}(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)}(hjoh]hstruct mnt_idmap *idmap}(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/idmap of the mount the lookup is performed fromh]h/idmap of the mount the lookup is performed from}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM hjoubj)}(h2``const char *name`` pathname component to lookup h](j)}(h``const char *name``h]j)}(hjoh]hconst char *name}(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)}(hpathname component to lookuph]hpathname component to lookup}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM hjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjphM hjoubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hj6ph]hstruct dentry *base}(hj8phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4pubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj0pubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hjOphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKphM hjLpubah}(h]h ]h"]h$]h&]uh1jhj0pubeh}(h]h ]h"]h$]h&]uh1jhjKphM hjoubj)}(h<``int len`` maximum length **len** should be interpreted to h](j)}(h ``int len``h]j)}(hjoph]hint len}(hjqphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmpubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjipubj)}(hhh]h)}(h/maximum length **len** should be interpreted toh](hmaximum length }(hjphhhNhNubj)}(h**len**h]hlen}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh should be interpreted to}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphM hjpubah}(h]h ]h"]h$]h&]uh1jhjipubeh}(h]h ]h"]h$]h&]uh1jhjphM hjoubeh}(h]h ]h"]h$]h&]uh1jhjoubh)}(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:56: ./fs/namei.chM hjoubh)}(hhNote that this routine is purely a helper for filesystem usage and should not be called by generic code.h]hhNote that this routine is purely a helper for filesystem usage and should not be called by generic code.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjoubh)}(h#The caller must hold base->i_mutex.h]h#The caller must hold base->i_mutex.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjqubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjqubj)}(hstruct dentry *baseh](j )}(hjzh]hstruct}(hjWrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSrubj)}(h h]h }(hjdrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjSrubh)}(hhh]j5)}(hdentryh]hdentry}(hjurhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjrrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwrmodnameN classnameNjj)}j]jKqc.lookup_one_unlockedasbuh1hhjSrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjSrubjX)}(hj[h]h*}(hjrhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjSrubj5)}(hbaseh]hbase}(hjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjSrubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjqubj)}(hint lenh](j+)}(hinth]hint}(hjrhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjrubj5)}(hlenh]hlen}(hjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjrubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjqubeh}(h]h ]h"]h$]h&]jLjMuh1jhj qhhhjqhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjqhhhjqhM ubah}(h]jqah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjqhM hjqhhubjc)}(hhh]h)}(h5filesystem helper to lookup single pathname componenth]h5filesystem helper to lookup single pathname component}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hj shhubah}(h]h ]h"]h$]h&]uh1jbhjqhhhjqhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%sjj%sjjjuh1hhhhjd_inode stable, so this one avoids such problems. Note that this routine is purely a helper for filesystem usage and should not be called by generic code. The helper should be called without i_mutex held.h](h)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjvubj)}(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)}(hjvh]hstruct mnt_idmap *idmap}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjvubj)}(hhh]h)}(h/idmap of the mount the lookup is performed fromh]h/idmap of the mount the lookup is performed from}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhM hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhM hjvubj)}(h2``const char *name`` pathname component to lookup h](j)}(h``const char *name``h]j)}(hjwh]hconst char *name}(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.chM hj wubj)}(hhh]h)}(hpathname component to lookuph]hpathname component to lookup}(hj*whhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&whM hj'wubah}(h]h ]h"]h$]h&]uh1jhj wubeh}(h]h ]h"]h$]h&]uh1jhj&whM hjvubj)}(h6``struct dentry *base`` base directory to lookup from h](j)}(h``struct dentry *base``h]j)}(hjJwh]hstruct dentry *base}(hjLwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHwubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjDwubj)}(hhh]h)}(hbase directory to lookup fromh]hbase directory to lookup from}(hjcwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_whM hj`wubah}(h]h ]h"]h$]h&]uh1jhjDwubeh}(h]h ]h"]h$]h&]uh1jhj_whM hjvubj)}(h<``int len`` maximum length **len** should be interpreted to h](j)}(h ``int len``h]j)}(hjwh]hint len}(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.chM hj}wubj)}(hhh]h)}(h/maximum length **len** should be interpreted toh](hmaximum length }(hjwhhhNhNubj)}(h**len**h]hlen}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh should be interpreted to}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhM hjwubah}(h]h ]h"]h$]h&]uh1jhj}wubeh}(h]h ]h"]h$]h&]uh1jhjwhM hjvubeh}(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&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjvubh)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjvubh)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjvubh)}(hhNote that this routine is purely a helper for filesystem usage and should not be called by generic code.h]hhNote that this routine is purely a helper for filesystem usage and should not be called by generic code.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjvubh)}(h1The helper should be called without i_mutex held.h]h1The helper should be called without i_mutex held.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjxhhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM ubj)}(h h]h }(hjPxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj>xhhhjOxhM ubh)}(hhh]j5)}(hdentryh]hdentry}(hjaxhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^xubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcxmodnameN classnameNjj)}j]j)}jlookup_one_len_unlockedsbc.lookup_one_len_unlockedasbuh1hhj>xhhhjOxhM ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj>xhhhjOxhM ubjX)}(hj[h]h*}(hjxhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj>xhhhjOxhM ubj/)}(hlookup_one_len_unlockedh]j5)}(hjxh]hlookup_one_len_unlocked}(hjxhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjxubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj>xhhhjOxhM ubj)}(h0(const char *name, struct dentry *base, int len)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxubj+)}(hcharh]hchar}(hjxhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxubjX)}(hj[h]h*}(hjxhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubj5)}(hnameh]hname}(hjyhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjxubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjxubj)}(hstruct dentry *baseh](j )}(hjzh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj)}(h h]h }(hj&yhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubh)}(hhh]j5)}(hdentryh]hdentry}(hj7yhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj4yubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9ymodnameN classnameNjj)}j]j}xc.lookup_one_len_unlockedasbuh1hhjyubj)}(h h]h }(hjUyhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubjX)}(hj[h]h*}(hjcyhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjyubj5)}(hbaseh]hbase}(hjpyhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjxubj)}(hint lenh](j+)}(hinth]hint}(hjyhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubj5)}(hlenh]hlen}(hjyhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjxubeh}(h]h ]h"]h$]h&]jLjMuh1jhj>xhhhjOxhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj:xhhhjOxhM ubah}(h]j5xah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjOxhM hj7xhhubjc)}(hhh]h)}(h5filesystem helper to lookup single pathname componenth]h5filesystem helper to lookup single pathname component}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM hjyhhubah}(h]h ]h"]h$]h&]uh1jbhj7xhhhjOxhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1hhhhj|ubj)}(h h]h }(hjO|hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj>|ubh)}(hhh]j5)}(hdentryh]hdentry}(hj`|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj]|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjb|modnameN classnameNjj)}j]j{ c.vfs_createasbuh1hhj>|ubj)}(h h]h }(hj~|hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj>|ubjX)}(hj[h]h*}(hj|hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj>|ubj5)}(hdentryh]hdentry}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj>|ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjX{ubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j{ c.vfs_createasbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubj5)}(hmodeh]hmode}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjX{ubj)}(hbool want_exclh](j+)}(hj.h]hbool}(hj|hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj|ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubj5)}(h want_exclh]h want_excl}(hj}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjX{ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj{hhhj1{hM6 ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj{hhhj1{hM6 ubah}(h]j{ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj1{hM6 hj{hhubjc)}(hhh]h)}(hcreate new fileh]hcreate new file}(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&]uh1jbhj{hhhj1{hM6 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjW}jjW}jjjuh1hhhhjhhhNhNubah}(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.chMFhj6ubj)}(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&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMChjUubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMChjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMChjRubj)}(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.chMDhjubj)}(hhh]h)}(hinode of the parent directoryh]hinode of the parent directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjRubj)}(h8``struct dentry *dentry`` dentry of the child directory 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.chMEhjǍubj)}(hhh]h)}(hdentry of the child directoryh]hdentry of the child directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjǍubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(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:56: ./fs/namei.chMGhj6ubh)}(hRemove a directory.h]hRemove a directory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMGhj6ubh)}(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}(hj5hhhNhNubah}(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}(hjGhhhNhNubah}(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}(hjYhhhNhNubah}(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.chMIhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhji_mutex. 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_mutex 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}(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)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h'``struct inode *dir`` parent directory h](j)}(h``struct inode *dir``h]j)}(hj)h]hstruct 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:56: ./fs/namei.chMhj#ubj)}(hhh]h)}(hparent directoryh]hparent directory}(hjBhhhNhNubah}(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 *dentry`` victim h](j)}(h``struct dentry *dentry``h]j)}(hjbh]hstruct dentry *dentry}(hjdhhhNhNubah}(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)}(hvictimh]hvictim}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjubj)}(hT``struct inode **delegated_inode`` returns victim inode, if the inode is delegated. h](j)}(h"``struct inode **delegated_inode``h]j)}(hjh]hstruct 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&]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"The caller must hold dir->i_mutex.h]h"The caller must hold dir->i_mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjːubh)}(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_mutex 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_mutex 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.}(hj 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 }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This function will then take care to map the inode according to }(hjhhhNhNubj)}(h **idmap**h]hidmap}(hj3hhhNhNubah}(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}(hjEhhhNhNubah}(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.chMhjːubeh}(h]h ] kernelindentah"]h$]h&]uh1jhji_mutex 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_mutex 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}(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)}(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)}(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)}(hidmap of the mounth]hidmap of the mount}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubj)}(h!``struct inode *dir`` new parent 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)}(h new parenth]h new parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``struct dentry *new_dentry`` where to create the new link 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.chMhjubj)}(hhh]h)}(hwhere to create the new linkh]hwhere to create the new link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hL``struct inode **delegated_inode`` returns inode needing a delegation break h](j)}(h"``struct inode **delegated_inode``h]j)}(hjޙh]hstruct inode **delegated_inode}(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(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&]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 dir->i_mutexh]h!The caller must hold dir->i_mutex}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhj՘ubh)}(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_mutex 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_mutex before doing so.}(hj>hhhNhNubah}(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.}(hjMhhhNhNubah}(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}(hjdhhhNhNubah}(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}(hjvhhhNhNubah}(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.chMhj՘ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj` 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_mutex 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_mutex in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_mutex on parents, which works but leads to some truly excessive locking].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)}(hS``struct renamedata *rd`` pointer to :c:type:`struct renamedata ` info h](j)}(h``struct renamedata *rd``h]j)}(hj›h]hstruct renamedata *rd}(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)}(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 ](xrefjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocfilesystems/api-summary refdomainjreftypetype refexplicitrefwarnjj)}j]sb reftarget renamedatauh1hhjכhM\hjۛubh info}(hjۛhhhNhNubeh}(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)}(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)}(h:The caller must hold multiple mutexes--see lock_rename()).h]h:The caller must hold multiple mutexes--see lock_rename()).}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM^hjubh)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chM`hjubh)}(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.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMghjubh)}(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:}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMkhjubj)}(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_mutex 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_mutex in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_mutex on parents, which works but leads to some truly excessive locking].h]j )}(hhh](j;-)}(hwe can get into loop creation.h]h)}(hjh]hwe can get into loop creation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMohjubah}(h]h ]h"]h$]h&]uh1j:-hj|ubj;-)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMphjubah}(h]h ]h"]h$]h&]uh1j:-hj|ubj;-)}(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_mutex 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_mutex 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_mutex 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMthjubah}(h]h ]h"]h$]h&]uh1j:-hj|ubj;-)}(hXconversion from fhandle to dentry may come in the wrong moment - when we are removing the target. Solution: we will have to grab ->i_mutex in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_mutex 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_mutex in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_mutex 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_mutex in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on ->i_mutex on parents, which works but leads to some truly excessive locking].}(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&]uh1j:-hj|ubeh}(h]h ]h"]h$]h&]jm loweralphajohjpj!uh1j hjxubah}(h]h ]h"]h$]h&]uh1jhjhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjget_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.chMhjubj)}(hhh](j)}(h?``struct dentry *dentry`` dentry on which to get symbolic link h](j)}(h``struct dentry *dentry``h]j)}(hj3h]hstruct dentry *dentry}(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$dentry on which to get symbolic linkh]h$dentry on which to get symbolic link}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubj)}(hK``struct delayed_call *done`` caller needs to free returned data with this h](j)}(h``struct delayed_call *done``h]j)}(hjlh]hstruct delayed_call *done}(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)}(h,caller needs to free returned data with thish]h,caller needs to free returned data with this}(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:56: ./fs/namei.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(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.}(hj̡hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:56: ./fs/namei.chMhjubh)}(h6Does not work on "special" symlinks like /proc/$$/fd/Nh]h:Does not work on “special” symlinks like /proc/$$/fd/N}(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&]uh1jhj``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:59: ./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)}(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:59: ./block/bio.chM$hj/ubj)}(hhh]h)}(hoperation and flags for bioh]hoperation and flags for bio}(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:59: ./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(), }(hjhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chM&hjubah}(h]h ]h"]h$]h&]uh1jhjhM&hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj``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:59: ./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ѪhMhjubj)}(h5``struct bio_set *bs`` the bio_set to allocate from. h](j)}(h``struct bio_set *bs``h]j)}(hjh]hstruct bio_set *bs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubj)}(hhh]h)}(hthe bio_set to allocate from.h]hthe bio_set to allocate from.}(hjhhhNhNubah}(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&]uh1jhjکubh)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjکubh)}(h+Allocate a bio from the mempools in **bs**.h](h$Allocate a bio from the mempools in }(hjFhhhNhNubj)}(h**bs**h]hbs}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./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 }(hjghhhNhNubj)}(h``__GFP_DIRECT_RECLAIM``h]h__GFP_DIRECT_RECLAIM}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubhX 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.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./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:59: ./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:59: ./block/bio.chMhjک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:59: ./block/bio.chMhjکubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./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.}(hjͫhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjکubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj``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:59: ./block/bio.chMUhjubj)}(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&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjXubeh}(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:59: ./block/bio.chMWhj<ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMWhj<ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chM\hj<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:59: ./block/bio.chM`hj<ubh)}(h/Pointer to new bio on success, NULL on failure.h]h/Pointer to new bio on success, NULL on failure.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chM`hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`, 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)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chM(hj,ubj)}(hhh]j)}(h0``struct bio *bio`` bio to release reference to h](j)}(h``struct bio *bio``h]j)}(hjQh]hstruct bio *bio}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chM%hjKubj)}(hhh]h)}(hbio to release reference toh]hbio to release reference to}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM%hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhM%hjHubah}(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:59: ./block/bio.chM'hj,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 ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjbiouh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chM'hjubhh, 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&]uh1hhjͯhM'hjubah}(h]h ]h"]h$]h&]uh1jhjͯhM'hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj hM[ubjX)}(hj[h]h*}(hjLhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhj hM[ubj/)}(hbio_alloc_cloneh]j5)}(hj;h]hbio_alloc_clone}(hj]hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjYubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj hM[ubj)}(hO(struct block_device *bdev, struct bio *bio_src, gfp_t gfp, struct bio_set *bs)h](j)}(hstruct block_device *bdevh](j )}(hjzh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjtubh)}(hhh]j5)}(h block_deviceh]h block_device}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j9c.bio_alloc_cloneasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjtubjX)}(hj[h]h*}(hj°hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjtubj5)}(hbdevh]hbdev}(hjϰhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjtubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubj)}(hstruct bio *bio_srch](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j9c.bio_alloc_cloneasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj2hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbio_srch]hbio_src}(hj?hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubj)}(h gfp_t gfph](h)}(hhh]j5)}(hgfp_th]hgfp_t}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j9c.bio_alloc_cloneasbuh1hhjTubj)}(h h]h }(hjyhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjTubj5)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjTubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubj)}(hstruct bio_set *bsh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hbio_seth]hbio_set}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j9c.bio_alloc_cloneasbuh1hhjubj)}(h h]h }(hjܱhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbsh]hbs}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj hM[ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj hM[ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj hM[hjhhubjc)}(hhh]h)}(h1clone a bio that shares the original bio's biovech]h3clone a bio that shares the original bio’s biovec}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMPhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj hM[ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1hhhhjbi_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:59: ./block/bio.chMhj߼ubj)}(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:59: ./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)}(hj=h]hstruct page *page}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhj7ubj)}(hhh]h)}(hstart page to addh]hstart page to add}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjubj)}(h7``unsigned int len`` vec entry length, may cross pages h](j)}(h``unsigned int len``h]j)}(hjvh]hunsigned int len}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjpubj)}(hhh]h)}(h!vec entry length, may cross pagesh]h!vec entry length, may cross pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``unsigned int offset`` vec entry offset relative to **page**, may cross pages 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](j)}(h``unsigned int offset``h]j)}(hjh]hunsigned int offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubj)}(hhh](h)}(h6vec entry offset relative to **page**, may cross pagesh](hvec entry offset relative to }(hjȽhhhNhNubj)}(h**page**h]hpage}(hjнhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȽubh, may cross pages}(hjȽhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjŽubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĽhMhjŽubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjĽhMhjubeh}(h]h ]h"]h$]h&]uh1jhj߼ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj(struct bio *bio, struct folio *folio, size_t len, size_t off)h](j)}(hstruct bio *bioh](j )}(hjzh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjaubh)}(hhh]j5)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjKsbc.bio_add_folioasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjaubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjaubj5)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj]ubj)}(hstruct folio *folioh](j )}(hjzh]hstruct}(hj׾hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjӾubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjӾubh)}(hhh]j5)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.bio_add_folioasbuh1hhjӾubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjӾubjX)}(hj[h]h*}(hj!hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjӾubj5)}(hfolioh]hfolio}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjӾubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj]ubj)}(h size_t lenh](h)}(hhh]j5)}(hsize_th]hsize_t}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]jc.bio_add_folioasbuh1hhjCubj)}(h h]h }(hjhhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjCubj5)}(hlenh]hlen}(hjvhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj]ubj)}(h size_t offh](h)}(hhh]j5)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.bio_add_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hoffh]hoff}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj]ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj%hhhj6hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj!hhhj6hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj6hMhjhhubjc)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chM hjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj ubj)}(h&``struct folio *folio`` Folio to add. h](j)}(h``struct folio *folio``h]j)}(hjbh]hstruct folio *folio}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhj\ubj)}(hhh]h)}(h Folio to add.h]h Folio to add.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhj ubj)}(h5``size_t len`` How many bytes from the folio to add. 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:59: ./block/bio.chMhjubj)}(hhh]h)}(h%How many bytes from the folio to add.h]h%How many bytes from the folio to add.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h0``size_t off`` First byte in this folio to add. h](j)}(h``size_t off``h]j)}(hjh]h size_t off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubj)}(hhh]h)}(h First byte in this folio to add.h]h First byte in this folio to add.}(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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubh)}(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:59: ./block/bio.chMhjubh)}(h **Return**h]j)}(hjHh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubh)}(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:59: ./block/bio.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjki_complete() or returns with an error other than -EIOCBQUEUED. The caller needs to check if the bio is flagged BIO_NO_PAGE_REF on IO completion. If it isn't, then pages should be released. The function tries, but does not guarantee, to pin as many pages as fit into the bio, or are requested in **iter**, whatever is smaller. If MM encounters an error pinning the requested pages, it stops. Error is returned only if 0 pages could be pinned.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:59: ./block/bio.chMhjubj)}(hhh](j)}(h(``struct bio *bio`` bio to add pages 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:59: ./block/bio.chMhjubj)}(hhh]h)}(hbio to add pages toh]hbio to add pages to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hI``struct iov_iter *iter`` iov iterator describing the region to be added h](j)}(h``struct iov_iter *iter``h]j)}(hj7h]hstruct iov_iter *iter}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhj1ubj)}(hhh]h)}(h.iov iterator describing the region to be addedh]h.iov iterator describing the region to be added}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubeh}(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:59: ./block/bio.chMhjubh)}(hXThis takes either an iterator pointing to user memory, or one pointing to kernel pages (BVEC iterator). If we're adding user pages, we pin them and map them into the kernel. On IO completion, the caller should put those pages. For bvec based iterators bio_iov_iter_get_pages() uses the provided bvecs rather than copying them. Hence anyone issuing kiocb based IO needs to ensure the bvecs and pages stay referenced until the submitted I/O is completed by a call to ->ki_complete() or returns with an error other than -EIOCBQUEUED. The caller needs to check if the bio is flagged BIO_NO_PAGE_REF on IO completion. If it isn't, then pages should be released.h]hXThis takes either an iterator pointing to user memory, or one pointing to kernel pages (BVEC iterator). If we’re adding user pages, we pin them and map them into the kernel. On IO completion, the caller should put those pages. For bvec based iterators bio_iov_iter_get_pages() uses the provided bvecs rather than copying them. Hence anyone issuing kiocb based IO needs to ensure the bvecs and pages stay referenced until the submitted I/O is completed by a call to ->ki_complete() or returns with an error other than -EIOCBQUEUED. The caller needs to check if the bio is flagged BIO_NO_PAGE_REF on IO completion. If it isn’t, then pages should be released.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubh)}(hThe function tries, but does not guarantee, to pin as many pages as fit into the bio, or are requested in **iter**, whatever is smaller. If MM encounters an error pinning the requested pages, it stops. Error is returned only if 0 pages could be pinned.h](hjThe function tries, but does not guarantee, to pin as many pages as fit into the bio, or are requested in }(hjhhhNhNubj)}(h**iter**h]hiter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, whatever is smaller. If MM encounters an error pinning the requested pages, it stops. Error is returned only if 0 pages could be pinned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj` 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:59: ./block/bio.chMhjubj)}(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:59: ./block/bio.chMhjubj)}(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 ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjbiouh1hhjhMhjubh which describes the I/O}(hjhhhNhNubeh}(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)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubh)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubh)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbi_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:59: ./block/bio.chMPhjubj)}(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:59: ./block/bio.chMNhjubj)}(hhh]h)}(hdestination bioh]hdestination bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjubj)}(h``struct bio *src`` source bio h](j)}(h``struct bio *src``h]j)}(hj5h]hstruct bio *src}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMMhj/ubj)}(hhh]h)}(h source bioh]h source bio}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMMhjubeh}(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:59: ./block/bio.chMOhjubh)}(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:59: ./block/bio.chMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbi_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:59: ./block/bio.chMhjubj)}(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:59: ./block/bio.chMhjubj)}(hhh]h)}(hbioh]hbio}(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&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMhjubj)}(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:59: ./block/bio.chMhj+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:59: ./block/bio.chMhj+ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvoid bio_trim(struct bio *bio, sector_t offset, sector_t size)h](j+)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjLhhhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLhhhj^hMNubj/)}(hbio_trimh]j5)}(hbio_trimh]hbio_trim}(hjqhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjmubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjLhhhj^hMNubj)}(h1(struct bio *bio, sector_t offset, sector_t size)h](j)}(hstruct bio *bioh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjssb c.bio_trimasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbioh]hbio}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hsector_t offseth](h)}(hhh]j5)}(hsector_th]hsector_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.bio_trimasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hoffseth]hoffset}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h sector_t sizeh](h)}(hhh]j5)}(hsector_th]hsector_t}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]j c.bio_trimasbuh1hhjCubj)}(h h]h }(hjhhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjCubj5)}(hsizeh]hsize}(hjvhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjLhhhj^hMNubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjHhhhj^hMNubah}(h]jCah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj^hMNhjEhhubjc)}(hhh]h)}(h trim a bioh]h trim a bio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMFhjhhubah}(h]h ]h"]h$]h&]uh1jbhjEhhhj^hMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj``sector_t size`` size we want to trim **bio** to, in sectors h](j)}(h``sector_t size``h]j)}(hjah]h sector_t size}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMIhj[ubj)}(hhh]h)}(h+size we want to trim **bio** to, in sectorsh](hsize we want to trim }(hjzhhhNhNubj)}(h**bio**h]hbio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh to, in sectors}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMIhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMIhjubeh}(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:59: ./block/bio.chMKhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:59: ./block/bio.chMKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjstart\(\)** 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chK.hjubj)}(hhh](j)}(h)``struct file *file`` file we initialize h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chK+hjubj)}(hhh]h)}(hfile we initializeh]hfile we initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK+hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hK+hjubj)}(hXl``const struct seq_operations *op`` method table describing the sequence 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](j)}(h#``const struct seq_operations *op``h]j)}(hj.h]hconst struct seq_operations *op}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chK5hj(ubj)}(hhh](h)}(h$method table describing the sequenceh]h$method table describing the sequence}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chK,hjDubh)}(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 }(hjVhhhNhNubj)}(h**file**h]hfile}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh., associating it with a sequence described by }(hjVhhhNhNubj)}(h**op**h]hop}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh. }(hjVhhhNhNubj)}(h**op->start\(\)**h]h op->start()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubhA sets the iterator up and returns the first element of sequence. }(hjVhhhNhNubj)}(h**op->stop\(\)**h]h op->stop()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh shuts it down. }(hjVhhhNhNubj)}(h**op->next\(\)**h]h op->next()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh( returns the next element of sequence. }(hjVhhhNhNubj)}(h**op->show\(\)**h]h op->show()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh prints element into the buffer. In case of error ->start() and ->next() return ERR_PTR(error). In the end of sequence they return }(hjVhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh. ->show() returns 0 in case of success and negative number in case of error. Returning SEQ_SKIP means “discard this element and move on”.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chK.hjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChK5hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chK7hjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chK6hjubj)}(hhh]h)}(hGpointer in **file->private_data**. This pointer should not be modified.h](h pointer in }(hj&hhhNhNubj)}(h**file->private_data**h]hfile->private_data}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh&. This pointer should not be modified.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chK7hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hK6hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjread() 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:62: ./fs/seq_file.chKhj:hhubah}(h]h ]h"]h$]h&]uh1jbhjnhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1hhhhjf_op->read()h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chKhjYubj)}(hhh](j)}(h,``struct file *file`` the file to read from h](j)}(h``struct file *file``h]j)}(hj~h]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chKhjxubj)}(hhh]h)}(hthe file to read fromh]hthe file to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhKhjuubj)}(h+``char __user *buf`` the buffer to read to h](j)}(h``char __user *buf``h]j)}(hjh]hchar __user *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chKhjubj)}(hhh]h)}(hthe buffer to read toh]hthe buffer to read to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjuubj)}(h4``size_t size`` the maximum number of bytes to read 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&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chKhjubj)}(hhh]h)}(h#the maximum number of bytes to readh]h#the maximum number of bytes to read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjuubj)}(hL``loff_t *ppos`` the current position in the file Ready-made ->f_op->read()h](j)}(h``loff_t *ppos``h]j)}(hj)h]h loff_t *ppos}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chKhj#ubj)}(hhh](h)}(h the current position in the fileh]h the current position in the file}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chKhj?ubh)}(hReady-made ->f_op->read()h]hReady-made ->f_op->read()}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chKhj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hKhjuubeh}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjloff_t seq_lseek(struct file *file, loff_t offset, int whence)h](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}j seq_lseeksb c.seq_lseekasbuh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM4ubj/)}(h seq_lseekh]j5)}(hjh]h seq_lseek}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM4ubj)}(h.(struct file *file, loff_t offset, int whence)h](j)}(hstruct file *fileh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.seq_lseekasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj.hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hfileh]hfile}(hj;hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t offseth](h)}(hhh]j5)}(hloff_th]hloff_t}(hjWhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j c.seq_lseekasbuh1hhjPubj)}(h h]h }(hjuhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjPubj5)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int whenceh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwhenceh]hwhence}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM4ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM4ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM4hjhhubjc)}(hhh]h)}(h'->llseek() method for sequential files.h]h'->llseek() method for sequential files.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM-hjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjf_op->llseek()h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM1hjubj)}(hhh](j)}(h+``struct file *file`` the file in question 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:62: ./fs/seq_file.chM.hjubj)}(hhh]h)}(hthe file in questionh]hthe file in question}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM.hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM.hjubj)}(h``loff_t offset`` new position h](j)}(h``loff_t offset``h]j)}(hj\h]h loff_t offset}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM/hjVubj)}(hhh]h)}(h new positionh]h new position}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM/hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM/hjubj)}(hS``int whence`` 0 for absolute, 1 for relative position Ready-made ->f_op->llseek()h](j)}(h``int whence``h]j)}(hjh]h int whence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM1hjubj)}(hhh](h)}(h'0 for absolute, 1 for relative positionh]h'0 for absolute, 1 for relative position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM0hjubh)}(hReady-made ->f_op->llseek()h]hReady-made ->f_op->llseek()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM2hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjf_op->release() if you don't have private data to destroy.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM]hjJubj)}(hhh](j)}(h"``struct inode *inode`` its inode h](j)}(h``struct inode *inode``h]j)}(hjoh]hstruct inode *inode}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMZhjiubj)}(hhh]h)}(h its inodeh]h its inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjfubj)}(h``struct file *file`` file in question Frees the structures associated with sequential file; can be used as ->f_op->release() if you don't have private data to destroy.h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM]hjubj)}(hhh](h)}(hfile in questionh]hfile in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM[hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM]hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjfubeh}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj(struct seq_file *m, const struct path *path, const char *esc)h](j)}(hstruct seq_file *mh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hseq_fileh]hseq_file}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb c.seq_pathasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj=hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hjh]hm}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hconst struct path *pathh](j )}(hjh]hconst}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubj )}(hjzh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubh)}(hhh]j5)}(hpathh]hpath}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j+ c.seq_pathasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj^ubj5)}(hpathh]hpath}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hconst char *esch](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj$hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hesch]hesc}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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:62: ./fs/seq_file.chMhjXhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1hhhhj``const char *esc`` set of characters to escape in the output h](j)}(h``const char *esc``h]j)}(hjh]hconst char *esc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**Description**h]j)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjwubh)}(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:62: ./fs/seq_file.chMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhj6ubj)}(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&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjUubj)}(hhh]h)}(hthe seq_file handleh]hthe seq_file handle}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjRubj)}(h/``struct file *file`` the struct file to print h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh]h)}(hthe struct file to printh]hthe struct file to print}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubj)}(h>``const char *esc`` set of characters to escape in the output h](j)}(h``const char *esc``h]j)}(hjh]hconst char *esc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh]h)}(h)set of characters to escape in the outputh]h)set of characters to escape in the output}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhj6ubh)}(h%return the absolute path to the file.h]h%return the absolute path to the file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjop->start().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhj ubj)}(hhh](j)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hj0h]hstruct hlist_head *head}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhj*ubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(h2``loff_t pos`` the start position of the sequence h](j)}(h``loff_t pos``h]j)}(hjih]h loff_t pos}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjcubj)}(hhh]h)}(h"the start position of the sequenceh]h"the start position of the sequence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'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&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhj ubh)}(h Called at seq_file->op->start().h]h Called at seq_file->op->start().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjop->start(). Call this function if you want to print a header at the top of the output.h](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjHubj)}(hhh](j)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hjmh]hstruct hlist_head *head}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjgubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubj)}(h2``loff_t pos`` the start position of the sequence h](j)}(h``loff_t pos``h]j)}(hjh]h loff_t pos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh]h)}(h"the start position of the sequenceh]h"the start position of the sequence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubeh}(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&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjHubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjop->next().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh](j)}(h!``void *v`` the current iterator h](j)}(h ``void *v``h]j)}(hjh]hvoid *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh]h)}(hthe current iteratorh]hthe current iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hj2h]hstruct hlist_head *head}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhj,ubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h&``loff_t *ppos`` the current position h](j)}(h``loff_t *ppos``h]j)}(hjkh]h loff_t *ppos}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjeubj)}(hhh]h)}(hthe current positionh]hthe current position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(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&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubh)}(hCalled at seq_file->op->next().h]hCalled at seq_file->op->next().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjop->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)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjJubj)}(hhh](j)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hjoh]hstruct hlist_head *head}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjiubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(h2``loff_t pos`` the start position of the sequence h](j)}(h``loff_t pos``h]j)}(hjh]h loff_t pos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh]h)}(h"the start position of the sequenceh]h"the start position of the sequence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubeh}(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&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjJubh)}(h Called at seq_file->op->start().h]h Called at seq_file->op->start().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjJubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjop->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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh](j)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hjh]hstruct hlist_head *head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``loff_t pos`` the start position of the sequence h](j)}(h``loff_t pos``h]j)}(hjh]h loff_t pos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubj)}(hhh]h)}(h"the start position of the sequenceh]h"the start position of the sequence}(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&]uh1jhjubh)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubh)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubh)}(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().}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubh)}(hhh]j5)}(h hlist_headh]h hlist_head}(hj\hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]jc.seq_hlist_next_rcuasbuh1hhj:ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj:ubj5)}(hheadh]hhead}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.seq_hlist_next_rcuasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM0ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj{hhhjhM0ubah}(h]jvah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM0hjxhhubjc)}(hhh]h)}(h7move to the next position of the hlist protected by RCUh]h7move to the next position of the hlist protected by RCU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM%hjhhubah}(h]h ]h"]h$]h&]uh1jbhjxhhhjhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1hhhhjop->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)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM)hj0ubj)}(hhh](j)}(h!``void *v`` the current iterator h](j)}(h ``void *v``h]j)}(hjUh]hvoid *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM&hjOubj)}(hhh]h)}(hthe current iteratorh]hthe current iterator}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM&hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhM&hjLubj)}(h2``struct hlist_head *head`` the head of the hlist h](j)}(h``struct hlist_head *head``h]j)}(hjh]hstruct hlist_head *head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM'hjubj)}(hhh]h)}(hthe head of the hlisth]hthe head of the hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjLubj)}(h&``loff_t *ppos`` the current position h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM(hjubj)}(hhh]h)}(hthe current positionh]hthe current position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjLubeh}(h]h ]h"]h$]h&]uh1jhj0ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM*hj0ubh)}(hCalled at seq_file->op->next().h]hCalled at seq_file->op->next().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM*hj0ubh)}(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().}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM,hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjop->start().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMChj ubj)}(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)}(hj.h]h struct hlist_head __percpu *head}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM@hj(ubj)}(hhh]h)}(h-pointer to percpu array of struct hlist_headsh]h-pointer to percpu array of struct hlist_heads}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM@hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM@hj%ubj)}(h%``int *cpu`` pointer to cpu "cursor" h](j)}(h ``int *cpu``h]j)}(hjgh]hint *cpu}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMAhjaubj)}(hhh]h)}(hpointer to cpu "cursor"h]hpointer to cpu “cursor”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMAhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMAhj%ubj)}(h*``loff_t pos`` start position of sequence h](j)}(h``loff_t pos``h]j)}(hjh]h loff_t pos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMBhjubj)}(hhh]h)}(hstart position of sequenceh]hstart position of sequence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMBhj%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&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMDhj ubh)}(h Called at seq_file->op->start().h]h Called at seq_file->op->start().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMDhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjop->next().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:62: ./fs/seq_file.chMZhj!ubj)}(hhh](j)}(h*``void *v`` pointer to current hlist_node h](j)}(h ``void *v``h]j)}(hjFh]hvoid *v}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMWhj@ubj)}(hhh]h)}(hpointer to current hlist_nodeh]hpointer to current hlist_node}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMWhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMWhj=ubj)}(hS``struct hlist_head __percpu *head`` pointer to percpu array of struct hlist_heads h](j)}(h$``struct hlist_head __percpu *head``h]j)}(hjh]h struct hlist_head __percpu *head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMXhjyubj)}(hhh]h)}(h-pointer to percpu array of struct hlist_headsh]h-pointer to percpu array of struct hlist_heads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMXhj=ubj)}(h%``int *cpu`` pointer to cpu "cursor" h](j)}(h ``int *cpu``h]j)}(hjh]hint *cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMYhjubj)}(hhh]h)}(hpointer to cpu "cursor"h]hpointer to cpu “cursor”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhj=ubj)}(h+``loff_t *pos`` start position of sequence h](j)}(h``loff_t *pos``h]j)}(hjh]h loff_t *pos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chMZhjubj)}(hhh]h)}(hstart position of sequenceh]hstart position of sequence}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMZhj=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:62: ./fs/seq_file.chM\hj!ubh)}(hCalled at seq_file->op->next().h]hCalled at seq_file->op->next().}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:62: ./fs/seq_file.chM\hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj` 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)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/filesystems.chK@hjMubj)}(hhh]j)}(hX``struct file_system_type * fs`` the file system structure 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](j)}(h ``struct file_system_type * fs``h]j)}(hjrh]hstruct file_system_type * fs}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/filesystems.chKDhjlubj)}(hhh](h)}(hthe file system structureh]hthe file system structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/filesystems.chK=hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/filesystems.chK?hjubh)}(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 }(hjhhhNhNubh)}(h4:c:type:`struct file_system_type `h]j)}(hjh]hstruct file_system_type}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjfile_system_typeuh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/filesystems.chKChjubhw that is passed is linked into the kernel structures and must not be freed until the file system has been unregistered.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKChjubeh}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhKDhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj` structure may be freed or reused.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:65: ./fs/filesystems.chKehjubj)}(hhh]j)}(hX]``struct file_system_type * fs`` filesystem to unregister 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](j)}(h ``struct file_system_type * fs``h]j)}(hjh]hstruct file_system_type * fs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/filesystems.chKhhjubj)}(hhh](h)}(hfilesystem to unregisterh]hfilesystem to unregister}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/filesystems.chKbhj$ubh)}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:65: ./fs/filesystems.chKdhj$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 }(hjEhhhNhNubh)}(h4:c:type:`struct file_system_type `h]j)}(hjOh]hstruct file_system_type}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjfile_system_typeuh1hhj#hKhhjEubh" structure may be freed or reused.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hKhhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjSubh)}(hhh]j5)}(hinodeh]hinode}(hjuhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]jc.wbc_attach_fdatawrite_inodeasbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjSubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjSubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjSubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h&associate wbc and inode for fdatawriteh]h&associate wbc and inode for fdatawrite}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhji_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:68: ./fs/fs-writeback.chMhj 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:68: ./fs/fs-writeback.chMhj 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 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)}(hj2 h]h Description}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chMhj 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.}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chMhj 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).}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chMhj 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.}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM!hj 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, }(hju hhhNhNubj)}(h**wbc**h]hwbc}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju 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.}(hju hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM'hj 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:68: ./fs/fs-writeback.chM0hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdirtied_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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hjubj)}(hhh](j)}(h&``struct inode *inode`` inode to mark h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hjubj)}(hhh]h)}(h inode to markh]h inode to mark}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(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)}(hjh]h int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hj ubj)}(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.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM 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)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hjubh)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hjubh)}(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.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhM" ubj/)}(hwrite_inode_nowh]j5)}(hwrite_inode_nowh]hwrite_inode_now}(hjQhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj,hhhj>hM" ubj)}(h(struct inode *inode, int sync)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjiubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjSsbc.write_inode_nowasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjiubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjiubj5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjiubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjeubj)}(hint synch](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hsynch]hsync}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjeubeh}(h]h ]h"]h$]h&]jLjMuh1jhj,hhhj>hM" ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj(hhhj>hM" ubah}(h]j#ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj>hM" hj%hhubjc)}(hhh]h)}(hwrite an inode to diskh]hwrite an inode to disk}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:68: ./fs/fs-writeback.chM hj"hhubah}(h]h ]h"]h$]h&]uh1jbhj%hhhj>hM" ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1hhhhj!hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj:!ubj)}(h h]h }(hjL!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:!ubj5)}(hflagsh]hflags}(hjZ!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:!ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj ubj)}(hfmode_t f_modeh](h)}(hhh]j5)}(hfmode_th]hfmode_t}(hjv!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjs!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjx!modnameN classnameNjj)}j]jc.anon_inode_getfile_fmodeasbuh1hhjo!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjo!ubj5)}(hf_modeh]hf_mode}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjo!ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhKubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhKhjhhubjc)}(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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/anon_inodes.chKhj!hhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!jj!jjjuh1hhhhj[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)}(hjF'h]h Description}(hjH'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD'ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./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:71: ./fs/anon_inodes.chKhj&ubj6-)}(hhh](j;-)}(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;}(hjr'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/anon_inodes.chKhjn'ubah}(h]h ]h"]h$]h&]uh1j:-hjk'ubj;-)}(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:71: ./fs/anon_inodes.chKhj'ubah}(h]h ]h"]h$]h&]uh1j:-hjk'ubeh}(h]h ]h"]h$]h&]j-j uh1j5-hj'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 }(hj'hhhNhNubj)}(h**context_inode**h]h context_inode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubhB in inode_init_security_anon(), but a reference to it is not held.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/anon_inodes.chKhj&ubh)}(h4Returns the newly created file* or an error pointer.h]h4Returns the newly created file* or an error pointer.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:71: ./fs/anon_inodes.chKhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjATTR_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.}(hj`-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhjx,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:.ubj)}(h h]h }(hjK.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:.ubh)}(hhh]j5)}(hinodeh]hinode}(hj\.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjY.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^.modnameN classnameNjj)}j]j.c.setattr_should_drop_suidgidasbuh1hhj:.ubj)}(h h]h }(hjz.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:.ubjX)}(hj[h]h*}(hj.hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj:.ubj5)}(hinodeh]hinode}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:.ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj-ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj-hhhj-hK?ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj-hhhj-hK?ubah}(h]j-ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj-hK?hj-hhubjc)}(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:74: ./fs/attr.chK1hj.hhubah}(h]h ]h"]h$]h&]uh1jbhj-hhhj-hK?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1hhhhjsetattr implementations, possibly after taking additional locks.h](h)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhj1ubj)}(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)}(hj1h]hstruct mnt_idmap *idmap}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhj1ubj)}(hhh]h)}(h+idmap of the mount the inode was found fromh]h+idmap of the mount the inode was found from}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hKhj1ubj)}(h*``struct dentry *dentry`` dentry to check h](j)}(h``struct dentry *dentry``h]j)}(hj 2h]hstruct dentry *dentry}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 2ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhj2ubj)}(hhh]h)}(hdentry to checkh]hdentry to check}(hj%2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!2hKhj"2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj!2hKhj1ubj)}(h,``struct iattr *attr`` attributes to change h](j)}(h``struct iattr *attr``h]j)}(hjE2h]hstruct iattr *attr}(hjG2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC2ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhj?2ubj)}(hhh]h)}(hattributes to changeh]hattributes to change}(hj^2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ2hKhj[2ubah}(h]h ]h"]h$]h&]uh1jhj?2ubeh}(h]h ]h"]h$]h&]uh1jhjZ2hKhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~2ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhj1ubh)}(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}(hj2hhhNhNubah}(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:74: ./fs/attr.chKhj1ubh)}(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 }(hj2hhhNhNubj)}(h **idmap**h]hidmap}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubhB. This function will then take care to map the inode according to }(hj2hhhNhNubj)}(h **idmap**h]hidmap}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hj2hhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhj1ubh)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjint inode_newsize_ok(const struct inode *inode, loff_t offset)h](j+)}(hinth]hint}(hj+3hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj'3hhhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKubj)}(h h]h }(hj:3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'3hhhj93hKubj/)}(hinode_newsize_okh]j5)}(hinode_newsize_okh]hinode_newsize_ok}(hjL3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjH3ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj'3hhhj93hKubj)}(h*(const struct inode *inode, loff_t offset)h](j)}(hconst struct inode *inodeh](j )}(hjh]hconst}(hjh3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjd3ubj)}(h h]h }(hju3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjd3ubj )}(hjzh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjd3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjd3ubh)}(hhh]j5)}(hinodeh]hinode}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jjN3sbc.inode_newsize_okasbuh1hhjd3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjd3ubjX)}(hj[h]h*}(hj3hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjd3ubj5)}(hinodeh]hinode}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjd3ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj`3ubj)}(h loff_t offseth](h)}(hhh]j5)}(hloff_th]hloff_t}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j3c.inode_newsize_okasbuh1hhj3ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj3ubj5)}(hoffseth]hoffset}(hj$4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj`3ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj'3hhhj93hKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj#3hhhj93hKubah}(h]j3ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj93hKhj 3hhubjc)}(hhh]h)}(h+may this inode be truncated to a given sizeh]h+may this inode be truncated to a given size}(hjN4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chKhjK4hhubah}(h]h ]h"]h$]h&]uh1jbhj 3hhhj93hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjf4jjf4jjjuh1hhhhjhj7ubj)}(hhh]h)}(hthe inode to be updatedh]hthe inode to be updated}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM>hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM>hj7ubj)}(h0``const struct iattr *attr`` the new attributes h](j)}(h``const struct iattr *attr``h]j)}(hj7h]hconst struct iattr *attr}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chM?hj7ubj)}(hhh]h)}(hthe new attributesh]hthe new attributes}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM?hj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hM?hj7ubeh}(h]h ]h"]h$]h&]uh1jhjg7ubh)}(h**Description**h]j)}(hj98h]h Description}(hj;8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj78ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chMAhjg7ubh)}(h.setattr_copy must be called with i_mutex held.h]h.setattr_copy must be called with i_mutex held.}(hjO8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chMAhjg7ubh)}(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.}(hj^8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chMChjg7ubh)}(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 }(hjm8hhhNhNubj)}(h **idmap**h]hidmap}(hju8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm8ubhB. This function will then take care to map the inode according to }(hjm8hhhNhNubj)}(h **idmap**h]hidmap}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm8ubh before checking permissions. On non-idmapped mounts or if permission checking is to be performed on the raw inode simply pass }(hjm8hhhNhNubj)}(h**nop_mnt_idmap**h]h nop_mnt_idmap}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm8ubh.}(hjm8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chMJhjg7ubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chMPhjg7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9modnameN classnameNjj)}j]j)}jj9sbc.notify_changeasbuh1hhj9ubj)}(h h]h }(hj\9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubjX)}(hj[h]h*}(hjj9hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9ubj5)}(hidmaph]hidmap}(hjw9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj9ubj)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubh)}(hhh]j5)}(hdentryh]hdentry}(hj9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]jX9c.notify_changeasbuh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubjX)}(hj[h]h*}(hj9hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9ubj5)}(hdentryh]hdentry}(hj9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj9ubj)}(hstruct iattr *attrh](j )}(hjzh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(h h]h }(hj :hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubh)}(hhh]j5)}(hiattrh]hiattr}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj :modnameN classnameNjj)}j]jX9c.notify_changeasbuh1hhj9ubj)}(h h]h }(hj<:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubjX)}(hj[h]h*}(hjJ:hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9ubj5)}(hattrh]hattr}(hjW:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj9ubj)}(hstruct inode **delegated_inodeh](j )}(hjzh]hstruct}(hjp:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjl:ubj)}(h h]h }(hj}:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjl:ubh)}(hhh]j5)}(hinodeh]hinode}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]jX9c.notify_changeasbuh1hhjl:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjl:ubjX)}(hj[h]h*}(hj:hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjl:ubjX)}(hj[h]h*}(hj:hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjl:ubj5)}(hdelegated_inodeh]hdelegated_inode}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjl:ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj9ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj8hhhj8hMubah}(h]j8ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj8hMhj8hhubjc)}(hhh]h)}(h(modify attributes of a filesystem objecth]h(modify attributes of a filesystem object}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:74: ./fs/attr.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jbhj8hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1hhhhjchar * d_path (const struct path *path, char *buf, int buflen)h]j)}(hhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj=ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj<hhhj<hM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj<hhhj<hM ubah}(h]j<ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj<hM hj<hhubjc)}(hhh]h)}(hreturn the path of a dentryh]hreturn the path of a dentry}(hj,>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/d_path.chKhj)>hhubah}(h]h ]h"]h$]h&]uh1jbhj<hhhj<hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjD>jjD>jjjuh1hhhhjh]h Parameters}(hjP>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL>ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/d_path.chKhjH>ubj)}(hhh](j)}(h+``const struct path *path`` path to report h](j)}(h``const struct path *path``h]j)}(hjm>h]hconst struct path *path}(hjo>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk>ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/d_path.chKhjg>ubj)}(hhh]h)}(hpath to reporth]hpath to report}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKhj>ubah}(h]h ]h"]h$]h&]uh1jhjg>ubeh}(h]h ]h"]h$]h&]uh1jhj>hKhjd>ubj)}(h(``char *buf`` buffer to return value in 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&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/d_path.chKhj>ubj)}(hhh]h)}(hbuffer to return value inh]hbuffer to return value in}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hKhjd>ubj)}(h``int buflen`` buffer length h](j)}(h``int buflen``h]j)}(hj>h]h int buflen}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/d_path.chKhj>ubj)}(hhh]h)}(h buffer lengthh]h buffer length}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hKhjd>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&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/d_path.chKhjH>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.}(hj0?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/d_path.chKhjH>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:77: ./fs/d_path.chMhjH>ubh)}(h"buflen" should be positive.h]h “buflen” should be positive.}(hjN?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:77: ./fs/d_path.chMhjH>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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)}(hj8Ah]h Parameters}(hj:AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Aubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/dax.chMhj2Aubj)}(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)}(hjWAh]hstruct address_space *mapping}(hjYAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUAubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/dax.chMhjQAubj)}(hhh]h)}(h3address space to scan for a page with ref count > 1h]h3address space to scan for a page with ref count > 1}(hjpAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlAhMhjmAubah}(h]h ]h"]h$]h&]uh1jhjQAubeh}(h]h ]h"]h$]h&]uh1jhjlAhMhjNAubj)}(hG``loff_t start`` Starting offset. Page containing 'start' is included. h](j)}(h``loff_t start``h]j)}(hjAh]h loff_t start}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/dax.chMhjAubj)}(hhh]h)}(h5Starting offset. Page containing 'start' is included.h]h9Starting offset. Page containing ‘start’ is included.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjNAubj)}(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)}(hjAh]h loff_t end}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/dax.chMhjAubj)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/dax.chMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjNAubeh}(h]h ]h"]h$]h&]uh1jhj2Aubh)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/dax.chMhj2Aubh)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/dax.chMhj2Aubh)}(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.}(hj*BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:80: ./fs/dax.chMhj2Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjsetattr 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)}(hjFQh]h Parameters}(hjHQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDQubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMkhj@Qubj)}(hhh](j)}(h6``struct mnt_idmap *idmap`` idmap of the target mount h](j)}(h``struct mnt_idmap *idmap``h]j)}(hjeQh]hstruct mnt_idmap *idmap}(hjgQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcQubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhhj_Qubj)}(hhh]h)}(hidmap of the target mounth]hidmap of the target mount}(hj~QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzQhMhhj{Qubah}(h]h ]h"]h$]h&]uh1jhj_Qubeh}(h]h ]h"]h$]h&]uh1jhjzQhMhhj\Qubj)}(h!``struct dentry *dentry`` dentry h](j)}(h``struct dentry *dentry``h]j)}(hjQh]hstruct dentry *dentry}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMihjQubj)}(hhh]h)}(hdentryh]hdentry}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMihjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMihj\Qubj)}(h(``struct iattr *iattr`` iattr structure h](j)}(h``struct iattr *iattr``h]j)}(hjQh]hstruct iattr *iattr}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMjhjQubj)}(hhh]h)}(hiattr structureh]hiattr structure}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMjhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMjhj\Qubeh}(h]h ]h"]h$]h&]uh1jhj@Qubh)}(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:83: ./fs/libfs.chMlhj@Qubh)}(h(Returns 0 on success, -error on failure.h]h(Returns 0 on success, -error on failure.}(hj(RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMlhj@Qubh)}(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.}(hj7RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMnhj@Qubh)}(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.}(hjFRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMqhj@Qubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhj"Yubeh}(h]h ]h"]h$]h&]uh1jhj=YhMnhjXubj)}(h?``const void __user *from`` the user space buffer to read from h](j)}(h``const void __user *from``h]j)}(hjaYh]hconst void __user *from}(hjcYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_Yubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMohj[Yubj)}(hhh]h)}(h"the user space buffer to read fromh]h"the user space buffer to read from}(hjzYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvYhMohjwYubah}(h]h ]h"]h$]h&]uh1jhj[Yubeh}(h]h ]h"]h$]h&]uh1jhjvYhMohjXubj)}(h5``size_t count`` the maximum number of bytes to read h](j)}(h``size_t count``h]j)}(hjYh]h size_t count}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMphjYubj)}(hhh]h)}(h#the maximum number of bytes to readh]h#the maximum number of bytes to read}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMphjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMphjXubeh}(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&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMrhjXubh)}(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 }(hjYhhhNhNubj)}(h **count**h]hcount}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh/ bytes from the user space address starting at }(hjYhhhNhNubj)}(h**from**h]hfrom}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh into the buffer }(hjYhhhNhNubj)}(h**to**h]hto}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh at offset }(hjYhhhNhNubj)}(h**ppos**h]hppos}(hj)ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMrhjXubh)}(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 }(hjBZhhhNhNubj)}(h**ppos**h]hppos}(hjJZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBZubhD is advanced by this number, or negative value is returned on error.}(hjBZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMuhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjencode_fh functionh]h-generic export_operations->encode_fh function}(hj?`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMyhj<`hhubah}(h]h ]h"]h$]h&]uh1jbhjm^hhhj^hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjW`jjW`jjjuh1hhhhjgeneric fsync implementation for simple filesystems with flushh]h>generic fsync implementation for simple filesystems with flush}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhjphhubah}(h]h ]h"]h$]h&]uh1jbhjYohhhjrohMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1hhhhjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+rhhhj=rhM.ubj/)}(hgeneric_check_addressableh]j5)}(hgeneric_check_addressableh]hgeneric_check_addressable}(hjPrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjLrubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj+rhhhj=rhM.ubj)}(h)(unsigned blocksize_bits, u64 num_blocks)h](j)}(hunsigned blocksize_bitsh](j+)}(hunsignedh]hunsigned}(hjlrhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhrubj)}(h h]h }(hjzrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhrubj5)}(hblocksize_bitsh]hblocksize_bits}(hjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjhrubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjdrubj)}(hu64 num_blocksh](h)}(hhh]j5)}(hu64h]hu64}(hjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j)}jjRrsbc.generic_check_addressableasbuh1hhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjrubj5)}(h num_blocksh]h num_blocks}(hjrhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjrubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjdrubeh}(h]h ]h"]h$]h&]jLjMuh1jhj+rhhhj=rhM.ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj'rhhhj=rhM.ubah}(h]j"rah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj=rhM.hj$rhhubjc)}(hhh]h)}(h#Check addressability of file systemh]h#Check addressability of file system}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chM&hjrhhubah}(h]h ]h"]h$]h&]uh1jbhj$rhhhj=rhM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1hhhhji_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)}(hjyh]h Parameters}(hj!yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhjyubj)}(hhh](j)}(h(``struct dentry *dentry`` not used here h](j)}(h``struct dentry *dentry``h]j)}(hj>yh]hstruct dentry *dentry}(hj@yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhji_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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhjyubh)}(h **Return**h]j)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhjyubh)}(hthe symlink targeth]hthe symlink target}(hj(zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjubj)}(hhh](j)}(h?``const struct dentry *dentry`` dentry of the parent directory h](j)}(h``const struct dentry *dentry``h]j)}(hjch]hconst struct dentry *dentry}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chM%hj]ubj)}(hhh]h)}(hdentry of the parent directoryh]hdentry of the parent directory}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhM%hjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM%hjZubj)}(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:83: ./fs/libfs.chM&hjubj)}(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&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjZubeh}(h]h ]h"]h$]h&]uh1jhj>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:83: ./fs/libfs.chM(hj>ubh)}(h;0 if hash was successful or unchanged, and -EINVAL on errorh]h;0 if hash was successful or unchanged, and -EINVAL on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chM(hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjd_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.}(hjłhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMDhj‚hhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj*hMUubeh}(h]h ](jfunctioneh"]h$]h&]jjjj݂jj݂jjjuh1hhhhj 0 if the directory entry matches, 0 if it doesn't match, or < 0 on 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:83: ./fs/libfs.chMHhjubj)}(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)}(hjh]hconst struct inode *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMHhjubj)}(hhh]h)}(h2Inode of the parent of the dirent under comparisonh]h2Inode of the parent of the dirent under comparison}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjubj)}(h/``const struct qstr *name`` name under lookup. h](j)}(h``const struct qstr *name``h]j)}(hj?h]hconst struct qstr *name}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMIhj9ubj)}(hhh]h)}(hname under lookup.h]hname under lookup.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMIhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMIhjubj)}(hI``const struct qstr *folded_name`` Optional pre-folded name under lookup h](j)}(h"``const struct qstr *folded_name``h]j)}(hjxh]hconst struct qstr *folded_name}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMJhjrubj)}(hhh]h)}(h%Optional pre-folded name under lookuph]h%Optional pre-folded name under lookup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjubj)}(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:83: ./fs/libfs.chMKhjubj)}(hhh]h)}(h Dirent name.h]h Dirent name.}(hjʃhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƃhMKhjǃubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƃhMKhjubj)}(h(``u32 de_name_len`` dirent name length. h](j)}(h``u32 de_name_len``h]j)}(hjh]hu32 de_name_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMLhjubj)}(hhh]h)}(hdirent name length.h]hdirent name length.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubeh}(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:83: ./fs/libfs.chMNhjubh)}(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}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubhB is provided, it is used instead of recalculating the casefold of }(hj;hhhNhNubj)}(h**name**h]hname}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMNhjubh)}(h **Return**h]j)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMRhjubh)}(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:83: ./fs/libfs.chMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hsbh]hsb}(hjKhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjÄhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjÄhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjÄhMhjhhubjc)}(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}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhjrhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjÄhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjs_d_op to 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:83: ./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:83: ./fs/libfs.chMhjubj)}(hhh]h)}(hsuperblock to be configuredh]hsuperblock to be configured}(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)}(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:83: ./fs/libfs.chMhjubh)}(hXFilesystems supporting casefolding and/or fscrypt can call this helper at mount-time to configure sb->s_d_op to 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]hXFilesystems supporting casefolding and/or fscrypt can call this helper at mount-time to configure sb->s_d_op to 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbool inode_maybe_inc_iversion(struct inode *inode, bool force)h](j+)}(hj.h]hbool}(hj6hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj2hhhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2hhhjChMubj/)}(hinode_maybe_inc_iversionh]j5)}(hinode_maybe_inc_iversionh]hinode_maybe_inc_iversion}(hjVhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjRubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj2hhhjChMubj)}(h!(struct inode *inode, bool force)h](j)}(hstruct inode *inodeh](j )}(hjzh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubh)}(hhh]j5)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjXsbc.inode_maybe_inc_iversionasbuh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjnubj5)}(hinodeh]hinode}(hjˆhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjjubj)}(h bool forceh](j+)}(hj.h]hbool}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hforceh]hforce}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj2hhhjChMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj.hhhjChMubah}(h]j)ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjChMhj+hhubjc)}(hhh]h)}(hincrements i_versionh]hincrements i_version}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:83: ./fs/libfs.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jbhj+hhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1hhhhj(struct mnt_idmap *idmap, struct dentry *dentry, umode_t mode)h](j)}(hstruct mnt_idmap *idmaph](j )}(hjzh]hstruct}(hjߋhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjۋubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjۋubh)}(hhh]j5)}(h mnt_idmaph]h mnt_idmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjŋsbc.posix_acl_chmodasbuh1hhjۋubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjۋubjX)}(hj[h]h*}(hj+hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjۋubj5)}(hidmaph]hidmap}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjۋubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj׋ubj)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjMubh)}(hhh]j5)}(hdentryh]hdentry}(hjohhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jc.posix_acl_chmodasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjMubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjMubj5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj׋ubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjČhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjƌmodnameN classnameNjj)}j]jc.posix_acl_chmodasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj׋ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM[ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM[ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM[hjhhubjc)}(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:86: ./fs/posix_acl.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhM[ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1hhhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/posix_acl.chMShj6ubj)}(hhh](j)}(hH``struct mnt_idmap *idmap`` idmap of the mount **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&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/posix_acl.chMQhjUubj)}(hhh]h)}(h+idmap of the mount **inode** was found fromh](hidmap of the mount }(hjthhhNhNubj)}(h **inode**h]hinode}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh was found from}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMQhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMQhjRubj)}(h9``struct dentry *dentry`` dentry to check permissions 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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/posix_acl.chMRhjubj)}(hhh]h)}(hdentry to check permissions onh]hdentry to check permissions on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjRubj)}(h+``umode_t mode`` the new mode of **inode** h](j)}(h``umode_t mode``h]j)}(hjߍh]h umode_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݍubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/posix_acl.chMShjٍubj)}(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&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjٍubeh}(h]h ]h"]h$]h&]uh1jhjhMShjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(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:86: ./fs/posix_acl.chMUhj6ubh)}(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 }(hj>hhhNhNubj)}(h **idmap**h]hidmap}(hjFhhhNhNubah}(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}(hjXhhhNhNubah}(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}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/posix_acl.chMUhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubah}(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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/posix_acl.chMhjubh)}(h%Called from set_acl inode operations.h]h%Called from set_acl inode operations.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:86: ./fs/posix_acl.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhjubh)}(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:86: ./fs/posix_acl.chM>hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjLhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hstath]hstat}(hjYhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjOhhhjahK|ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjKhhhjahK|ubah}(h]jFah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjahK|hjHhhubjc)}(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:89: ./fs/stat.chKuhjhhubah}(h]h ]h"]h$]h&]uh1jbhjHhhhjahK|ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjlistxattr() operation. **Return** On success, the size of the buffer that was used. On error a negative error code.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:95: ./fs/xattr.chMhjubj)}(hhh](j)}(hT``struct dentry *dentry`` the dentry from whose inode the xattr names are retrieved 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:95: ./fs/xattr.chMhj7ubj)}(hhh]h)}(h9the dentry from whose inode the xattr names are retrievedh]h9the dentry from whose inode the xattr names are retrieved}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj4ubj)}(h0``char *list`` buffer to store xattr names into h](j)}(h``char *list``h]j)}(hjvh]h char *list}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/xattr.chMhjpubj)}(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&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhj4ubj)}(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:95: ./fs/xattr.chMhjubj)}(hhh]h)}(hsize of the bufferh]hsize of the buffer}(hjȺhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĺhMhjźubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjĺhMhj4ubeh}(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:95: ./fs/xattr.chMhjubh)}(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 }(hjhhhNhNubj)}(h **dentry**h]hdentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/xattr.chMhjubh)}(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:95: ./fs/xattr.chMhjubh)}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:95: ./fs/xattr.chMhjubh)}(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:95: ./fs/xattr.chMhjubj)}(hhh]j)}(hQOn success, the size of the buffer that was used. On error a negative error code.h](j)}(hhMxubj/)}(hmnt_drop_writeh]j5)}(hmnt_drop_writeh]hmnt_drop_write}(hjQhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj,hhhj>hMxubj)}(h(struct vfsmount *mnt)h]j)}(hstruct vfsmount *mnth](j )}(hjzh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjiubh)}(hhh]j5)}(hvfsmounth]hvfsmount}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjSsbc.mnt_drop_writeasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjiubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjiubj5)}(hmnth]hmnt}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjiubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjeubah}(h]h ]h"]h$]h&]jLjMuh1jhj,hhhj>hMxubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj(hhhj>hMxubah}(h]j#ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj>hMxhj%hhubjc)}(hhh]h)}(hgive up write access to a mounth]hgive up write access to a mount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/namespace.chMqhjhhubah}(h]h ]h"]h$]h&]uh1jbhj%hhhj>hMxubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/namespace.chMhjubh)}(h5Note that this does not attach the mount to anything.h]h5Note that this does not attach the mount to anything.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:98: ./fs/namespace.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjjj>jjjuh1hhhhjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj+hMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVubj )}(hjzh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj@sb c.proc_doboolasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjVubj5)}(htableh]htable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjVubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjRubj)}(h int writeh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjRubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj8hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbufferh]hbuffer}(hjEhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjRubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j c.proc_doboolasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjZubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjZubj5)}(hlenph]hlenp}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjZubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjRubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.proc_doboolasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjRubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj+hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj+hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj+hMhjhhubjc)}(hhh]h)}(hread/write a boolh]hread/write a bool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1hhhhj#hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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). Returns 0 on success.h](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj5ubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjZh]hconst struct ctl_table *table}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjTubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjQubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjh]h int write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if this is a write to the sysctl file}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjQubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjh]h void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjQubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj ubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjQubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjLh]h loff_t *ppos}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjFubj)}(hhh]h)}(h file positionh]h file position}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubh)}(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:107: ./kernel/sysctl.chMhj5ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj5ubh)}(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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj5ubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hproc_dointvec (C function)c.proc_dointvechNtauh1hhj#hhhNhNubh)}(hhh](j)}(hfint proc_dointvec (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(heint proc_dointvec(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(h proc_dointvech]j5)}(h proc_dointvech]h proc_dointvec}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#ubj )}(hjzh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#ubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hj`hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]j)}jj sbc.proc_dointvecasbuh1hhj#ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj#ubj5)}(htableh]htable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int writeh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j|c.proc_dointvecasbuh1hhj'ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'ubjX)}(hj[h]h*}(hjZhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj'ubj5)}(hlenph]hlenp}(hjghhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj'ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j|c.proc_dointvecasbuh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubj5)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(hread a vector of integersh]hread a vector of integers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj#hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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. Returns 0 on success.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hj'h]hconst struct ctl_table *table}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj!ubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(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=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hj`h]h int write}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjZubj)}(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&]uh1jhjyubh& if this is a write to the sysctl file}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjh]h void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(h file positionh]h file position}(hj2hhhNhNubah}(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&]uh1jhjubh)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hproc_douintvec (C function)c.proc_douintvechNtauh1hhj#hhhNhNubh)}(hhh](j)}(hgint proc_douintvec (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hfint proc_douintvec(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hproc_douintvech]j5)}(hproc_douintvech]hproc_douintvec}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjsbc.proc_douintvecasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjLhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htableh]htable}(hjYhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int writeh](j+)}(hinth]hint}(hjrhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j:c.proc_douintvecasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hlenph]hlenp}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjAhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j:c.proc_douintvecasbuh1hhj:ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubjX)}(hj[h]h*}(hjmhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj:ubj5)}(hpposh]hppos}(hjzhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h"read a vector of unsigned integersh]h"read a vector of unsigned integers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj#hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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. Returns 0 on success.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:107: ./kernel/sysctl.chMhjubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjh]hconst struct ctl_table *table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjh]h int write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(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&]uh1jhj7ubh& if this is a write to the sysctl file}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjeh]h void *buffer}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj_ubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(h file positionh]h file position}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(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:107: ./kernel/sysctl.chMhjubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!proc_dointvec_minmax (C function)c.proc_dointvec_minmaxhNtauh1hhj#hhhNhNubh)}(hhh](j)}(hmint proc_dointvec_minmax (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hlint proc_dointvec_minmax(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjbhhhjthMMubj/)}(hproc_dointvec_minmaxh]j5)}(hproc_dointvec_minmaxh]hproc_dointvec_minmax}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjbhhhjthMMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.proc_dointvec_minmaxasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htableh]htable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int writeh](j+)}(hinth]hint}(hj0hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj,ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubj5)}(hwriteh]hwrite}(hjLhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjaubj)}(h h]h }(hjshhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjaubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjaubj5)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.proc_dointvec_minmaxasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hlenph]hlenp}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.proc_dointvec_minmaxasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj+hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hpposh]hppos}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjbhhhjthMMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj^hhhjthMMubah}(h]jYah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjthMMhj[hhubjc)}(hhh]h)}(h-read a vector of integers with min/max valuesh]h-read a vector of integers with min/max values}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM>hj_hhubah}(h]h ]h"]h$]h&]uh1jbhj[hhhjthMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1hhhhj#hNhNubj)}(hX@**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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). Returns 0 on success or -EINVAL on write when the range check fails.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:107: ./kernel/sysctl.chMBhj~ubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjh]hconst struct ctl_table *table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM?hjubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjh]h int write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM@hjubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if this is a write to the sysctl file}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubj)}(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:107: ./kernel/sysctl.chMAhjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMAhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMAhjubj)}(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&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMBhjVubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMBhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMBhjubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMChjubj)}(hhh]h)}(h file positionh]h file position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubeh}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMEhj~ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMEhj~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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMHhj~ubh)}(hDReturns 0 on success or -EINVAL on write when the range check fails.h]hDReturns 0 on success or -EINVAL on write when the range check fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMKhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"proc_douintvec_minmax (C function)c.proc_douintvec_minmaxhNtauh1hhj#hhhNhNubh)}(hhh](j)}(hnint proc_douintvec_minmax (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hmint proc_douintvec_minmax(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hj3hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj/hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMubj)}(h h]h }(hjBhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/hhhjAhMubj/)}(hproc_douintvec_minmaxh]j5)}(hproc_douintvec_minmaxh]hproc_douintvec_minmax}(hjThhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj/hhhjAhMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjlubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjlubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjVsbc.proc_douintvec_minmaxasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjlubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjlubj5)}(htableh]htable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjlubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjhubj)}(h int writeh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjhubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj.ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj.ubjX)}(hj[h]h*}(hjNhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj.ubj5)}(hbufferh]hbuffer}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjhubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjwhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]jc.proc_douintvec_minmaxasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjpubj5)}(hlenph]hlenp}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjhubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.proc_douintvec_minmaxasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjhubeh}(h]h ]h"]h$]h&]jLjMuh1jhj/hhhjAhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj+hhhjAhMubah}(h]j&ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjAhMhj(hhubjc)}(hhh]h)}(h2read a vector of unsigned ints with min/max valuesh]h2read a vector of unsigned ints with min/max values}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jbhj(hhhjAhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1hhhhj#hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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. This routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). There is a final sanity check for UINT_MAX to avoid having to support wrap around uses from userspace. Returns 0 on success or -ERANGE on write when the range check fails.h](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjKubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjph]hconst struct ctl_table *table}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjjubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjh]h int write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if this is a write to the sysctl file}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjh]h void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubj)}(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:107: ./kernel/sysctl.chMhj#ubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjgubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjbh]h loff_t *ppos}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj\ubj)}(hhh]h)}(h file positionh]h file position}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubh)}(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:107: ./kernel/sysctl.chMhjKubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjKubh)}(hThis routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). There is a final sanity check for UINT_MAX to avoid having to support wrap around uses from userspace.h]hThis routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). There is a final sanity check for UINT_MAX to avoid having to support wrap around uses from userspace.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjKubh)}(hDReturns 0 on success or -ERANGE on write when the range check fails.h]hDReturns 0 on success or -ERANGE on write when the range check fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h proc_dou8vec_minmax (C function)c.proc_dou8vec_minmaxhNtauh1hhj#hhhNhNubh)}(hhh](j)}(hlint proc_dou8vec_minmax (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hkint proc_dou8vec_minmax(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hproc_dou8vec_minmaxh]j5)}(hproc_dou8vec_minmaxh]hproc_dou8vec_minmax}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubj )}(hjzh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(h h]h }(hjehhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjvhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]j)}jj#sbc.proc_dou8vec_minmaxasbuh1hhj9ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9ubj5)}(htableh]htable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(h int writeh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbufferh]hbuffer}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]jc.proc_dou8vec_minmaxasbuh1hhj=ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj=ubjX)}(hj[h]h*}(hjphhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj=ubj5)}(hlenph]hlenp}(hj}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.proc_dou8vec_minmaxasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h3read a vector of unsigned chars with min/max valuesh]h3read a vector of unsigned chars with min/max values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj#hNhNubj)}(hX`**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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). Returns 0 on success or an error on write when the range check fails.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hj=h]hconst struct ctl_table *table}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj7ubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj4ubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjvh]h int write}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjpubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if this is a write to the sysctl file}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhj4ubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjh]h void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj4ubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj4ubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hj/h]h loff_t *ppos}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj)ubj)}(hhh]h)}(h file positionh]h file position}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj4ubeh}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(hEReturns 0 on success or an error on write when the range check fails.h]hEReturns 0 on success or an error on write when the range check fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#proc_doulongvec_minmax (C function)c.proc_doulongvec_minmaxhNtauh1hhj#hhhNhNubh)}(hhh](j)}(hoint proc_doulongvec_minmax (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hnint proc_doulongvec_minmax(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMHubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMHubj/)}(hproc_doulongvec_minmaxh]j5)}(hproc_doulongvec_minmaxh]hproc_doulongvec_minmax}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMHubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjChhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j)}jjsbc.proc_doulongvec_minmaxasbuh1hhjubj)}(h h]h }(hjchhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjqhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htableh]htable}(hj~hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int writeh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j_c.proc_doulongvec_minmaxasbuh1hhj ubj)}(h h]h "}(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hj=hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hlenph]hlenp}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjfhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j_c.proc_doulongvec_minmaxasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj_ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj_ubj5)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMHubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMHubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMHhjhhubjc)}(hhh]h)}(h2read a vector of long integers with min/max valuesh]h2read a vector of long integers with min/max values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM9hjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMHubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj#hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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). Returns 0 on success.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:107: ./kernel/sysctl.chM=hjubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hj h]hconst struct ctl_table *table}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM:hjubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjCh]h int write}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./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&]uh1hhjXhM;hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhM;hjubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjh]h void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM<hjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM=hjubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM>hjubj)}(hhh]h)}(h file positionh]h file position}(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)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM@hjubh)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM@hjubh)}(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\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMChjubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.proc_doulongvec_ms_jiffies_minmax (C function)#c.proc_doulongvec_ms_jiffies_minmaxhNtauh1hhj#hhhNhNubh)}(hhh](j)}(hzint proc_doulongvec_ms_jiffies_minmax (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hyint proc_doulongvec_ms_jiffies_minmax(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM_ubj/)}(h!proc_doulongvec_ms_jiffies_minmaxh]j5)}(h!proc_doulongvec_ms_jiffies_minmaxh]h!proc_doulongvec_ms_jiffies_minmax}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM_ubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb#c.proc_doulongvec_ms_jiffies_minmaxasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj>hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htableh]htable}(hjKhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int writeh](j+)}(hinth]hint}(hjdhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`ubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj`ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j,#c.proc_doulongvec_ms_jiffies_minmaxasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hlenph]hlenp}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j,#c.proc_doulongvec_ms_jiffies_minmaxasbuh1hhj,ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubjX)}(hj[h]h*}(hj_hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj,ubj5)}(hpposh]hppos}(hjlhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM_ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM_ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM_hjhhubjc)}(hhh]h)}(h7read a vector of millisecond values with min/max valuesh]h7read a vector of millisecond values with min/max values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhM_ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj#hNhNubj)}(hXo**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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. The values are treated as milliseconds, and converted to jiffies when they are stored. This routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). Returns 0 on success.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:107: ./kernel/sysctl.chMShjubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjh]hconst struct ctl_table *table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMPhjubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjh]h int write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMQhj 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%hMQhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMQhjubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjWh]h void *buffer}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMRhjQubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMRhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMRhjubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMShjubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMThjubj)}(hhh]h)}(h file positionh]h file position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubeh}(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:107: ./kernel/sysctl.chMVhjubh)}(hReads/writes up to table->maxlen/sizeof(unsigned long) unsigned long values from/to the user buffer, treated as an ASCII string. The values are treated as milliseconds, and converted to jiffies when they are stored.h]hReads/writes up to table->maxlen/sizeof(unsigned long) unsigned long values from/to the user buffer, treated as an ASCII string. The values are treated as milliseconds, and converted to jiffies when they are stored.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMVhjubh)}(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)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMZhjubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM]hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"proc_dointvec_jiffies (C function)c.proc_dointvec_jiffieshNtauh1hhj#hhhNhNubh)}(hhh](j)}(hnint proc_dointvec_jiffies (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hmint proc_dointvec_jiffies(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjghhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjchhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMubj)}(h h]h }(hjvhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjchhhjuhMubj/)}(hproc_dointvec_jiffiesh]j5)}(hproc_dointvec_jiffiesh]hproc_dointvec_jiffies}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjchhhjuhMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.proc_dointvec_jiffiesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htableh]htable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int writeh](j+)}(hinth]hint}(hj1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-ubj5)}(hwriteh]hwrite}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubj)}(h h]h }(hjthhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjbubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjbubj5)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjbubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.proc_dointvec_jiffiesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hlenph]hlenp}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.proc_dointvec_jiffiesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj,hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hpposh]hppos}(hj9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjchhhjuhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj_hhhjuhMubah}(h]jZah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjuhMhj\hhubjc)}(hhh]h)}(h$read a vector of integers as secondsh]h$read a vector of integers as seconds}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jbhj\hhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1hhhhj#hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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. The values read are assumed to be in seconds, and are converted into jiffies. Returns 0 on success.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:107: ./kernel/sysctl.chMhjubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjh]hconst struct ctl_table *table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjh]h int write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if this is a write to the sysctl file}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(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:107: ./kernel/sysctl.chMhjWubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(h file positionh]h file position}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(hReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. The values read are assumed to be in seconds, and are converted into jiffies.h]hReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. The values read are assumed to be in seconds, and are converted into jiffies.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)proc_dointvec_userhz_jiffies (C function)c.proc_dointvec_userhz_jiffieshNtauh1hhj#hhhNhNubh)}(hhh](j)}(huint proc_dointvec_userhz_jiffies (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(htint proc_dointvec_userhz_jiffies(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hj%hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj!hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!hhhj3hMubj/)}(hproc_dointvec_userhz_jiffiesh]j5)}(hproc_dointvec_userhz_jiffiesh]hproc_dointvec_userhz_jiffies}(hjFhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjBubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj!hhhj3hMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubj )}(hjzh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjHsbc.proc_dointvec_userhz_jiffiesasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj^ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj^ubj5)}(htableh]htable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubj)}(h int writeh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwriteh]hwrite}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hj@hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hbufferh]hbuffer}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjihhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]jc.proc_dointvec_userhz_jiffiesasbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjbubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjbubj5)}(hlenph]hlenp}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjbubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.proc_dointvec_userhz_jiffiesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjZubeh}(h]h ]h"]h$]h&]jLjMuh1jhj!hhhj3hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj3hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj3hMhjhhubjc)}(hhh]h)}(h.read a vector of integers as 1/USER_HZ secondsh]h.read a vector of integers as 1/USER_HZ seconds}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1hhhhj#hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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`` pointer to the file position **Description** Reads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. The values read are assumed to be in 1/USER_HZ seconds, and are converted into jiffies. Returns 0 on success.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:107: ./kernel/sysctl.chMhj=ubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjbh]hconst struct ctl_table *table}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj\ubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjYubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjh]h int write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if this is a write to the sysctl file}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjYubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjh]h void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjYubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjYubj)}(h.``loff_t *ppos`` pointer to the file position h](j)}(h``loff_t *ppos``h]j)}(hjTh]h loff_t *ppos}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjNubj)}(hhh]h)}(hpointer to the file positionh]hpointer to the file position}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjYubeh}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj=ubh)}(hReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. The values read are assumed to be in 1/USER_HZ seconds, and are converted into jiffies.h]hReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. The values read are assumed to be in 1/USER_HZ seconds, and are converted into jiffies.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj=ubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%proc_dointvec_ms_jiffies (C function)c.proc_dointvec_ms_jiffieshNtauh1hhj#hhhNhNubh)}(hhh](j)}(hqint proc_dointvec_ms_jiffies (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hpint proc_dointvec_ms_jiffies(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hproc_dointvec_ms_jiffiesh]j5)}(hproc_dointvec_ms_jiffiesh]hproc_dointvec_ms_jiffies}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjYhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j)}jjsbc.proc_dointvec_ms_jiffiesasbuh1hhjubj)}(h h]h }(hjyhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htableh]htable}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int writeh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbufferh]hbuffer}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hj'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]juc.proc_dointvec_ms_jiffiesasbuh1hhj ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hjShhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hlenph]hlenp}(hj`hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]juc.proc_dointvec_ms_jiffiesasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjuubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjuubj5)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjuubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(hhh]h)}(h+read a vector of integers as 1 millisecondsh]h+read a vector of integers as 1 milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj#hNhNubj)}(hX**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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`` the current position in the file **Description** Reads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. The values read are assumed to be in 1/1000 seconds, and are converted into jiffies. Returns 0 on success.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:107: ./kernel/sysctl.chMhjubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hj h]hconst struct ctl_table *table}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjYh]h int write}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjSubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh& if this is a write to the sysctl file}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjubj)}(h!``void *buffer`` the user buffer h](j)}(h``void *buffer``h]j)}(hjh]h void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``loff_t *ppos`` the current position in the file h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhj ubj)}(hhh]h)}(h the current position in the fileh]h the current position in 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'hMhjubeh}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(hReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. The values read are assumed to be in 1/1000 seconds, and are converted into jiffies.h]hReads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string. The values read are assumed to be in 1/1000 seconds, and are converted into jiffies.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chMhjubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!proc_do_large_bitmap (C function)c.proc_do_large_bitmaphNtauh1hhj#hhhNhNubh)}(hhh](j)}(hmint proc_do_large_bitmap (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h]j)}(hlint proc_do_large_bitmap(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM=ubj/)}(hproc_do_large_bitmaph]j5)}(hproc_do_large_bitmaph]hproc_do_large_bitmap}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM=ubj)}(hT(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)h](j)}(hconst struct ctl_table *tableh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h ctl_tableh]h ctl_table}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.proc_do_large_bitmapasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjEhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htableh]htable}(hjRhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int writeh](j+)}(hinth]hint}(hjkhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjgubj)}(h h]h }(hjyhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjgubj5)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjgubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h void *bufferh](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *lenph](h)}(hhh]j5)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j3c.proc_do_large_bitmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hlenph]hlenp}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h loff_t *pposh](h)}(hhh]j5)}(hloff_th]hloff_t}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j3c.proc_do_large_bitmapasbuh1hhj3ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj3ubjX)}(hj[h]h*}(hjfhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj3ubj5)}(hpposh]hppos}(hjshhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM=ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM=ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM=hjhhubjc)}(hhh]h)}(h!read/write from/to a large bitmaph]h!read/write from/to a large bitmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM-hjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhM=ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj#hNhNubj)}(hXB**Parameters** ``const struct ctl_table *table`` the sysctl table ``int write`` ``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. Returns 0 on success.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:107: ./kernel/sysctl.chM1hjubj)}(hhh](j)}(h3``const struct ctl_table *table`` the sysctl table h](j)}(h!``const struct ctl_table *table``h]j)}(hjh]hconst struct ctl_table *table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM.hjubj)}(hhh]h)}(hthe sysctl tableh]hthe sysctl table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjubj)}(h=``int write`` ``TRUE`` if this is a write to the sysctl file h](j)}(h ``int write``h]j)}(hjh]h int write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM/hjubj)}(hhh]h)}(h.``TRUE`` if this is a write to the sysctl fileh](j)}(h``TRUE``h]hTRUE}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh& if this is a write to the sysctl file}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hM/hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM/hjubj)}(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:107: ./kernel/sysctl.chM0hjXubj)}(hhh]h)}(hthe user bufferh]hthe user buffer}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM0hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshM0hjubj)}(h-``size_t *lenp`` the size of the user buffer h](j)}(h``size_t *lenp``h]j)}(hjh]h size_t *lenp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM1hjubj)}(hhh]h)}(hthe size of the user bufferh]hthe size of the user buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubj)}(h``loff_t *ppos`` file position h](j)}(h``loff_t *ppos``h]j)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM2hjubj)}(hhh]h)}(h file positionh]h file position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubeh}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM4hjubh)}(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!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM4hjubh)}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM7hjubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:107: ./kernel/sysctl.chM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubeh}(h]sysctl-interfaceah ]h"]sysctl interfaceah$]h&]uh1hhjhhhhhKiubh)}(hhh](h)}(hproc filesystem interfaceh]hproc filesystem interface}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hhhhhKoubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hproc_flush_pid (C function)c.proc_flush_pidhNtauh1hhj]hhhNhNubh)}(hhh](j)}(h%void proc_flush_pid (struct pid *pid)h]j)}(h$void proc_flush_pid(struct pid *pid)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:113: ./fs/proc/base.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM ubj/)}(hproc_flush_pidh]j5)}(hproc_flush_pidh]hproc_flush_pid}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM ubj)}(h(struct pid *pid)h]j)}(hstruct pid *pidh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hpidh]hpid}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.proc_flush_pidasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hpidh]hpid}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM ubah}(h]jzah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM hj|hhubjc)}(hhh]h)}(h8Remove dcache entries for **pid** from the /proc dcache.h](hRemove dcache entries for }(hjGhhhNhNubj)}(h**pid**h]hpid}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh from the /proc dcache.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:113: ./fs/proc/base.chM hjDhhubah}(h]h ]h"]h$]h&]uh1jbhj|hhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1hhhhj]hNhNubj)}(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)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:113: ./fs/proc/base.chM hjuubj)}(hhh]j)}(h0``struct pid *pid`` pid that should be flushed. h](j)}(h``struct pid *pid``h]j)}(hjh]hstruct pid *pid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:113: ./fs/proc/base.chM hjubj)}(hhh]h)}(hpid that should be flushed.h]hpid that should be flushed.}(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&]uh1jhjuubh)}(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:113: ./fs/proc/base.chM hjuubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:113: ./fs/proc/base.chM hjuubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:113: ./fs/proc/base.chM hjuubh)}(h**NOTE**h]j)}(hj h]hNOTE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:113: ./fs/proc/base.chM hjuubj)}(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}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:113: ./fs/proc/base.chM hj$ ubj)}(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.}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6 hM hj7 ubah}(h]h ]h"]h$]h&]uh1jhj$ ubeh}(h]h ]h"]h$]h&]uh1jhj6 hM hj! ubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubeh}(h]proc-filesystem-interfaceah ]h"]proc filesystem interfaceah$]h&]uh1hhjhhhhhKoubeh}(h]the-proc-filesystemah ]h"]the proc filesystemah$]h&]uh1hhhhhhhhKfubh)}(hhh](h)}(h Events based on file descriptorsh]h Events based on file descriptors}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq hhhhhKuubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h eventfd_signal_mask (C function)c.eventfd_signal_maskhNtauh1hhjq hhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chK8ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj hhhj hK8ubj/)}(heventfd_signal_maskh]j5)}(heventfd_signal_maskh]heventfd_signal_mask}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj hhhj hK8ubj)}(h((struct eventfd_ctx *ctx, __poll_t mask)h](j)}(hstruct eventfd_ctx *ctxh](j )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(h eventfd_ctxh]h eventfd_ctx}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.eventfd_signal_maskasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hj$ hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hctxh]hctx}(hj1 hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj ubj)}(h __poll_t maskh](h)}(hhh]j5)}(h__poll_th]h__poll_t}(hjM hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjO modnameN classnameNjj)}j]j c.eventfd_signal_maskasbuh1hhjF ubj)}(h h]h }(hjk hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjF ubj5)}(hmaskh]hmask}(hjy hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjF ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj hhhj hK8ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj hhhj hK8ubah}(h]j ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj hK8hj hhubjc)}(hhh]h)}(hIncrement the event counterh]hIncrement the event counter}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chK/hj hhubah}(h]h ]h"]h$]h&]uh1jbhj hhhj hK8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1hhhhjq hNhNubj)}(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 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:119: ./fs/eventfd.chK3hj ubj)}(hhh](j)}(hA``struct eventfd_ctx *ctx`` [in] Pointer to the eventfd context. h](j)}(h``struct eventfd_ctx *ctx``h]j)}(hj h]hstruct eventfd_ctx *ctx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chK0hj ubj)}(hhh]h)}(h$[in] Pointer to the eventfd context.h]h$[in] Pointer to the eventfd context.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK0hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK0hj ubj)}(h!``__poll_t mask`` [in] poll mask h](j)}(h``__poll_t mask``h]j)}(hj h]h __poll_t mask}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chK1hj ubj)}(hhh]h)}(h[in] poll maskh]h[in] poll mask}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 hK1hj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 hK1hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjX h]h Description}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chK3hj ubh)}(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).}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chK3hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heventfd_ctx_put (C function)c.eventfd_ctx_puthNtauh1hhjq hhhNhNubh)}(hhh](j)}(h.void eventfd_ctx_put (struct eventfd_ctx *ctx)h]j)}(h-void eventfd_ctx_put(struct eventfd_ctx *ctx)h](j+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKgubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj hhhj hKgubj/)}(heventfd_ctx_puth]j5)}(heventfd_ctx_puth]heventfd_ctx_put}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj hhhj hKgubj)}(h(struct eventfd_ctx *ctx)h]j)}(hstruct eventfd_ctx *ctxh](j )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(h eventfd_ctxh]h eventfd_ctx}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.eventfd_ctx_putasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hj& hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hctxh]hctx}(hj3 hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj ubah}(h]h ]h"]h$]h&]jLjMuh1jhj hhhj hKgubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj hhhj hKgubah}(h]j ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj hKghj hhubjc)}(hhh]h)}(h5Releases a reference to the internal eventfd context.h]h5Releases a reference to the internal eventfd context.}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKahjZ hhubah}(h]h ]h"]h$]h&]uh1jbhj hhhj hKgubeh}(h]h ](jfunctioneh"]h$]h&]jjjju jju jjjuh1hhhhjq hNhNubj)}(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)}(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:119: ./fs/eventfd.chKehjy ubj)}(hhh]j)}(h=``struct eventfd_ctx *ctx`` [in] Pointer to eventfd context. h](j)}(h``struct eventfd_ctx *ctx``h]j)}(hj h]hstruct eventfd_ctx *ctx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKbhj ubj)}(hhh]h)}(h [in] Pointer to eventfd context.h]h [in] Pointer to eventfd context.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKbhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKbhj ubah}(h]h ]h"]h$]h&]uh1jhjy 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:119: ./fs/eventfd.chKdhjy ubh)}(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().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKdhjy ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*eventfd_ctx_remove_wait_queue (C function)c.eventfd_ctx_remove_wait_queuehNtauh1hhjq hhhNhNubh)}(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](j+)}(hinth]hint}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj hhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKubj)}(h h]h }(hj- hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj hhhj, hKubj/)}(heventfd_ctx_remove_wait_queueh]j5)}(heventfd_ctx_remove_wait_queueh]heventfd_ctx_remove_wait_queue}(hj? hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj; ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj hhhj, hKubj)}(h?(struct eventfd_ctx *ctx, wait_queue_entry_t *wait, __u64 *cnt)h](j)}(hstruct eventfd_ctx *ctxh](j )}(hjzh]hstruct}(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW ubj)}(h h]h }(hjh hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjW ubh)}(hhh]j5)}(h eventfd_ctxh]h eventfd_ctx}(hjy hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjv ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{ modnameN classnameNjj)}j]j)}jjA sbc.eventfd_ctx_remove_wait_queueasbuh1hhjW ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjW ubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjW ubj5)}(hctxh]hctx}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjW ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjS ubj)}(hwait_queue_entry_t *waith](h)}(hhh]j5)}(hwait_queue_entry_th]hwait_queue_entry_t}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.eventfd_ctx_remove_wait_queueasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hwaith]hwait}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjS ubj)}(h __u64 *cnth](h)}(hhh]j5)}(h__u64h]h__u64}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j c.eventfd_ctx_remove_wait_queueasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjQhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hcnth]hcnt}(hj^hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjS ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj hhhj, hKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj hhhj, hKubah}(h]j ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj, hKhj hhubjc)}(hhh]h)}(h0Read the current counter and removes wait queue.h]h0Read the current counter and removes wait queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhjhhubah}(h]h ]h"]h$]h&]uh1jbhj hhhj, hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjq hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhjubj)}(hhh](j)}(h=``struct eventfd_ctx *ctx`` [in] Pointer to eventfd context. h](j)}(h``struct eventfd_ctx *ctx``h]j)}(hjh]hstruct eventfd_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhjubj)}(hhh]h)}(h [in] Pointer to eventfd context.h]h [in] Pointer to eventfd context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h<``wait_queue_entry_t *wait`` [in] Wait queue to be removed. h](j)}(h``wait_queue_entry_t *wait``h]j)}(hjh]hwait_queue_entry_t *wait}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhjubj)}(hhh]h)}(h[in] Wait queue to be removed.h]h[in] Wait queue to be removed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``__u64 *cnt`` [out] Pointer to the 64-bit counter value. h](j)}(h``__u64 *cnt``h]j)}(hj;h]h __u64 *cnt}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhj5ubj)}(hhh]h)}(h*[out] Pointer to the 64-bit counter value.h]h*[out] Pointer to the 64-bit counter value.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhjubh)}(h:Returns ``0`` if successful, or the following error codes:h](hReturns }(hjhhhNhNubj)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- if successful, or the following error codes:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhjubh option_list)}(hhh]hoption_list_item)}(hhh](h option_group)}(hhh]hoption)}(h-EAGAINh](h option_string)}(h-Eh]h-E}hjsbah}(h]h ]h"]h$]h&]uh1jhjubhoption_argument)}(hAGAINh]hAGAIN}(hjhhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubh description)}(h$: The operation would have blocked. h]h)}(h#: The operation would have blocked.h]h#: The operation would have blocked.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heventfd_fget (C function)c.eventfd_fgethNtauh1hhjq hhhNhNubh)}(hhh](j)}(h#struct file * eventfd_fget (int fd)h]j)}(h!struct file *eventfd_fget(int fd)h](j )}(hjzh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chMCubj)}(h h]h }(hjShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAhhhjRhMCubh)}(hhh]j5)}(hfileh]hfile}(hjdhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j)}j eventfd_fgetsbc.eventfd_fgetasbuh1hhjAhhhjRhMCubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAhhhjRhMCubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjAhhhjRhMCubj/)}(h eventfd_fgeth]j5)}(hjh]h eventfd_fget}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjAhhhjRhMCubj)}(h(int fd)h]j)}(hint fdh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hfdh]hfd}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjAhhhjRhMCubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj=hhhjRhMCubah}(h]j8ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjRhMChj:hhubjc)}(hhh]h)}(h2Acquire a reference of an eventfd file descriptor.h]h2Acquire a reference of an eventfd file descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chM:hjhhubah}(h]h ]h"]h$]h&]uh1jbhj:hhhjRhMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjq hNhNubj)}(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)}(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:119: ./fs/eventfd.chM>hj!ubj)}(hhh]j)}(h)``int fd`` [in] Eventfd file descriptor. h](j)}(h ``int fd``h]j)}(hjFh]hint fd}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./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&]uh1jhj!ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chM=hj!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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chM=hj!ubj)}(hhh](j)}(hhh](j)}(hhh]j)}(h-EBADFh](j)}(h-Eh]h-E}hjsbah}(h]h ]h"]h$]h&]uh1jhjubj)}(hBADFh]hBADF}(hjhhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h!: Invalid **fd** file descriptor.h]h)}(hjh](h : Invalid }(hjhhhNhNubj)}(h**fd**h]hfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh file descriptor.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(h-EINVALh](j)}(h-Eh]h-E}hjsbah}(h]h ]h"]h$]h&]uh1jhjubj)}(hINVALh]hINVAL}(hj$hhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h4: The **fd** file descriptor is not an eventfd file.h]h)}(hjAh](h: The }(hjChhhNhNubj)}(h**fd**h]hfd}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh( file descriptor is not an eventfd file.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chMAhj?ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heventfd_ctx_fdget (C function)c.eventfd_ctx_fdgethNtauh1hhjq hhhNhNubh)}(hhh](j)}(h/struct eventfd_ctx * eventfd_ctx_fdget (int fd)h]j)}(h-struct eventfd_ctx *eventfd_ctx_fdget(int fd)h](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chM\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM\ubh)}(hhh]j5)}(h eventfd_ctxh]h eventfd_ctx}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jeventfd_ctx_fdgetsbc.eventfd_ctx_fdgetasbuh1hhjhhhjhM\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM\ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhM\ubj/)}(heventfd_ctx_fdgeth]j5)}(hjh]heventfd_ctx_fdget}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM\ubj)}(h(int fd)h]j)}(hint fdh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj5)}(hfdh]hfd}(hj+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubah}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM\ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM\ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM\hjhhubjc)}(hhh]h)}(h5Acquires a reference to the internal eventfd context.h]h5Acquires a reference to the internal eventfd context.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chMThjRhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhM\ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1hhhhjq hNhNubj)}(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)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chMXhjqubj)}(hhh]j)}(h)``int fd`` [in] Eventfd file descriptor. h](j)}(h ``int fd``h]j)}(hjh]hint fd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chMUhjubj)}(hhh]h)}(h[in] Eventfd file descriptor.h]h[in] Eventfd file descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chMWhjqubh)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chMWhjqubh)}(h eventfd_fgeth]h eventfd_fget}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:119: ./fs/eventfd.chMZhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h eventfd_ctx_fileget (C function)c.eventfd_ctx_filegethNtauh1hhjq hhhNhNubh)}(hhh](j)}(hjj>jjjuh1hhhhj<hNhNubj)}(h**Parameters** ``struct eventpoll *ep`` Pointer to the eventpoll context. **Return** a value different than ``zero`` if ready events are available, or ``zero`` otherwise.h](h)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjBubj)}(hhh]j)}(h;``struct eventpoll *ep`` Pointer to the eventpoll context. h](j)}(h``struct eventpoll *ep``h]j)}(hjgh]hstruct eventpoll *ep}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjaubj)}(hhh]h)}(h!Pointer to the eventpoll context.h]h!Pointer to the eventpoll context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjBubj)}(hhh]j)}(hUa value different than ``zero`` if ready events are available, or ``zero`` otherwise.h](j)}(h>a value different than ``zero`` if ready events are available,h](ha value different than }(hjhhhNhNubj)}(h``zero``h]hzero}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if ready events are available,}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubj)}(hhh]h)}(hor ``zero`` otherwise.h](hor }(hjhhhNhNubj)}(h``zero``h]hzero}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!busy_loop_ep_timeout (C function)c.busy_loop_ep_timeouthNtauh1hhj<hhhNhNubh)}(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](j+)}(hj.h]hbool}(hj6hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj2hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2hhhjChMubj/)}(hbusy_loop_ep_timeouth]j5)}(hbusy_loop_ep_timeouth]hbusy_loop_ep_timeout}(hjVhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjRubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj2hhhjChMubj)}(h0(unsigned long start_time, struct eventpoll *ep)h](j)}(hunsigned long start_timeh](j+)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubj5)}(h start_timeh]h start_time}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjjubj)}(hstruct eventpoll *eph](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h eventpollh]h eventpoll}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjXsbc.busy_loop_ep_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(heph]hep}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj2hhhjChMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj.hhhjChMubah}(h]j)ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjChMhj+hhubjc)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjChhubah}(h]h ]h"]h$]h&]uh1jbhj+hhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1hhhhj<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)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjbubj)}(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)}(hjh]hunsigned long start_time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubj)}(h;``struct eventpoll *ep`` Pointer to the eventpoll context. h](j)}(h``struct eventpoll *ep``h]j)}(hjh]hstruct eventpoll *ep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubj)}(hhh]h)}(h!Pointer to the eventpoll context.h]h!Pointer to the eventpoll context.}(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&]uh1jhjbubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjbubh)}(h1true if the timeout has expired, false otherwise.h]h1true if the timeout has expired, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hreverse_path_check (C function)c.reverse_path_checkhNtauh1hhj<hhhNhNubh)}(hhh](j)}(hint reverse_path_check (void)h]j)}(hint reverse_path_check(void)h](j+)}(hinth]hint}(hj@hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj<hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMubj)}(h h]h }(hjOhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<hhhjNhMubj/)}(hreverse_path_checkh]j5)}(hreverse_path_checkh]hreverse_path_check}(hjahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj]ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj<hhhjNhMubj)}(h(void)h]j)}(hvoidh]j+)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyubah}(h]h ]h"]h$]h&]noemphjLjMuh1jhjuubah}(h]h ]h"]h$]h&]jLjMuh1jhj<hhhjNhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj8hhhjNhMubah}(h]j3ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjNhMhj5hhubjc)}(hhh]h)}(hThe tfile_check_list is list of epitem_head, which have links that are proposed to be newly added. We need to make sure that those added links don't add too many paths such that we will spend all our time waking up eventpoll objects.h]hThe tfile_check_list is list of epitem_head, which have links that are proposed to be newly added. We need to make sure that those added links don’t add too many paths such that we will spend all our time waking up eventpoll objects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhj5hhhjNhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj<hNhNubj)}(h**Parameters** ``void`` no arguments **Return** ``zero`` if the proposed links don't create too many paths, ``-1`` otherwise.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:125: ./fs/eventpoll.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubj)}(hhh]h)}(h no argumentsh]h no arguments}(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 **Return**h]j)}(hj#h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubj)}(hhh]j)}(hM``zero`` if the proposed links don't create too many paths, ``-1`` otherwise.h](j)}(h;``zero`` if the proposed links don't create too many paths,h](j)}(h``zero``h]hzero}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh5 if the proposed links don’t create too many paths,}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj<ubj)}(hhh]h)}(h``-1`` otherwise.h](j)}(h``-1``h]h-1}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh otherwise.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj]ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hep_poll (C function) c.ep_pollhNtauh1hhj<hhhNhNubh)}(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](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hep_pollh]j5)}(hep_pollh]hep_poll}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hd(struct eventpoll *ep, struct epoll_event __user *events, int maxevents, struct timespec64 *timeout)h](j)}(hstruct eventpoll *eph](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h eventpollh]h eventpoll}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjsb c.ep_pollasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj8hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(heph]hep}(hjEhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h!struct epoll_event __user *eventsh](j )}(hjzh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjZubh)}(hhh]j5)}(h epoll_eventh]h epoll_event}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j& c.ep_pollasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjZubh__user}(hjZhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjZubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjZubj5)}(heventsh]hevents}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjZubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int maxeventsh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(h maxeventsh]h maxevents}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct timespec64 *timeouth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h timespec64h]h timespec64}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j& c.ep_pollasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj_hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(htimeouth]htimeout}(hjlhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj<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)}(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:125: ./fs/eventpoll.chMhjubj)}(hhh](j)}(h;``struct eventpoll *ep`` Pointer to the eventpoll context. h](j)}(h``struct eventpoll *ep``h]j)}(hjh]hstruct eventpoll *ep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubj)}(hhh]h)}(h!Pointer to the eventpoll context.h]h!Pointer to the eventpoll context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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)}(hjh]h!struct epoll_event __user *events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj ubj)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(hR``int maxevents`` Size (in terms of number of events) of the caller event buffer. h](j)}(h``int maxevents``h]j)}(hjJh]h int maxevents}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjDubj)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubj)}(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)}(hjh]hstruct timespec64 *timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj}ubj)}(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 }(hjhhhNhNubj)}(h **timeout**h]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhi ptr is NULL, the function will block until at least one event has been retrieved (or an error occurred).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubj)}(hhh]j)}(hWthe number of ready events which have been fetched, or an error code, in case of error.h](j)}(h9the number of ready events which have been fetched, or anh]h9the number of ready events which have been fetched, or an}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubj)}(hhh]h)}(herror code, in case of error.h]herror code, in case of error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hep_loop_check_proc (C function)c.ep_loop_check_prochNtauh1hhj<hhhNhNubh)}(hhh](j)}(h8int ep_loop_check_proc (struct eventpoll *ep, int depth)h]j)}(h7int ep_loop_check_proc(struct eventpoll *ep, int depth)h](j+)}(hinth]hint}(hjAhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj=hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMkubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj=hhhjOhMkubj/)}(hep_loop_check_proch]j5)}(hep_loop_check_proch]hep_loop_check_proc}(hjbhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj^ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj=hhhjOhMkubj)}(h!(struct eventpoll *ep, int depth)h](j)}(hstruct eventpoll *eph](j )}(hjzh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzubh)}(hhh]j5)}(h eventpollh]h eventpoll}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjdsbc.ep_loop_check_procasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjzubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjzubj5)}(heph]hep}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjzubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjvubj)}(h int depthh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hdepthh]hdepth}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjvubeh}(h]h ]h"]h$]h&]jLjMuh1jhj=hhhjOhMkubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj9hhhjOhMkubah}(h]j4ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjOhMkhj6hhubjc)}(hhh]h)}(hverify that adding an epoll file inside another epoll structure does not violate the constraints, in terms of closed loops, or too deep chains (which can result in excessive stack usage).h]hverify that adding an epoll file inside another epoll structure does not violate the constraints, in terms of closed loops, or too deep chains (which can result in excessive stack usage).}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chM`hj3 hhubah}(h]h ]h"]h$]h&]uh1jbhj6hhhjOhMkubeh}(h]h ](jfunctioneh"]h$]h&]jjjjN jjN jjjuh1hhhhj<hNhNubj)}(hXA**Parameters** ``struct eventpoll *ep`` the :c:type:`struct eventpoll ` to be currently checked. ``int depth`` Current depth of the path being checked. **Return** ``zero`` if adding the epoll **file** inside current epoll structure **ep** does not violate the constraints, or ``-1`` otherwise.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:125: ./fs/eventpoll.chMdhjR ubj)}(hhh](j)}(h]``struct eventpoll *ep`` the :c:type:`struct eventpoll ` to be currently checked. h](j)}(h``struct eventpoll *ep``h]j)}(hjw h]hstruct eventpoll *ep}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMehjq ubj)}(hhh]h)}(hCthe :c:type:`struct eventpoll ` to be currently checked.h](hthe }(hj hhhNhNubh)}(h&:c:type:`struct eventpoll `h]j)}(hj h]hstruct eventpoll}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj eventpolluh1hhj hMehj ubh to be currently checked.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMehj ubah}(h]h ]h"]h$]h&]uh1jhjq ubeh}(h]h ]h"]h$]h&]uh1jhj hMehjn ubj)}(h7``int depth`` Current depth of the path being checked. h](j)}(h ``int depth``h]j)}(hj h]h int depth}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMfhj ubj)}(hhh]h)}(h(Current depth of the path being checked.h]h(Current depth of the path being checked.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMfhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMfhjn ubeh}(h]h ]h"]h$]h&]uh1jhjR ubh)}(h **Return**h]j)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj !ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhhjR ubj)}(hhh]j)}(h``zero`` if adding the epoll **file** inside current epoll structure **ep** does not violate the constraints, or ``-1`` otherwise.h](j)}(h:``zero`` if adding the epoll **file** inside current epollh](j)}(h``zero``h]hzero}(hj/!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+!ubh if adding the epoll }(hj+!hhhNhNubj)}(h**file**h]hfile}(hjA!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+!ubh inside current epoll}(hj+!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhhj'!ubj)}(hhh]h)}(hGstructure **ep** does not violate the constraints, or ``-1`` otherwise.h](h structure }(hj]!hhhNhNubj)}(h**ep**h]hep}(hje!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]!ubh& does not violate the constraints, or }(hj]!hhhNhNubj)}(h``-1``h]h-1}(hjw!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]!ubh otherwise.}(hj]!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMihjZ!ubah}(h]h ]h"]h$]h&]uh1jhj'!ubeh}(h]h ]h"]h$]h&]uh1jhjY!hMhhj$!ubah}(h]h ]h"]h$]h&]uh1jhjR ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hep_loop_check (C function)c.ep_loop_checkhNtauh1hhj<hhhNhNubh)}(hhh](j)}(h>int ep_loop_check (struct eventpoll *ep, struct eventpoll *to)h]j)}(h=int ep_loop_check(struct eventpoll *ep, struct eventpoll *to)h](j+)}(hinth]hint}(hj!hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj!hhhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!hhhj!hMubj/)}(h ep_loop_checkh]j5)}(h ep_loop_checkh]h ep_loop_check}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj!hhhj!hMubj)}(h,(struct eventpoll *ep, struct eventpoll *to)h](j)}(hstruct eventpoll *eph](j )}(hjzh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj)}(h h]h }(hj "hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!ubh)}(hhh]j5)}(h eventpollh]h eventpoll}(hj"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j)}jj!sbc.ep_loop_checkasbuh1hhj!ubj)}(h h]h }(hj="hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!ubjX)}(hj[h]h*}(hjK"hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj!ubj5)}(heph]hep}(hjX"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj!ubj)}(hstruct eventpoll *toh](j )}(hjzh]hstruct}(hjq"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjm"ubj)}(h h]h }(hj~"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjm"ubh)}(hhh]j5)}(h eventpollh]h eventpoll}(hj"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j9"c.ep_loop_checkasbuh1hhjm"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjm"ubjX)}(hj[h]h*}(hj"hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjm"ubj5)}(htoh]hto}(hj"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjm"ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj!ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj!hhhj!hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj!hhhj!hMubah}(h]j!ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj!hMhj!hhubjc)}(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 (}(hj"hhhNhNubj)}(h**to**h]hto}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh*) into another epoll file (represented by }(hj"hhhNhNubj)}(h**ep**h]hep}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh2) does not create closed loops or too deep chains.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jbhj!hhhj!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.#jj.#jjjuh1hhhhj<hNhNubj)}(hX**Parameters** ``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)}(hj8#h]h Parameters}(hj:#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6#ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj2#ubj)}(hhh](j)}(hE``struct eventpoll *ep`` Pointer to the epoll we are inserting into. h](j)}(h``struct eventpoll *ep``h]j)}(hjW#h]hstruct eventpoll *ep}(hjY#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU#ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhjQ#ubj)}(hhh]h)}(h+Pointer to the epoll we are inserting into.h]h+Pointer to the epoll we are inserting into.}(hjp#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl#hMhjm#ubah}(h]h ]h"]h$]h&]uh1jhjQ#ubeh}(h]h ]h"]h$]h&]uh1jhjl#hMhjN#ubj)}(h>``struct eventpoll *to`` Pointer to the epoll to be inserted. h](j)}(h``struct eventpoll *to``h]j)}(hj#h]hstruct eventpoll *to}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj#ubj)}(hhh]h)}(h$Pointer to the epoll to be inserted.h]h$Pointer to the epoll to be inserted.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjN#ubeh}(h]h ]h"]h$]h&]uh1jhj2#ubh)}(h **Return**h]j)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj2#ubh)}(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}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh if adding the epoll }(hj#hhhNhNubj)}(h**to**h]hto}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh inside the epoll }(hj#hhhNhNubj)}(h**from**h]hfrom}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh& does not violate the constraints, or }(hj#hhhNhNubj)}(h``-1``h]h-1}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh otherwise.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:125: ./fs/eventpoll.chMhj2#ubeh}(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}(hjF$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC$hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!sysfs_create_file_ns (C function)c.sysfs_create_file_nshNtauh1hhjC$hhhNhNubh)}(hhh](j)}(h]int sysfs_create_file_ns (struct kobject *kobj, const struct attribute *attr, const void *ns)h]j)}(h\int sysfs_create_file_ns(struct kobject *kobj, const struct attribute *attr, const void *ns)h](j+)}(hinth]hint}(hjm$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hji$hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMxubj)}(h h]h }(hj|$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhji$hhhj{$hMxubj/)}(hsysfs_create_file_nsh]j5)}(hsysfs_create_file_nsh]hsysfs_create_file_ns}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hji$hhhj{$hMxubj)}(hD(struct kobject *kobj, const struct attribute *attr, const void *ns)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj$ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j)}jj$sbc.sysfs_create_file_nsasbuh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj$ubjX)}(hj[h]h*}(hj$hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj$ubj5)}(hkobjh]hkobj}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj$ubj)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj)}(h h]h }(hj)%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubj )}(hjzh]hstruct}(hj7%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj)}(h h]h }(hjD%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubh)}(hhh]j5)}(h attributeh]h attribute}(hjU%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjR%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjW%modnameN classnameNjj)}j]j$c.sysfs_create_file_nsasbuh1hhj%ubj)}(h h]h }(hjs%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubjX)}(hj[h]h*}(hj%hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj%ubj5)}(hattrh]hattr}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj$ubj)}(hconst void *nsh](j )}(hjh]hconst}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubj+)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubjX)}(hj[h]h*}(hj%hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj%ubj5)}(hnsh]hns}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj$ubeh}(h]h ]h"]h$]h&]jLjMuh1jhji$hhhj{$hMxubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhje$hhhj{$hMxubah}(h]j`$ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj{$hMxhjb$hhubjc)}(hhh]h)}(h5create an attribute file for an object with custom nsh]h5create an attribute file for an object with custom ns}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMshj&hhubah}(h]h ]h"]h$]h&]uh1jbhjb$hhhj{$hMxubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-&jj-&jjjuh1hhhhjC$hNhNubj)}(h**Parameters** ``struct kobject *kobj`` object we're creating for ``const struct attribute *attr`` attribute descriptor ``const void *ns`` namespace the new file should belong toh](h)}(h**Parameters**h]j)}(hj7&h]h Parameters}(hj9&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5&ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMwhj1&ubj)}(hhh](j)}(h3``struct kobject *kobj`` object we're creating for h](j)}(h``struct kobject *kobj``h]j)}(hjV&h]hstruct kobject *kobj}(hjX&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT&ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMthjP&ubj)}(hhh]h)}(hobject we're creating forh]hobject we’re creating for}(hjo&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk&hMthjl&ubah}(h]h ]h"]h$]h&]uh1jhjP&ubeh}(h]h ]h"]h$]h&]uh1jhjk&hMthjM&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:131: ./fs/sysfs/file.chMuhj&ubj)}(hhh]h)}(hattribute descriptorh]hattribute descriptor}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMuhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMuhjM&ubj)}(h:``const void *ns`` namespace the new file should belong toh](j)}(h``const void *ns``h]j)}(hj&h]hconst void *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:131: ./fs/sysfs/file.chMwhj&ubj)}(hhh]h)}(h'namespace the new file should belong toh]h'namespace the new file should belong to}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMvhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMwhjM&ubeh}(h]h ]h"]h$]h&]uh1jhj1&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$sysfs_add_file_to_group (C function)c.sysfs_add_file_to_grouphNtauh1hhjC$hhhNhNubh)}(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](j+)}(hinth]hint}(hj"'hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj'hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hj1'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'hhhj0'hMubj/)}(hsysfs_add_file_to_grouph]j5)}(hsysfs_add_file_to_grouph]hsysfs_add_file_to_group}(hjC'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?'ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj'hhhj0'hMubj)}(hG(struct kobject *kobj, const struct attribute *attr, const char *group)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj_'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj['ubj)}(h h]h }(hjl'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj['ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj}'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjz'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jjE'sbc.sysfs_add_file_to_groupasbuh1hhj['ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj['ubjX)}(hj[h]h*}(hj'hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj['ubj5)}(hkobjh]hkobj}(hj'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj['ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjW'ubj)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'ubj )}(hjzh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'ubh)}(hhh]j5)}(h attributeh]h attribute}(hj (hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj (modnameN classnameNjj)}j]j'c.sysfs_add_file_to_groupasbuh1hhj'ubj)}(h h]h }(hj((hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'ubjX)}(hj[h]h*}(hj6(hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj'ubj5)}(hattrh]hattr}(hjC(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj'ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjW'ubj)}(hconst char *grouph](j )}(hjh]hconst}(hj\(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjX(ubj)}(h h]h }(hji(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjX(ubj+)}(hcharh]hchar}(hjw(hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjX(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjX(ubjX)}(hj[h]h*}(hj(hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjX(ubj5)}(hgrouph]hgroup}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjX(ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjW'ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj'hhhj0'hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj'hhhj0'hMubah}(h]j'ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj0'hMhj'hhubjc)}(hhh]h)}(h.add an attribute file to a pre-existing group.h]h.add an attribute file to a pre-existing group.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jbhj'hhhj0'hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1hhhhjC$hNhNubj)}(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}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj(ubj)}(hhh](j)}(h2``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:131: ./fs/sysfs/file.chMhj)ubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(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)}(h7``const struct attribute *attr`` attribute descriptor. h](j)}(h ``const struct attribute *attr``h]j)}(hjD)h]hconst struct attribute *attr}(hjF)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB)ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj>)ubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hj])hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY)hMhjZ)ubah}(h]h ]h"]h$]h&]uh1jhj>)ubeh}(h]h ]h"]h$]h&]uh1jhjY)hMhj)ubj)}(h!``const char *group`` group name.h](j)}(h``const char *group``h]j)}(hj})h]hconst char *group}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{)ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjw)ubj)}(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:131: ./fs/sysfs/file.chMhj)ubah}(h]h ]h"]h$]h&]uh1jhjw)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsysfs_chmod_file (C function)c.sysfs_chmod_filehNtauh1hhjC$hhhNhNubh)}(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](j+)}(hinth]hint}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj)hhhj)hMubj/)}(hsysfs_chmod_fileh]j5)}(hsysfs_chmod_fileh]hsysfs_chmod_file}(hj)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj)ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj)hhhj)hMubj)}(hB(struct kobject *kobj, const struct attribute *attr, umode_t mode)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj)}(h h]h }(hj!*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj2*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj/*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4*modnameN classnameNjj)}j]j)}jj)sbc.sysfs_chmod_fileasbuh1hhj*ubj)}(h h]h }(hjR*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*ubjX)}(hj[h]h*}(hj`*hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj*ubj5)}(hkobjh]hkobj}(hjm*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj*ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj *ubj)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*ubj )}(hjzh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*ubh)}(hhh]j5)}(h attributeh]h attribute}(hj*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]jN*c.sysfs_chmod_fileasbuh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*ubjX)}(hj[h]h*}(hj*hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj*ubj5)}(hattrh]hattr}(hj*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj*ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj *ubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]jN*c.sysfs_chmod_fileasbuh1hhj +ubj)}(h h]h }(hj2+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj +ubj5)}(hmodeh]hmode}(hj@+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj +ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj *ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj)hhhj)hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj)hhhj)hMubah}(h]j)ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj)hMhj)hhubjc)}(hhh]h)}(h6update the modified mode value on an object attribute.h]h6update the modified mode value on an object attribute.}(hjj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjg+hhubah}(h]h ]h"]h$]h&]uh1jbhj)hhhj)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1hhhhjC$hNhNubj)}(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)}(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:131: ./fs/sysfs/file.chMhj+ubj)}(hhh](j)}(h2``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:131: ./fs/sysfs/file.chMhj+ubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(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)}(h7``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:131: ./fs/sysfs/file.chMhj+ubj)}(hhh]h)}(hattribute descriptor.h]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+hMhj+ubj)}(h"``umode_t mode`` file permissions.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&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj,ubj)}(hhh]h)}(hfile permissions.h]hfile permissions.}(hj6,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj3,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj2,hMhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*sysfs_break_active_protection (C function)c.sysfs_break_active_protectionhNtauh1hhjC$hhhNhNubh)}(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 )}(hjzh]hstruct}(hjw,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs,hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjs,hhhj,hMubh)}(hhh]j5)}(h kernfs_nodeh]h kernfs_node}(hj,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j)}jsysfs_break_active_protectionsbc.sysfs_break_active_protectionasbuh1hhjs,hhhj,hMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjs,hhhj,hMubjX)}(hj[h]h*}(hj,hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjs,hhhj,hMubj/)}(hsysfs_break_active_protectionh]j5)}(hj,h]hsysfs_break_active_protection}(hj,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjs,hhhj,hMubj)}(h4(struct kobject *kobj, const struct attribute *attr)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj-hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj -ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j,c.sysfs_break_active_protectionasbuh1hhj,ubj)}(h h]h }(hj--hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubjX)}(hj[h]h*}(hj;-hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj,ubj5)}(hkobjh]hkobj}(hjH-hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj,ubj)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hja-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]-ubj)}(h h]h }(hjn-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj]-ubj )}(hjzh]hstruct}(hj|-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj]-ubh)}(hhh]j5)}(h attributeh]h attribute}(hj-hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j,c.sysfs_break_active_protectionasbuh1hhj]-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj]-ubjX)}(hj[h]h*}(hj-hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj]-ubj5)}(hattrh]hattr}(hj-hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj]-ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj,ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjs,hhhj,hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjo,hhhj,hMubah}(h]jj,ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj,hMhjl,hhubjc)}(hhh]h)}(hbreak "active" protectionh]hbreak “active” protection}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jbhjl,hhhj,hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1hhhhjC$hNhNubj)}(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)}(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:131: ./fs/sysfs/file.chMhj.ubj)}(hhh](j)}(hH``struct kobject *kobj`` The kernel object **attr** is associated with. 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:131: ./fs/sysfs/file.chMhj8.ubj)}(hhh]h)}(h.The kernel object **attr** is associated with.h](hThe kernel object }(hjW.hhhNhNubj)}(h**attr**h]hattr}(hj_.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW.ubh is associated with.}(hjW.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjS.hMhjT.ubah}(h]h ]h"]h$]h&]uh1jhj8.ubeh}(h]h ]h"]h$]h&]uh1jhjS.hMhj5.ubj)}(hU``const struct attribute *attr`` The attribute to break the "active" protection for. 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:131: ./fs/sysfs/file.chMhj.ubj)}(hhh]h)}(h3The attribute to break the "active" protection for.h]h7The attribute to break the “active” protection for.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj5.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:131: ./fs/sysfs/file.chMhj.ubh)}(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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,sysfs_unbreak_active_protection (C function)!c.sysfs_unbreak_active_protectionhNtauh1hhjC$hhhNhNubh)}(hhh](j)}(h=void sysfs_unbreak_active_protection (struct kernfs_node *kn)h]j)}(h/ubah}(h]h ]h"]h$]h&]jLjMuh1jhj/hhhj/hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj/hhhj/hMubah}(h]j.ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj/hMhj.hhubjc)}(hhh]h)}(hrestore "active" protectionh]hrestore “active” protection}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj/hhubah}(h]h ]h"]h$]h&]uh1jbhj.hhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1hhhhjC$hNhNubj)}(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)}(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:131: ./fs/sysfs/file.chMhj/ubj)}(hhh]j)}(hP``struct kernfs_node *kn`` Pointer returned by sysfs_break_active_protection(). h](j)}(h``struct kernfs_node *kn``h]j)}(hj 0h]hstruct kernfs_node *kn}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj0ubj)}(hhh]h)}(h4Pointer returned by sysfs_break_active_protection().h]h4Pointer returned by sysfs_break_active_protection().}(hj#0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj 0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubh)}(h**Description**h]j)}(hjE0h]h Description}(hjG0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC0ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj/ubh)}(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 }(hj[0hhhNhNubj)}(h**kn**h]hkn}(hjc0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[0ubh" after this function has returned.}(hj[0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!sysfs_remove_file_ns (C function)c.sysfs_remove_file_nshNtauh1hhjC$hhhNhNubh)}(hhh](j)}(h^void sysfs_remove_file_ns (struct kobject *kobj, const struct attribute *attr, const void *ns)h]j)}(h]void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr, const void *ns)h](j+)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj0hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0hhhj0hMubj/)}(hsysfs_remove_file_nsh]j5)}(hsysfs_remove_file_nsh]hsysfs_remove_file_ns}(hj0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj0hhhj0hMubj)}(hD(struct kobject *kobj, const struct attribute *attr, const void *ns)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j)}jj0sbc.sysfs_remove_file_nsasbuh1hhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj0ubjX)}(hj[h]h*}(hj%1hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj0ubj5)}(hkobjh]hkobj}(hj21hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj0ubj)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hjK1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjG1ubj)}(h h]h }(hjX1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjG1ubj )}(hjzh]hstruct}(hjf1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjG1ubj)}(h h]h }(hjs1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjG1ubh)}(hhh]j5)}(h attributeh]h attribute}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j1c.sysfs_remove_file_nsasbuh1hhjG1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjG1ubjX)}(hj[h]h*}(hj1hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjG1ubj5)}(hattrh]hattr}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjG1ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj0ubj)}(hconst void *nsh](j )}(hjh]hconst}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj1ubj+)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj1ubjX)}(hj[h]h*}(hj 2hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj1ubj5)}(hnsh]hns}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj1ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj0ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj0hhhj0hMubah}(h]j0ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj0hMhj0hhubjc)}(hhh]h)}(h/remove an object attribute with a custom ns tagh]h/remove an object attribute with a custom ns tag}(hjD2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjA2hhubah}(h]h ]h"]h$]h&]uh1jbhj0hhhj0hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\2jj\2jjjuh1hhhhjC$hNhNubj)}(hX**Parameters** ``struct kobject *kobj`` object we're acting for ``const struct attribute *attr`` attribute descriptor ``const void *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)}(hjf2h]h Parameters}(hjh2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd2ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj`2ubj)}(hhh](j)}(h1``struct kobject *kobj`` object we're acting for h](j)}(h``struct kobject *kobj``h]j)}(hj2h]hstruct kobject *kobj}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj2ubj)}(hhh]h)}(hobject we're acting forh]hobject we’re acting for}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj|2ubj)}(h6``const struct attribute *attr`` attribute descriptor h](j)}(h ``const struct attribute *attr``h]j)}(hj2h]hconst struct attribute *attr}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj2ubj)}(hhh]h)}(hattribute descriptorh]hattribute descriptor}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj|2ubj)}(h7``const void *ns`` namespace tag of the file to remove h](j)}(h``const void *ns``h]j)}(hj2h]hconst void *ns}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj2ubj)}(hhh]h)}(h#namespace tag of the file to removeh]h#namespace tag of the file to remove}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 3hMhj 3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj 3hMhj|2ubeh}(h]h ]h"]h$]h&]uh1jhj`2ubh)}(h**Description**h]j)}(hj23h]h Description}(hj43hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj03ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj`2ubh)}(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.}(hjH3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj`2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#sysfs_remove_file_self (C function)c.sysfs_remove_file_selfhNtauh1hhjC$hhhNhNubh)}(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](j+)}(hj.h]hbool}(hjw3hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjs3hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjs3hhhj3hMubj/)}(hsysfs_remove_file_selfh]j5)}(hsysfs_remove_file_selfh]hsysfs_remove_file_self}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjs3hhhj3hMubj)}(h4(struct kobject *kobj, const struct attribute *attr)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj3ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jj3sbc.sysfs_remove_file_selfasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj3ubjX)}(hj[h]h*}(hj3hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj3ubj5)}(hkobjh]hkobj}(hj 4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj3ubj)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hj%4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!4ubj)}(h h]h }(hj24hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!4ubj )}(hjzh]hstruct}(hj@4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!4ubj)}(h h]h }(hjM4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!4ubh)}(hhh]j5)}(h attributeh]h attribute}(hj^4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`4modnameN classnameNjj)}j]j3c.sysfs_remove_file_selfasbuh1hhj!4ubj)}(h h]h }(hj|4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!4ubjX)}(hj[h]h*}(hj4hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj!4ubj5)}(hattrh]hattr}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!4ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj3ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjs3hhhj3hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjo3hhhj3hMubah}(h]jj3ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj3hMhjl3hhubjc)}(hhh]h)}(h.remove an object attribute from its own methodh]h.remove an object attribute from its own method}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj4hhubah}(h]h ]h"]h$]h&]uh1jbhjl3hhhj3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1hhhhjC$hNhNubj)}(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)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj4ubj)}(hhh](j)}(h1``struct kobject *kobj`` object we're acting for h](j)}(h``struct kobject *kobj``h]j)}(hj5h]hstruct kobject *kobj}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj4ubj)}(hhh]h)}(hobject we're acting forh]hobject we’re acting for}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj4ubj)}(h6``const struct attribute *attr`` attribute descriptor h](j)}(h ``const struct attribute *attr``h]j)}(hj;5h]hconst struct attribute *attr}(hj=5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj95ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj55ubj)}(hhh]h)}(hattribute descriptorh]hattribute descriptor}(hjT5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP5hMhjQ5ubah}(h]h ]h"]h$]h&]uh1jhj55ubeh}(h]h ]h"]h$]h&]uh1jhjP5hMhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hjv5h]h Description}(hjx5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt5ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj4ubh)}(h%See kernfs_remove_self() for details.h]h%See kernfs_remove_self() for details.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)sysfs_remove_file_from_group (C function)c.sysfs_remove_file_from_grouphNtauh1hhjC$hhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj5hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM7ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5hhhj5hM7ubj/)}(hsysfs_remove_file_from_grouph]j5)}(hsysfs_remove_file_from_grouph]hsysfs_remove_file_from_group}(hj5hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj5hhhj5hM7ubj)}(hG(struct kobject *kobj, const struct attribute *attr, const char *group)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j)}jj5sbc.sysfs_remove_file_from_groupasbuh1hhj5ubj)}(h h]h }(hj66hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5ubjX)}(hj[h]h*}(hjD6hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj5ubj5)}(hkobjh]hkobj}(hjQ6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(hconst struct attribute *attrh](j )}(hjh]hconst}(hjj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjf6ubj)}(h h]h }(hjw6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjf6ubj )}(hjzh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjf6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjf6ubh)}(hhh]j5)}(h attributeh]h attribute}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j26c.sysfs_remove_file_from_groupasbuh1hhjf6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjf6ubjX)}(hj[h]h*}(hj6hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjf6ubj5)}(hattrh]hattr}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjf6ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(hconst char *grouph](j )}(hjh]hconst}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj6ubj+)}(hcharh]hchar}(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj6ubjX)}(hj[h]h*}(hj,7hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj6ubj5)}(hgrouph]hgroup}(hj97hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj5hhhj5hM7ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj5hhhj5hM7ubah}(h]j5ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj5hM7hj5hhubjc)}(hhh]h)}(h&remove an attribute file from a group.h]h&remove an attribute file from a group.}(hjc7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM2hj`7hhubah}(h]h ]h"]h$]h&]uh1jbhj5hhhj5hM7ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{7jj{7jjjuh1hhhhjC$hNhNubj)}(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)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM6hj7ubj)}(hhh](j)}(h2``struct kobject *kobj`` object we're acting for. h](j)}(h``struct kobject *kobj``h]j)}(hj7h]hstruct kobject *kobj}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM3hj7ubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM3hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM3hj7ubj)}(h7``const struct attribute *attr`` attribute descriptor. h](j)}(h ``const struct attribute *attr``h]j)}(hj7h]hconst struct attribute *attr}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM4hj7ubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM4hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM4hj7ubj)}(h!``const char *group`` group name.h](j)}(h``const char *group``h]j)}(hj8h]hconst char *group}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM6hj8ubj)}(hhh]h)}(h group name.h]h group name.}(hj/8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM5hj,8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj+8hM6hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"sysfs_create_bin_file (C function)c.sysfs_create_bin_filehNtauh1hhjC$hhhNhNubh)}(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](j+)}(hinth]hint}(hjp8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjl8hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMOubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjl8hhhj~8hMOubj/)}(hsysfs_create_bin_fileh]j5)}(hsysfs_create_bin_fileh]hsysfs_create_bin_file}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjl8hhhj~8hMOubj)}(h8(struct kobject *kobj, const struct bin_attribute *attr)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)}jj8sbc.sysfs_create_bin_fileasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8ubjX)}(hj[h]h*}(hj8hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj8ubj5)}(hkobjh]hkobj}(hj9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj8ubj)}(h const struct bin_attribute *attrh](j )}(hjh]hconst}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(h h]h }(hj,9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubj )}(hjzh]hstruct}(hj:9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(h h]h }(hjG9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubh)}(hhh]j5)}(h bin_attributeh]h bin_attribute}(hjX9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjU9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZ9modnameN classnameNjj)}j]j8c.sysfs_create_bin_fileasbuh1hhj9ubj)}(h h]h }(hjv9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubjX)}(hj[h]h*}(hj9hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9ubj5)}(hattrh]hattr}(hj9hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj8ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjl8hhhj~8hMOubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjh8hhhj~8hMOubah}(h]jc8ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj~8hMOhje8hhubjc)}(hhh]h)}(hcreate binary file for object.h]hcreate binary file for object.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMKhj9hhubah}(h]h ]h"]h$]h&]uh1jbhje8hhhj~8hMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1hhhhjC$hNhNubj)}(hp**Parameters** ``struct kobject *kobj`` object. ``const struct bin_attribute *attr`` attribute descriptor.h](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMOhj9ubj)}(hhh](j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]j)}(hj9h]hstruct kobject *kobj}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMLhj9ubj)}(hhh]h)}(hobject.h]hobject.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMLhj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hMLhj9ubj)}(h:``const struct bin_attribute *attr`` attribute descriptor.h](j)}(h$``const struct bin_attribute *attr``h]j)}(hj5:h]h const struct bin_attribute *attr}(hj7:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMNhj/:ubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hjN:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMMhjK:ubah}(h]h ]h"]h$]h&]uh1jhj/:ubeh}(h]h ]h"]h$]h&]uh1jhjJ:hMNhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"sysfs_remove_bin_file (C function)c.sysfs_remove_bin_filehNtauh1hhjC$hhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj:hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMcubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:hhhj:hMcubj/)}(hsysfs_remove_bin_fileh]j5)}(hsysfs_remove_bin_fileh]hsysfs_remove_bin_file}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj:hhhj:hMcubj)}(h8(struct kobject *kobj, const struct bin_attribute *attr)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j)}jj:sbc.sysfs_remove_bin_fileasbuh1hhj:ubj)}(h h]h }(hj ;hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubjX)}(hj[h]h*}(hj;hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj:ubj5)}(hkobjh]hkobj}(hj%;hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj:ubj)}(h const struct bin_attribute *attrh](j )}(hjh]hconst}(hj>;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:;ubj)}(h h]h }(hjK;hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:;ubj )}(hjzh]hstruct}(hjY;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:;ubj)}(h h]h }(hjf;hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:;ubh)}(hhh]j5)}(h bin_attributeh]h bin_attribute}(hjw;hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjt;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjy;modnameN classnameNjj)}j]j;c.sysfs_remove_bin_fileasbuh1hhj:;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:;ubjX)}(hj[h]h*}(hj;hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj:;ubj5)}(hattrh]hattr}(hj;hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:;ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj:ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj:hhhj:hMcubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj:hhhj:hMcubah}(h]j:ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj:hMchj:hhubjc)}(hhh]h)}(hremove binary file for object.h]hremove binary file for object.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM_hj;hhubah}(h]h ]h"]h$]h&]uh1jbhj:hhhj:hMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1hhhhjC$hNhNubj)}(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:131: ./fs/sysfs/file.chMchj;ubj)}(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:131: ./fs/sysfs/file.chM`hj<ubj)}(hhh]h)}(hobject.h]hobject.}(hj4<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0<hM`hj1<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj0<hM`hj<ubj)}(h:``const struct bin_attribute *attr`` attribute descriptor.h](j)}(h$``const struct bin_attribute *attr``h]j)}(hjT<h]h const struct bin_attribute *attr}(hjV<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMbhjN<ubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hjm<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMahjj<ubah}(h]h ]h"]h$]h&]uh1jhjN<ubeh}(h]h ]h"]h$]h&]uh1jhji<hMbhj<ubeh}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$sysfs_file_change_owner (C function)c.sysfs_file_change_ownerhNtauh1hhjC$hhhNhNubh)}(hhh](j)}(h^int sysfs_file_change_owner (struct kobject *kobj, const char *name, kuid_t kuid, kgid_t kgid)h]j)}(h]int sysfs_file_change_owner(struct kobject *kobj, const char *name, kuid_t kuid, kgid_t kgid)h](j+)}(hinth]hint}(hj<hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj<hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<hhhj<hMubj/)}(hsysfs_file_change_ownerh]j5)}(hsysfs_file_change_ownerh]hsysfs_file_change_owner}(hj<hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj<ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj<hhhj<hMubj)}(hB(struct kobject *kobj, const char *name, kuid_t kuid, kgid_t kgid)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<ubh)}(hhh]j5)}(hkobjecth]hkobject}(hj =hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj =modnameN classnameNjj)}j]j)}jj<sbc.sysfs_file_change_ownerasbuh1hhj<ubj)}(h h]h }(hj)=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<ubjX)}(hj[h]h*}(hj7=hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj<ubj5)}(hkobjh]hkobj}(hjD=hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj<ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj<ubj)}(hconst char *nameh](j )}(hjh]hconst}(hj]=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjY=ubj)}(h h]h }(hjj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjY=ubj+)}(hcharh]hchar}(hjx=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjY=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjY=ubjX)}(hj[h]h*}(hj=hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjY=ubj5)}(hnameh]hname}(hj=hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjY=ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj<ubj)}(h kuid_t kuidh](h)}(hhh]j5)}(hkuid_th]hkuid_t}(hj=hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j%=c.sysfs_file_change_ownerasbuh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj=ubj5)}(hkuidh]hkuid}(hj=hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj<ubj)}(h kgid_t kgidh](h)}(hhh]j5)}(hkgid_th]hkgid_t}(hj>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j%=c.sysfs_file_change_ownerasbuh1hhj=ubj)}(h h]h }(hj#>hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj=ubj5)}(hkgidh]hkgid}(hj1>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj<ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj<hhhj<hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj<hhhj<hMubah}(h]j<ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj<hMhj<hhubjc)}(hhh]h)}(hchange owner of a sysfs file.h]hchange owner of a sysfs file.}(hj[>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjX>hhubah}(h]h ]h"]h$]h&]uh1jbhj<hhhj<hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjs>jjs>jjjuh1hhhhjC$hNhNubj)}(hX_**Parameters** ``struct kobject *kobj`` object. ``const char *name`` name of the file to change. ``kuid_t kuid`` new owner's kuid ``kgid_t kgid`` new owner's kgid **Description** This function looks up the sysfs entry **name** under **kobj** and changes the ownership to **kuid**/**kgid**. Returns 0 on success or error code 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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjw>ubj)}(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:131: ./fs/sysfs/file.chMhj>ubj)}(hhh]h)}(hobject.h]hobject.}(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)}(h1``const char *name`` name of the file to change. 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:131: ./fs/sysfs/file.chMhj>ubj)}(hhh]h)}(hname of the file to change.h]hname of the file to change.}(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!``kuid_t kuid`` new owner's kuid h](j)}(h``kuid_t kuid``h]j)}(hj?h]h kuid_t kuid}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ?ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj?ubj)}(hhh]h)}(hnew owner's kuidh]hnew owner’s kuid}(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!``kgid_t kgid`` new owner's kgid h](j)}(h``kgid_t kgid``h]j)}(hjG?h]h kgid_t kgid}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE?ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjA?ubj)}(hhh]h)}(hnew owner's kgidh]hnew owner’s kgid}(hj`?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\?hMhj]?ubah}(h]h ]h"]h$]h&]uh1jhjA?ubeh}(h]h ]h"]h$]h&]uh1jhj\?hMhj>ubeh}(h]h ]h"]h$]h&]uh1jhjw>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:131: ./fs/sysfs/file.chMhjw>ubh)}(hnThis function looks up the sysfs entry **name** under **kobj** and changes the ownership to **kuid**/**kgid**.h](h'This function looks up the sysfs entry }(hj?hhhNhNubj)}(h**name**h]hname}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh under }(hj?hhhNhNubj)}(h**kobj**h]hkobj}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh and changes the ownership to }(hj?hhhNhNubj)}(h**kuid**h]hkuid}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh/}(hj?hhhNhNubj)}(h**kgid**h]hkgid}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjw>ubh)}(h.Returns 0 on success or error code on failure.h]h.Returns 0 on success or error code on failure.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjw>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsysfs_change_owner (C function)c.sysfs_change_ownerhNtauh1hhjC$hhhNhNubh)}(hhh](j)}(hGint sysfs_change_owner (struct kobject *kobj, kuid_t kuid, kgid_t kgid)h]j)}(hFint sysfs_change_owner(struct kobject *kobj, kuid_t kuid, kgid_t kgid)h](j+)}(hinth]hint}(hj@hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj@hhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hj-@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj@hhhj,@hMubj/)}(hsysfs_change_ownerh]j5)}(hsysfs_change_ownerh]hsysfs_change_owner}(hj?@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj;@ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj@hhhj,@hMubj)}(h0(struct kobject *kobj, kuid_t kuid, kgid_t kgid)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj[@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW@ubj)}(h h]h }(hjh@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjW@ubh)}(hhh]j5)}(hkobjecth]hkobject}(hjy@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjv@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{@modnameN classnameNjj)}j]j)}jjA@sbc.sysfs_change_ownerasbuh1hhjW@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjW@ubjX)}(hj[h]h*}(hj@hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjW@ubj5)}(hkobjh]hkobj}(hj@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjW@ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjS@ubj)}(h kuid_t kuidh](h)}(hhh]j5)}(hkuid_th]hkuid_t}(hj@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j@c.sysfs_change_ownerasbuh1hhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj@ubj5)}(hkuidh]hkuid}(hj@hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj@ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjS@ubj)}(h kgid_t kgidh](h)}(hhh]j5)}(hkgid_th]hkgid_t}(hjAhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j@c.sysfs_change_ownerasbuh1hhjAubj)}(h h]h }(hj6AhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAubj5)}(hkgidh]hkgid}(hjDAhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjAubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjS@ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj@hhhj,@hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj@hhhj,@hMubah}(h]j@ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj,@hMhj@hhubjc)}(hhh]h)}(h!change owner of the given object.h]h!change owner of the given object.}(hjnAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjkAhhubah}(h]h ]h"]h$]h&]uh1jbhj@hhhj,@hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1hhhhjC$hNhNubj)}(hX**Parameters** ``struct kobject *kobj`` object. ``kuid_t kuid`` new owner's kuid ``kgid_t kgid`` new owner's kgid **Description** Change the owner of the default directory, files, groups, and attributes of **kobj** to **kuid**/**kgid**. Note that sysfs_change_owner mirrors how the sysfs entries for a kobject are added by driver core. In summary, sysfs_change_owner() takes care of the default directory entry for **kobj**, the default attributes associated with the ktype of **kobj** and the default attributes associated with the ktype of **kobj**. Additional properties not added by driver core have to be changed by the driver or subsystem which created them. This is similar to how driver/subsystem specific entries are removed. Returns 0 on success or error code on failure.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjAubj)}(hhh](j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]j)}(hjAh]hstruct kobject *kobj}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjAubj)}(hhh]h)}(hobject.h]hobject.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h!``kuid_t kuid`` new owner's kuid h](j)}(h``kuid_t kuid``h]j)}(hjAh]h kuid_t kuid}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjAubj)}(hhh]h)}(hnew owner's kuidh]hnew owner’s kuid}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h!``kgid_t kgid`` new owner's kgid h](j)}(h``kgid_t kgid``h]j)}(hj!Bh]h kgid_t kgid}(hj#BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjBubj)}(hhh]h)}(hnew owner's kgidh]hnew owner’s kgid}(hj:BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6BhMhj7Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj6BhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j)}(hj\Bh]h Description}(hj^BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZBubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjAubh)}(hX\Change the owner of the default directory, files, groups, and attributes of **kobj** to **kuid**/**kgid**. Note that sysfs_change_owner mirrors how the sysfs entries for a kobject are added by driver core. In summary, sysfs_change_owner() takes care of the default directory entry for **kobj**, the default attributes associated with the ktype of **kobj** and the default attributes associated with the ktype of **kobj**. Additional properties not added by driver core have to be changed by the driver or subsystem which created them. This is similar to how driver/subsystem specific entries are removed.h](hLChange the owner of the default directory, files, groups, and attributes of }(hjrBhhhNhNubj)}(h**kobj**h]hkobj}(hjzBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrBubh to }(hjrBhhhNhNubj)}(h**kuid**h]hkuid}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrBubh/}(hjrBhhhNhNubj)}(h**kgid**h]hkgid}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrBubh. Note that sysfs_change_owner mirrors how the sysfs entries for a kobject are added by driver core. In summary, sysfs_change_owner() takes care of the default directory entry for }(hjrBhhhNhNubj)}(h**kobj**h]hkobj}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrBubh6, the default attributes associated with the ktype of }(hjrBhhhNhNubj)}(h**kobj**h]hkobj}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrBubh9 and the default attributes associated with the ktype of }(hjrBhhhNhNubj)}(h**kobj**h]hkobj}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrBubh. Additional properties not added by driver core have to be changed by the driver or subsystem which created them. This is similar to how driver/subsystem specific entries are removed.}(hjrBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjAubh)}(h.Returns 0 on success or error code on failure.h]h.Returns 0 on success or error code on failure.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsysfs_emit (C function) c.sysfs_emithNtauh1hhjC$hhhNhNubh)}(hhh](j)}(h0int sysfs_emit (char *buf, const char *fmt, ...)h]j)}(h/int sysfs_emit(char *buf, const char *fmt, ...)h](j+)}(hinth]hint}(hjChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjChhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hj+ChhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjChhhj*ChMubj/)}(h sysfs_emith]j5)}(h sysfs_emith]h sysfs_emit}(hj=ChhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9Cubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjChhhj*ChMubj)}(h!(char *buf, const char *fmt, ...)h](j)}(h char *bufh](j+)}(hcharh]hchar}(hjYChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUCubj)}(h h]h }(hjgChhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjUCubjX)}(hj[h]h*}(hjuChhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjUCubj5)}(hbufh]hbuf}(hjChhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjUCubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjQCubj)}(hconst char *fmth](j )}(hjh]hconst}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjCubj+)}(hcharh]hchar}(hjChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjCubjX)}(hj[h]h*}(hjChhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjCubj5)}(hfmth]hfmt}(hjChhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjQCubj)}(h...h]jX)}(h...h]h...}(hjChhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjCubah}(h]h ]h"]h$]h&]noemphjLjMuh1jhjQCubeh}(h]h ]h"]h$]h&]jLjMuh1jhjChhhj*ChMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjChhhj*ChMubah}(h]jCah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj*ChMhjChhubjc)}(hhh]h)}(h0scnprintf equivalent, aware of PAGE_SIZE buffer.h]h0scnprintf equivalent, aware of PAGE_SIZE buffer.}(hj"DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jbhjChhhj*ChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:Djj:Djjjuh1hhhhjC$hNhNubj)}(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)}(hjDDh]h Parameters}(hjFDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBDubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj>Dubj)}(hhh](j)}(h)``char *buf`` start of PAGE_SIZE buffer. h](j)}(h ``char *buf``h]j)}(hjcDh]h char *buf}(hjeDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj]Dubj)}(hhh]h)}(hstart of PAGE_SIZE buffer.h]hstart of PAGE_SIZE buffer.}(hj|DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxDhMhjyDubah}(h]h ]h"]h$]h&]uh1jhj]Dubeh}(h]h ]h"]h$]h&]uh1jhjxDhMhjZDubj)}(h``const char *fmt`` format h](j)}(h``const char *fmt``h]j)}(hjDh]hconst char *fmt}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjDubj)}(hhh]h)}(hformath]hformat}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjZDubj)}(h)``...`` optional arguments to **format** h](j)}(h``...``h]j)}(hjDh]h...}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjDubj)}(hhh]h)}(h optional arguments to **format**h](hoptional arguments to }(hjDhhhNhNubj)}(h **format**h]hformat}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjZDubeh}(h]h ]h"]h$]h&]uh1jhj>Dubh)}(h**Description**h]j)}(hjEh]h Description}(hj EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj>Dubh)}(h0Returns number of characters written to **buf**.h](h(Returns number of characters written to }(hj4EhhhNhNubj)}(h**buf**h]hbuf}(hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsysfs_emit_at (C function)c.sysfs_emit_athNtauh1hhjC$hhhNhNubh)}(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](j+)}(hinth]hint}(hjuEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjqEhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMubj)}(h h]h }(hjEhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjqEhhhjEhMubj/)}(h sysfs_emit_ath]j5)}(h sysfs_emit_ath]h sysfs_emit_at}(hjEhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjEubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjqEhhhjEhMubj)}(h)(char *buf, int at, const char *fmt, ...)h](j)}(h char *bufh](j+)}(hcharh]hchar}(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjEubjX)}(hj[h]h*}(hjEhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjEubj5)}(hbufh]hbuf}(hjEhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjEubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjEubj)}(hint ath](j+)}(hinth]hint}(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjEubj)}(h h]h }(hjFhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjEubj5)}(hath]hat}(hjFhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjEubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjEubj)}(hconst char *fmth](j )}(hjh]hconst}(hj)FhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%Fubj)}(h h]h }(hj6FhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%Fubj+)}(hcharh]hchar}(hjDFhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%Fubj)}(h h]h }(hjRFhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%FubjX)}(hj[h]h*}(hj`FhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj%Fubj5)}(hfmth]hfmt}(hjmFhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%Fubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjEubj)}(h...h]jX)}(hjCh]h...}(hjFhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjFubah}(h]h ]h"]h$]h&]noemphjLjMuh1jhjEubeh}(h]h ]h"]h$]h&]jLjMuh1jhjqEhhhjEhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjmEhhhjEhMubah}(h]jhEah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjEhMhjjEhhubjc)}(hhh]h)}(h0scnprintf equivalent, aware of PAGE_SIZE buffer.h]h0scnprintf equivalent, aware of PAGE_SIZE buffer.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM hjFhhubah}(h]h ]h"]h$]h&]uh1jbhjjEhhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1hhhhjC$hNhNubj)}(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)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjFubj)}(hhh](j)}(h)``char *buf`` start of PAGE_SIZE buffer. h](j)}(h ``char *buf``h]j)}(hjFh]h char *buf}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM hjFubj)}(hhh]h)}(hstart of PAGE_SIZE buffer.h]hstart of PAGE_SIZE buffer.}(hj GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM hjGubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjGhM hjFubj)}(hX``int at`` offset in **buf** to start write in bytes **at** must be >= 0 && < PAGE_SIZE h](j)}(h ``int at``h]j)}(hj)Gh]hint at}(hj+GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Gubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj#Gubj)}(hhh]h)}(hLoffset in **buf** to start write in bytes **at** must be >= 0 && < PAGE_SIZEh](h offset in }(hjBGhhhNhNubj)}(h**buf**h]hbuf}(hjJGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBGubh to start write in bytes }(hjBGhhhNhNubj)}(h**at**h]hat}(hj\GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBGubh must be >= 0 && < PAGE_SIZE}(hjBGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhj?Gubah}(h]h ]h"]h$]h&]uh1jhj#Gubeh}(h]h ]h"]h$]h&]uh1jhj>GhMhjFubj)}(h``const char *fmt`` format h](j)}(h``const char *fmt``h]j)}(hjGh]hconst char *fmt}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjGubj)}(hhh]h)}(hformath]hformat}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjFubj)}(h&``...`` optional arguments to **fmt** h](j)}(h``...``h]j)}(hjGh]h...}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjGubj)}(hhh]h)}(hoptional arguments to **fmt**h](hoptional arguments to }(hjGhhhNhNubj)}(h**fmt**h]hfmt}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjFubeh}(h]h ]h"]h$]h&]uh1jhjFubh)}(h**Description**h]j)}(hj Hh]h Description}(hj HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjFubh)}(hBReturns number of characters written starting at &**buf**[**at**].h](h:Returns number of characters written starting at &**buf**[}(hjHhhhNhNubj)}(h**at**h]hat}(hj'HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh].}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'sysfs_bin_attr_simple_read (C function)c.sysfs_bin_attr_simple_readhNtauh1hhjC$hhhNhNubh)}(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]j5)}(hssize_th]hssize_t}(hjcHhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj`Hubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjeHmodnameN classnameNjj)}j]j)}jsysfs_bin_attr_simple_readsbc.sysfs_bin_attr_simple_readasbuh1hhj\HhhhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM9ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\HhhhjHhM9ubj/)}(hsysfs_bin_attr_simple_readh]j5)}(hjHh]hsysfs_bin_attr_simple_read}(hjHhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj\HhhhjHhM9ubj)}(hp(struct file *file, struct kobject *kobj, const struct bin_attribute *attr, char *buf, loff_t off, size_t count)h](j)}(hstruct file *fileh](j )}(hjzh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjHubh)}(hhh]j5)}(hfileh]hfile}(hjHhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]jHc.sysfs_bin_attr_simple_readasbuh1hhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjHubjX)}(hj[h]h*}(hjHhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjHubj5)}(hfileh]hfile}(hj IhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjHubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjHubj)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj"IhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj)}(h h]h }(hj/IhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubh)}(hhh]j5)}(hkobjecth]hkobject}(hj@IhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=Iubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBImodnameN classnameNjj)}j]jHc.sysfs_bin_attr_simple_readasbuh1hhjIubj)}(h h]h }(hj^IhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubjX)}(hj[h]h*}(hjlIhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjIubj5)}(hkobjh]hkobj}(hjyIhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjIubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjHubj)}(h const struct bin_attribute *attrh](j )}(hjh]hconst}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubj )}(hjzh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubh)}(hhh]j5)}(h bin_attributeh]h bin_attribute}(hjIhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]jHc.sysfs_bin_attr_simple_readasbuh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubjX)}(hj[h]h*}(hjIhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjIubj5)}(hattrh]hattr}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjIubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjHubj)}(h char *bufh](j+)}(hcharh]hchar}(hjJhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjJubj)}(h h]h }(hj+JhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJubjX)}(hj[h]h*}(hj9JhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjJubj5)}(hbufh]hbuf}(hjFJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjHubj)}(h loff_t offh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjbJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_Jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdJmodnameN classnameNjj)}j]jHc.sysfs_bin_attr_simple_readasbuh1hhj[Jubj)}(h h]h }(hjJhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[Jubj5)}(hoffh]hoff}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[Jubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjHubj)}(h size_t counth](h)}(hhh]j5)}(hsize_th]hsize_t}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]jHc.sysfs_bin_attr_simple_readasbuh1hhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjJubj5)}(hcounth]hcount}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjJubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjHubeh}(h]h ]h"]h$]h&]jLjMuh1jhj\HhhhjHhM9ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjXHhhhjHhM9ubah}(h]jSHah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjHhM9hjUHhhubjc)}(hhh]h)}(h)read callback to simply copy from memory.h]h)read callback to simply copy from memory.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM(hjJhhubah}(h]h ]h"]h$]h&]uh1jbhjUHhhhjHhM9ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1hhhhjC$hNhNubj)}(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)}(hj"Kh]h Parameters}(hj$KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Kubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM,hjKubj)}(hhh](j)}(h:``struct file *file`` attribute file which is being read. h](j)}(h``struct file *file``h]j)}(hjAKh]hstruct file *file}(hjCKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Kubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM)hj;Kubj)}(hhh]h)}(h#attribute file which is being read.h]h#attribute file which is being read.}(hjZKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVKhM)hjWKubah}(h]h ]h"]h$]h&]uh1jhj;Kubeh}(h]h ]h"]h$]h&]uh1jhjVKhM)hj8Kubj)}(h@``struct kobject *kobj`` object to which the attribute belongs. h](j)}(h``struct kobject *kobj``h]j)}(hjzKh]hstruct kobject *kobj}(hj|KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM*hjtKubj)}(hhh]h)}(h&object to which the attribute belongs.h]h&object to which the attribute belongs.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM*hjKubah}(h]h ]h"]h$]h&]uh1jhjtKubeh}(h]h ]h"]h$]h&]uh1jhjKhM*hj8Kubj)}(h;``const struct bin_attribute *attr`` attribute descriptor. h](j)}(h$``const struct bin_attribute *attr``h]j)}(hjKh]h const struct bin_attribute *attr}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM+hjKubj)}(hhh]h)}(hattribute descriptor.h]hattribute descriptor.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM+hjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhM+hj8Kubj)}(h"``char *buf`` destination buffer. h](j)}(h ``char *buf``h]j)}(hjKh]h char *buf}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM,hjKubj)}(hhh]h)}(hdestination buffer.h]hdestination buffer.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM,hjLubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjLhM,hj8Kubj)}(h3``loff_t off`` offset in bytes from which to read. h](j)}(h``loff_t off``h]j)}(hj%Lh]h loff_t off}(hj'LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#Lubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM-hjLubj)}(hhh]h)}(h#offset in bytes from which to read.h]h#offset in bytes from which to read.}(hj>LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:LhM-hj;Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj:LhM-hj8Kubj)}(h2``size_t count`` maximum number of bytes to read. h](j)}(h``size_t count``h]j)}(hj^Lh]h size_t count}(hj`LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Lubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM.hjXLubj)}(hhh]h)}(h maximum number of bytes to read.h]h maximum number of bytes to read.}(hjwLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsLhM.hjtLubah}(h]h ]h"]h$]h&]uh1jhjXLubeh}(h]h ]h"]h$]h&]uh1jhjsLhM.hj8Kubeh}(h]h ]h"]h$]h&]uh1jhjKubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM0hjKubh)}(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 }(hjLhhhNhNubj)}(h **private**h]hprivate}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh and }(hjLhhhNhNubj)}(h**size**h]hsize}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh~ members in struct bin_attribute must be set to the buffer’s location and size before the bin_attribute is created in sysfs.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM0hjKubh)}(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 }(hjLhhhNhNubj)}(h**off**h]hoff}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh and }(hjLhhhNhNubj)}(h **count**h]hcount}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh: is done in sysfs_kf_bin_read(). Negative value check for }(hjLhhhNhNubj)}(h**off**h]hoff}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh. is done in vfs_setpos() and default_llseek().}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM4hjKubh)}(h+Returns number of bytes written to **buf**.h](h#Returns number of bytes written to }(hj'MhhhNhNubj)}(h**buf**h]hbuf}(hj/MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Mubh.}(hj'MhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:131: ./fs/sysfs/file.chM7hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsysfs_create_link (C function)c.sysfs_create_linkhNtauh1hhjC$hhhNhNubh)}(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](j+)}(hinth]hint}(hjhMhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjdMhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKYubj)}(h h]h }(hjwMhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjdMhhhjvMhKYubj/)}(hsysfs_create_linkh]j5)}(hsysfs_create_linkh]hsysfs_create_link}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjdMhhhjvMhKYubj)}(h@(struct kobject *kobj, struct kobject *target, const char *name)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjMubh)}(hhh]j5)}(hkobjecth]hkobject}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j)}jjMsbc.sysfs_create_linkasbuh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjMubjX)}(hj[h]h*}(hjMhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjMubj5)}(hkobjh]hkobj}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjMubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjMubj)}(hstruct kobject *targeth](j )}(hjzh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubj)}(h h]h }(hj$NhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNubh)}(hhh]j5)}(hkobjecth]hkobject}(hj5NhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2Nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7NmodnameN classnameNjj)}j]jMc.sysfs_create_linkasbuh1hhjNubj)}(h h]h }(hjSNhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNubjX)}(hj[h]h*}(hjaNhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjNubj5)}(htargeth]htarget}(hjnNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjNubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjMubj)}(hconst char *nameh](j )}(hjh]hconst}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNubj+)}(hcharh]hchar}(hjNhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjNubjX)}(hj[h]h*}(hjNhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjNubj5)}(hnameh]hname}(hjNhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjNubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjMubeh}(h]h ]h"]h$]h&]jLjMuh1jhjdMhhhjvMhKYubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj`MhhhjvMhKYubah}(h]j[Mah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjvMhKYhj]Mhhubjc)}(hhh]h)}(h#create symlink between two objects.h]h#create symlink between two objects.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKThjNhhubah}(h]h ]h"]h$]h&]uh1jbhj]MhhhjvMhKYubeh}(h]h ](jfunctioneh"]h$]h&]jjjj Ojj Ojjjuh1hhhhjC$hNhNubj)}(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)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKXhjOubj)}(hhh](j)}(hL``struct kobject *kobj`` object whose directory we're creating the link in. h](j)}(h``struct kobject *kobj``h]j)}(hj6Oh]hstruct kobject *kobj}(hj8OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Oubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKUhj0Oubj)}(hhh]h)}(h2object whose directory we're creating the link in.h]h4object whose directory we’re creating the link in.}(hjOOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKOhKUhjLOubah}(h]h ]h"]h$]h&]uh1jhj0Oubeh}(h]h ]h"]h$]h&]uh1jhjKOhKUhj-Oubj)}(h5``struct kobject *target`` object we're pointing to. h](j)}(h``struct kobject *target``h]j)}(hjoOh]hstruct kobject *target}(hjqOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmOubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKVhjiOubj)}(hhh]h)}(hobject we're pointing to.h]hobject we’re pointing to.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKVhjOubah}(h]h ]h"]h$]h&]uh1jhjiOubeh}(h]h ]h"]h$]h&]uh1jhjOhKVhj-Oubj)}(h)``const char *name`` name of the symlink.h](j)}(h``const char *name``h]j)}(hjOh]hconst char *name}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKXhjOubj)}(hhh]h)}(hname of the symlink.h]hname of the symlink.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKWhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhKXhj-Oubeh}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%sysfs_create_link_nowarn (C function)c.sysfs_create_link_nowarnhNtauh1hhjC$hhhNhNubh)}(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](j+)}(hinth]hint}(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjOhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKiubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjOhhhjPhKiubj/)}(hsysfs_create_link_nowarnh]j5)}(hsysfs_create_link_nowarnh]hsysfs_create_link_nowarn}(hj#PhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjOhhhjPhKiubj)}(h@(struct kobject *kobj, struct kobject *target, const char *name)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hj?PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;Pubj)}(h h]h }(hjLPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj;Pubh)}(hhh]j5)}(hkobjecth]hkobject}(hj]PhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjZPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_PmodnameN classnameNjj)}j]j)}jj%Psbc.sysfs_create_link_nowarnasbuh1hhj;Pubj)}(h h]h }(hj}PhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj;PubjX)}(hj[h]h*}(hjPhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj;Pubj5)}(hkobjh]hkobj}(hjPhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj;Pubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj7Pubj)}(hstruct kobject *targeth](j )}(hjzh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjPubh)}(hhh]j5)}(hkobjecth]hkobject}(hjPhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]jyPc.sysfs_create_link_nowarnasbuh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjPubjX)}(hj[h]h*}(hjPhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjPubj5)}(htargeth]htarget}(hjQhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjPubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj7Pubj)}(hconst char *nameh](j )}(hjh]hconst}(hj!QhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj)}(h h]h }(hj.QhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjQubj+)}(hcharh]hchar}(hjvoid sysfs_remove_link(struct kobject *kobj, const char *name)h](j+)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjRhhhjRhKubj/)}(hsysfs_remove_linkh]j5)}(hsysfs_remove_linkh]hsysfs_remove_link}(hjRhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjRubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjRhhhjRhKubj)}(h((struct kobject *kobj, const char *name)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjRubh)}(hhh]j5)}(hkobjecth]hkobject}(hjShhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j)}jjRsbc.sysfs_remove_linkasbuh1hhjRubj)}(h h]h }(hj%ShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjRubjX)}(hj[h]h*}(hj3ShhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjRubj5)}(hkobjh]hkobj}(hj@ShhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjRubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjRubj)}(hconst char *nameh](j )}(hjh]hconst}(hjYShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUSubj)}(h h]h }(hjfShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjUSubj+)}(hcharh]hchar}(hjtShhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUSubj)}(h h]h }(hjShhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjUSubjX)}(hj[h]h*}(hjShhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjUSubj5)}(hnameh]hname}(hjShhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjUSubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjRubeh}(h]h ]h"]h$]h&]jLjMuh1jhjRhhhjRhKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjRhhhjRhKubah}(h]jRah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjRhKhjRhhubjc)}(hhh]h)}(h%remove symlink in object's directory.h]h'remove symlink in object’s directory.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKhjShhubah}(h]h ]h"]h$]h&]uh1jbhjRhhhjRhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1hhhhjC$hNhNubj)}(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)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKhjSubj)}(hhh](j)}(h2``struct kobject *kobj`` object we're acting for. h](j)}(h``struct kobject *kobj``h]j)}(hjTh]hstruct kobject *kobj}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKhjTubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(hj!ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThKhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThKhjSubj)}(h3``const char *name`` name of the symlink to remove.h](j)}(h``const char *name``h]j)}(hjATh]hconst char *name}(hjCThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Tubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKhj;Tubj)}(hhh]h)}(hname of the symlink to remove.h]hname of the symlink to remove.}(hjZThhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKhjWTubah}(h]h ]h"]h$]h&]uh1jhj;Tubeh}(h]h ]h"]h$]h&]uh1jhjVThKhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjC$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!sysfs_rename_link_ns (C function)c.sysfs_rename_link_nshNtauh1hhjC$hhhNhNubh)}(hhh](j)}(h{int sysfs_rename_link_ns (struct kobject *kobj, struct kobject *targ, const char *old, const char *new, const void *new_ns)h]j)}(hzint sysfs_rename_link_ns(struct kobject *kobj, struct kobject *targ, const char *old, const char *new, const void *new_ns)h](j+)}(hinth]hint}(hjThhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjThhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKubj)}(h h]h }(hjThhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjThhhjThKubj/)}(hsysfs_rename_link_nsh]j5)}(hsysfs_rename_link_nsh]hsysfs_rename_link_ns}(hjThhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjTubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjThhhjThKubj)}(hb(struct kobject *kobj, struct kobject *targ, const char *old, const char *new, const void *new_ns)h](j)}(hstruct kobject *kobjh](j )}(hjzh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjTubh)}(hhh]j5)}(hkobjecth]hkobject}(hjThhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j)}jjTsbc.sysfs_rename_link_nsasbuh1hhjTubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjTubjX)}(hj[h]h*}(hj$UhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjTubj5)}(hkobjh]hkobj}(hj1UhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjTubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjTubj)}(hstruct kobject *targh](j )}(hjzh]hstruct}(hjJUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFUubj)}(h h]h }(hjWUhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFUubh)}(hhh]j5)}(hkobjecth]hkobject}(hjhUhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjeUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjUmodnameN classnameNjj)}j]jUc.sysfs_rename_link_nsasbuh1hhjFUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjFUubjX)}(hj[h]h*}(hjUhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjFUubj5)}(htargh]htarg}(hjUhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjFUubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjTubj)}(hconst char *oldh](j )}(hjh]hconst}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjUubj+)}(hcharh]hchar}(hjUhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjUubjX)}(hj[h]h*}(hjUhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjUubj5)}(holdh]hold}(hjUhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjUubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjTubj)}(hconst char *newh](j )}(hjh]hconst}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj)}(h h]h }(hj$VhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVubj+)}(hcharh]hchar}(hj2VhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjVubj)}(h h]h }(hj@VhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVubjX)}(hj[h]h*}(hjNVhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjVubj5)}(hnewh]hnew}(hj[VhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjVubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjTubj)}(hconst void *new_nsh](j )}(hjh]hconst}(hjtVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpVubj+)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjpVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpVubjX)}(hj[h]h*}(hjVhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjpVubj5)}(hnew_nsh]hnew_ns}(hjVhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpVubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjTubeh}(h]h ]h"]h$]h&]jLjMuh1jhjThhhjThKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjThhhjThKubah}(h]jTah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjThKhjThhubjc)}(hhh]h)}(h%rename symlink in object's directory.h]h'rename symlink in object’s directory.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKhjVhhubah}(h]h ]h"]h$]h&]uh1jbhjThhhjThKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1hhhhjC$hNhNubj)}(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 void *new_ns`` new namespace of the symlink. A helper function for the common rename symlink idiom.h](h)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKhjVubj)}(hhh](j)}(h2``struct kobject *kobj`` object we're acting for. h](j)}(h``struct kobject *kobj``h]j)}(hj#Wh]hstruct kobject *kobj}(hj%WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Wubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:134: ./fs/sysfs/symlink.chKhjWubj)}(hhh]h)}(hobject we're acting for.h]hobject we’re acting for.}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj;[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@[modnameN classnameNjj)}j]j)}jdebugfs_create_file_unsafesbc.debugfs_create_file_unsafeasbuh1hhj[hhhj,[hMubj)}(h h]h }(hj_[hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[hhhj,[hMubjX)}(hj[h]h*}(hjm[hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj[hhhj,[hMubj/)}(hdebugfs_create_file_unsafeh]j5)}(hj\[h]hdebugfs_create_file_unsafe}(hj~[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjz[ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj[hhhj,[hMubj)}(hg(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[ubj+)}(hcharh]hchar}(hj[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[ubjX)}(hj[h]h*}(hj[hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj[ubj5)}(hnameh]hname}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj[ubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]jZ[c.debugfs_create_file_unsafeasbuh1hhj[ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[ubj5)}(hmodeh]hmode}(hj%\hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj[ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj[ubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj>\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:\ubj)}(h h]h }(hjK\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:\ubh)}(hhh]j5)}(hdentryh]hdentry}(hj\\hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjY\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^\modnameN classnameNjj)}j]jZ[c.debugfs_create_file_unsafeasbuh1hhj:\ubj)}(h h]h }(hjz\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:\ubjX)}(hj[h]h*}(hj\hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj:\ubj5)}(hparenth]hparent}(hj\hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:\ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj[ubj)}(h void *datah](j+)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\ubjX)}(hj[h]h*}(hj\hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj\ubj5)}(hdatah]hdata}(hj\hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj\ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj[ubj)}(h"const struct file_operations *fopsh](j )}(hjh]hconst}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\ubj )}(hjzh]hstruct}(hj ]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\ubh)}(hhh]j5)}(hfile_operationsh]hfile_operations}(hj)]hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+]modnameN classnameNjj)}j]jZ[c.debugfs_create_file_unsafeasbuh1hhj\ubj)}(h h]h }(hjG]hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\ubjX)}(hj[h]h*}(hjU]hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj\ubj5)}(hfopsh]hfops}(hjb]hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj\ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj[ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj[hhhj,[hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj[hhhj,[hMubah}(h]j[ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj,[hMhj[hhubjc)}(hhh]h)}(h'create a file in the debugfs filesystemh]h'create a file in the debugfs filesystem}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jbhj[hhhj,[hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1hhhhjpXhNhNubj)}(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)}(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:143: ./fs/debugfs/inode.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}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj]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]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj]ubj)}(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:143: ./fs/debugfs/inode.chMhj^ubj)}(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&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj]ubj)}(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}(hjA^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=^ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj9^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]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.}(hjX^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjU^ubah}(h]h ]h"]h$]h&]uh1jhj9^ubeh}(h]h ]h"]h$]h&]uh1jhjT^hMhj]ubj)}(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)}(hjy^h]h void *data}(hj{^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw^ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjs^ubj)}(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.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj^ubah}(h]h ]h"]h$]h&]uh1jhjs^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj]ubj)}(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:143: ./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.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.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&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj]ubh)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj]ubh)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj]ubh)}(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.}(hj#_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%debugfs_create_file_size (C function)c.debugfs_create_file_sizehNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjR_hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjN_hhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM$ubj)}(h h]h }(hja_hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjN_hhhj`_hM$ubj/)}(hdebugfs_create_file_sizeh]j5)}(hdebugfs_create_file_sizeh]hdebugfs_create_file_size}(hjs_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjo_ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjN_hhhj`_hM$ubj)}(hy(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops, loff_t file_size)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj_ubj+)}(hcharh]hchar}(hj_hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj_ubjX)}(hj[h]h*}(hj_hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj_ubj5)}(hnameh]hname}(hj_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj_ubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j)}jju_sbc.debugfs_create_file_sizeasbuh1hhj_ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj_ubj5)}(hmodeh]hmode}(hj`hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj_ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj_ubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj6`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2`ubj)}(h h]h }(hjC`hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2`ubh)}(hhh]j5)}(hdentryh]hdentry}(hjT`hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjQ`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjV`modnameN classnameNjj)}j]j `c.debugfs_create_file_sizeasbuh1hhj2`ubj)}(h h]h }(hjr`hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2`ubjX)}(hj[h]h*}(hj`hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj2`ubj5)}(hparenth]hparent}(hj`hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2`ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj_ubj)}(h void *datah](j+)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`ubjX)}(hj[h]h*}(hj`hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj`ubj5)}(hdatah]hdata}(hj`hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj`ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj_ubj)}(h"const struct file_operations *fopsh](j )}(hjh]hconst}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`ubj )}(hjzh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj)}(h h]h }(hjahhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`ubh)}(hhh]j5)}(hfile_operationsh]hfile_operations}(hj!ahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#amodnameN classnameNjj)}j]j `c.debugfs_create_file_sizeasbuh1hhj`ubj)}(h h]h }(hj?ahhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`ubjX)}(hj[h]h*}(hjMahhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj`ubj5)}(hfopsh]hfops}(hjZahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj`ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj_ubj)}(hloff_t file_sizeh](h)}(hhh]j5)}(hloff_th]hloff_t}(hjvahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjsaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxamodnameN classnameNjj)}j]j `c.debugfs_create_file_sizeasbuh1hhjoaubj)}(h h]h }(hjahhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjoaubj5)}(h file_sizeh]h file_size}(hjahhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjoaubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj_ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjN_hhhj`_hM$ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjJ_hhhj`_hM$ubah}(h]jE_ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj`_hM$hjG_hhubjc)}(hhh]h)}(h'create a file in the debugfs filesystemh]h'create a file in the debugfs filesystem}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjahhubah}(h]h ]h"]h$]h&]uh1jbhjG_hhhj`_hM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1hhhhjpXhNhNubj)}(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)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjaubj)}(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 bh]hconst char *name}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj bubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjbubj)}(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&bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"bhMhj#bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj"bhMhjbubj)}(h;``umode_t mode`` the permission that the file should have. h](j)}(h``umode_t mode``h]j)}(hjFbh]h umode_t mode}(hjHbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDbubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj@bubj)}(hhh]h)}(h)the permission that the file should have.h]h)the permission that the file should have.}(hj_bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[bhMhj\bubah}(h]h ]h"]h$]h&]uh1jhj@bubeh}(h]h ]h"]h$]h&]uh1jhj[bhMhjbubj)}(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)}(hjbh]hstruct dentry *parent}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}bubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjybubj)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjbubah}(h]h ]h"]h$]h&]uh1jhjybubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjbubj)}(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)}(hjbh]h void *data}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjbubj)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjbubj)}(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)}(hjbh]h"const struct file_operations *fops}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjbubj)}(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.}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj cubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjchMhjbubj)}(h'``loff_t file_size`` initial file size h](j)}(h``loff_t file_size``h]j)}(hj-ch]hloff_t file_size}(hj/chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+cubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj'cubj)}(hhh]h)}(hinitial file sizeh]hinitial file size}(hjFchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBchMhjCcubah}(h]h ]h"]h$]h&]uh1jhj'cubeh}(h]h ]h"]h$]h&]uh1jhjBchMhjbubeh}(h]h ]h"]h$]h&]uh1jhjaubh)}(h**Description**h]j)}(hjhch]h Description}(hjjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfcubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjaubh)}(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~chhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_dir (C function)c.debugfs_create_dirhNtauh1hhjpXhhhNhNubh)}(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 )}(hjzh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjchhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMHubj)}(h h]h }(hjchhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjchhhjchMHubh)}(hhh]j5)}(hdentryh]hdentry}(hjchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j)}jdebugfs_create_dirsbc.debugfs_create_dirasbuh1hhjchhhjchMHubj)}(h h]h }(hjchhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjchhhjchMHubjX)}(hj[h]h*}(hjchhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjchhhjchMHubj/)}(hdebugfs_create_dirh]j5)}(hjch]hdebugfs_create_dir}(hj dhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjdubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjchhhjchMHubj)}(h)(const char *name, struct dentry *parent)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj'dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#dubj)}(h h]h }(hj4dhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#dubj+)}(hcharh]hchar}(hjBdhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj#dubj)}(h h]h }(hjPdhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#dubjX)}(hj[h]h*}(hj^dhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj#dubj5)}(hnameh]hname}(hjkdhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#dubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjdubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjdubh)}(hhh]j5)}(hdentryh]hdentry}(hjdhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]jcc.debugfs_create_dirasbuh1hhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjdubjX)}(hj[h]h*}(hjdhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjdubj5)}(hparenth]hparent}(hjdhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjdubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjdubeh}(h]h ]h"]h$]h&]jLjMuh1jhjchhhjchMHubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjchhhjchMHubah}(h]jcah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjchMHhjchhubjc)}(hhh]h)}(h,create a directory in the debugfs filesystemh]h,create a directory in the debugfs filesystem}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM1hjehhubah}(h]h ]h"]h$]h&]uh1jbhjchhhjchMHubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1hhhhjpXhNhNubj)}(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)}(hj'eh]h Parameters}(hj)ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%eubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM5hj!eubj)}(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)}(hjFeh]hconst char *name}(hjHehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDeubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM3hj@eubj)}(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_ehhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM2hj\eubah}(h]h ]h"]h$]h&]uh1jhj@eubeh}(h]h ]h"]h$]h&]uh1jhj[ehM3hj=eubj)}(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)}(hjeh]hstruct dentry *parent}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~eubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM6hjzeubj)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM4hjeubah}(h]h ]h"]h$]h&]uh1jhjzeubeh}(h]h ]h"]h$]h&]uh1jhjehM6hj=eubeh}(h]h ]h"]h$]h&]uh1jhj!eubh)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM8hj!eubh)}(hAThis function creates a directory in debugfs with the given name.h]hAThis function creates a directory in debugfs with the given name.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM8hj!eubh)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM:hj!eubh)}(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 -}(hjehhhNhNubj)}(h ``ENODEV``h]hENODEV}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh will be returned.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM@hj!eubh)}(h**NOTE**h]j)}(hjfh]hNOTE}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMChj!eubh)}(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.}(hj)fhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMChj!eubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%debugfs_create_automount (C function)c.debugfs_create_automounthNtauh1hhjpXhhhNhNubh)}(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 )}(hjzh]hstruct}(hjXfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTfhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMtubj)}(h h]h }(hjffhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjTfhhhjefhMtubh)}(hhh]j5)}(hdentryh]hdentry}(hjwfhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjtfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjyfmodnameN classnameNjj)}j]j)}jdebugfs_create_automountsbc.debugfs_create_automountasbuh1hhjTfhhhjefhMtubj)}(h h]h }(hjfhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjTfhhhjefhMtubjX)}(hj[h]h*}(hjfhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjTfhhhjefhMtubj/)}(hdebugfs_create_automounth]j5)}(hjfh]hdebugfs_create_automount}(hjfhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjTfhhhjefhMtubj)}(hL(const char *name, struct dentry *parent, debugfs_automount_t f, void *data)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubj+)}(hcharh]hchar}(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubjX)}(hj[h]h*}(hj ghhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjfubj5)}(hnameh]hname}(hjghhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjfubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj/ghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+gubj)}(h h]h }(hjd_automount() would.h](h)}(h**Parameters**h]j)}(hj[hh]h Parameters}(hj]hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYhubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMnhjUhubj)}(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)}(hjzhh]hconst char *name}(hj|hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxhubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMkhjthubj)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMkhjhubah}(h]h ]h"]h$]h&]uh1jhjthubeh}(h]h ]h"]h$]h&]uh1jhjhhMkhjqhubj)}(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)}(hjhh]hstruct dentry *parent}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMnhjhubj)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMlhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMnhjqhubj)}(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)}(hjhh]hdebugfs_automount_t f}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMohjhubj)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMohjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihMohjqhubj)}(h/``void *data`` opaque argument to pass to f(). h](j)}(h``void *data``h]j)}(hj&ih]h void *data}(hj(ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$iubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMphj iubj)}(hhh]h)}(hopaque argument to pass to f().h]hopaque argument to pass to f().}(hj?ihhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;ihMphjd_automount() would.h](j)}(h**f**h]hf}(hj{ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwiubh* should return what ->d_automount() would.}(hjwihhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMrhjUhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#debugfs_create_symlink (C function)c.debugfs_create_symlinkhNtauh1hhjpXhhhNhNubh)}(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 )}(hjzh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjihhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMubj)}(h h]h }(hjihhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjihhhjihMubh)}(hhh]j5)}(hdentryh]hdentry}(hjihhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j)}jdebugfs_create_symlinksbc.debugfs_create_symlinkasbuh1hhjihhhjihMubj)}(h h]h }(hjihhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjihhhjihMubjX)}(hj[h]h*}(hjjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjihhhjihMubj/)}(hdebugfs_create_symlinkh]j5)}(hjih]hdebugfs_create_symlink}(hjjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjihhhjihMubj)}(h=(const char *name, struct dentry *parent, const char *target)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj.jhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*jubj)}(h h]h }(hj;jhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*jubj+)}(hcharh]hchar}(hjIjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj*jubj)}(h h]h }(hjWjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*jubjX)}(hj[h]h*}(hjejhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj*jubj5)}(hnameh]hname}(hjrjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj*jubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj&jubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubh)}(hhh]j5)}(hdentryh]hdentry}(hjjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]jic.debugfs_create_symlinkasbuh1hhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubjX)}(hj[h]h*}(hjjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjjubj5)}(hparenth]hparent}(hjjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj&jubj)}(hconst char *targeth](j )}(hjh]hconst}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubj+)}(hcharh]hchar}(hjkhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjjubj)}(h h]h }(hj$khhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjjubjX)}(hj[h]h*}(hj2khhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjjubj5)}(htargeth]htarget}(hj?khhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj&jubeh}(h]h ]h"]h$]h&]jLjMuh1jhjihhhjihMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjihhhjihMubah}(h]jiah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjihMhjihhubjc)}(hhh]h)}(h0create a symbolic link in the debugfs filesystemh]h0create a symbolic link in the debugfs filesystem}(hjikhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjfkhhubah}(h]h ]h"]h$]h&]uh1jbhjihhhjihMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1hhhhjpXhNhNubj)}(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)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubj)}(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)}(hjkh]hconst char *name}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubj)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubj)}(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)}(hjkh]hstruct dentry *parent}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubj)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubj)}(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)}(hjlh]hconst char *target}(hj lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjlubj)}(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.}(hj7lhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhj4lubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj3lhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjkubh)}(h**Description**h]j)}(hjZlh]h Description}(hj\lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXlubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubh)}(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.}(hjplhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubh)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubh)}(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 -}(hjlhhhNhNubj)}(h ``ENODEV``h]hENODEV}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh will be returned.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_remove (C function)c.debugfs_removehNtauh1hhjpXhhhNhNubh)}(hhh](j)}(h+void debugfs_remove (struct dentry *dentry)h]j)}(h*void debugfs_remove(struct dentry *dentry)h](j+)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjlhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjlhhhjlhMubj/)}(hdebugfs_removeh]j5)}(hdebugfs_removeh]hdebugfs_remove}(hjlhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjlubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjlhhhjlhMubj)}(h(struct dentry *dentry)h]j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hj mhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmubh)}(hhh]j5)}(hdentryh]hdentry}(hj*mhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj'mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,mmodnameN classnameNjj)}j]j)}jjlsbc.debugfs_removeasbuh1hhjmubj)}(h h]h }(hjJmhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmubjX)}(hj[h]h*}(hjXmhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmubj5)}(hdentryh]hdentry}(hjemhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjmubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjmubah}(h]h ]h"]h$]h&]jLjMuh1jhjlhhhjlhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjlhhhjlhMubah}(h]jlah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjlhMhjlhhubjc)}(hhh]h)}(hrecursively removes a directoryh]hrecursively removes a directory}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jbhjlhhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1hhhhjpXhNhNubj)}(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)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjmubj)}(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)}(hjmh]hstruct dentry *dentry}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjmubj)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjmubah}(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&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjmubh)}(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.)}(hj"nhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjmubh)}(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.}(hj1nhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&debugfs_lookup_and_remove (C function)c.debugfs_lookup_and_removehNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj`nhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\nhhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM3ubj)}(h h]h }(hjonhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj\nhhhjnnhM3ubj/)}(hdebugfs_lookup_and_removeh]j5)}(hdebugfs_lookup_and_removeh]hdebugfs_lookup_and_remove}(hjnhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj}nubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj\nhhhjnnhM3ubj)}(h)(const char *name, struct dentry *parent)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubj+)}(hcharh]hchar}(hjnhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubjX)}(hj[h]h*}(hjnhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjnubj5)}(hnameh]hname}(hjnhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjnubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj)}(h h]h }(hjohhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubh)}(hhh]j5)}(hdentryh]hdentry}(hjohhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j)}jjnsbc.debugfs_lookup_and_removeasbuh1hhjnubj)}(h h]h }(hj8ohhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjnubjX)}(hj[h]h*}(hjFohhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjnubj5)}(hparenth]hparent}(hjSohhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjnubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjnubeh}(h]h ]h"]h$]h&]jLjMuh1jhj\nhhhjnnhM3ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjXnhhhjnnhM3ubah}(h]jSnah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjnnhM3hjUnhhubjc)}(hhh]h)}(h4lookup a directory or file and recursively remove ith]h4lookup a directory or file and recursively remove it}(hj}ohhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM+hjzohhubah}(h]h ]h"]h$]h&]uh1jbhjUnhhhjnnhM3ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1hhhhjpXhNhNubj)}(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)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM/hjoubj)}(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)}(hjoh]hconst char *name}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM,hjoubj)}(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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM,hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM,hjoubj)}(hF``struct dentry *parent`` a pointer to the parent dentry of the item. h](j)}(h``struct dentry *parent``h]j)}(hjoh]hstruct dentry *parent}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM-hjoubj)}(hhh]h)}(h+a pointer to the parent dentry of the item.h]h+a pointer to the parent dentry of the item.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhj phM-hj pubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhj phM-hjoubeh}(h]h ]h"]h$]h&]uh1jhjoubh)}(h**Description**h]j)}(hj2ph]h Description}(hj4phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0pubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM/hjoubh)}(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.}(hjHphhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chM/hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h debugfs_change_name (C function)c.debugfs_change_namehNtauh1hhjpXhhhNhNubh)}(hhh](j)}(hEint debugfs_change_name (struct dentry *dentry, const char *fmt, ...)h]j)}(hDint debugfs_change_name(struct dentry *dentry, const char *fmt, ...)h](j+)}(hinth]hint}(hjwphhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjsphhh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMMubj)}(h h]h }(hjphhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjsphhhjphMMubj/)}(hdebugfs_change_nameh]j5)}(hdebugfs_change_nameh]hdebugfs_change_name}(hjphhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjsphhhjphMMubj)}(h-(struct dentry *dentry, const char *fmt, ...)h](j)}(hstruct dentry *dentryh](j )}(hjzh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpubh)}(hhh]j5)}(hdentryh]hdentry}(hjphhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j)}jjpsbc.debugfs_change_nameasbuh1hhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpubjX)}(hj[h]h*}(hjqhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjpubj5)}(hdentryh]hdentry}(hj qhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubj)}(hconst char *fmth](j )}(hjh]hconst}(hj&qhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"qubj)}(h h]h }(hj3qhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj"qubj+)}(hcharh]hchar}(hjAqhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj"qubj)}(h h]h }(hjOqhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj"qubjX)}(hj[h]h*}(hj]qhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj"qubj5)}(hfmth]hfmt}(hjjqhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"qubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubj)}(h...h]jX)}(hjCh]h...}(hjqhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjqubah}(h]h ]h"]h$]h&]noemphjLjMuh1jhjpubeh}(h]h ]h"]h$]h&]jLjMuh1jhjsphhhjphMMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjophhhjphMMubah}(h]jjpah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjphMMhjlphhubjc)}(hhh]h)}(h1rename a file/directory in the debugfs filesystemh]h1rename a file/directory in the debugfs filesystem}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMAhjqhhubah}(h]h ]h"]h$]h&]uh1jbhjlphhhjphMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1hhhhjpXhNhNubj)}(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)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMEhjqubj)}(hhh](j)}(h=``struct dentry *dentry`` dentry of an object to be renamed. h](j)}(h``struct dentry *dentry``h]j)}(hjqh]hstruct dentry *dentry}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMBhjqubj)}(hhh]h)}(h"dentry of an object to be renamed.h]h"dentry of an object to be renamed.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMBhjrubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjrhMBhjqubj)}(h(``const char *fmt`` format for new name h](j)}(h``const char *fmt``h]j)}(hj&rh]hconst char *fmt}(hj(rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$rubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:143: ./fs/debugfs/inode.chMChj rubj)}(hhh]h)}(hformat for new nameh]hformat for new name}(hj?rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;rhMChj(struct file *file, struct debugfs_cancellation *cancellation)h](j)}(hstruct file *fileh](j )}(hjzh]hstruct}(hjqwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmwubj)}(h h]h }(hj~whhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmwubh)}(hhh]j5)}(hfileh]hfile}(hjwhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]j)}jjWwsbc.debugfs_enter_cancellationasbuh1hhjmwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjmwubjX)}(hj[h]h*}(hjwhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjmwubj5)}(hfileh]hfile}(hjwhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjmwubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjiwubj)}(h)struct debugfs_cancellation *cancellationh](j )}(hjzh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjwubh)}(hhh]j5)}(hdebugfs_cancellationh]hdebugfs_cancellation}(hjxhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]jwc.debugfs_enter_cancellationasbuh1hhjwubj)}(h h]h }(hjxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjwubjX)}(hj[h]h*}(hj-xhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjwubj5)}(h cancellationh]h cancellation}(hj:xhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjwubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjiwubeh}(h]h ]h"]h$]h&]jLjMuh1jhj0whhhjBwhKubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj,whhhjBwhKubah}(h]j'wah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjBwhKhj)whhubjc)}(hhh]h)}(henter a debugfs cancellationh]henter a debugfs cancellation}(hjdxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjaxhhubah}(h]h ]h"]h$]h&]uh1jbhj)whhhjBwhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|xjj|xjjjuh1hhhhjpXhNhNubj)}(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)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjxubj)}(hhh](j)}(h.``struct file *file`` the file being accessed h](j)}(h``struct file *file``h]j)}(hjxh]hstruct file *file}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjxubj)}(hhh]h)}(hthe file being accessedh]hthe file being accessed}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjxubj)}(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)}(hjxh]h)struct debugfs_cancellation *cancellation}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjxubj)}(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}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjxubeh}(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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjxubh)}(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.}(hj0yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjxubh)}(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().}(hj?yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjxubh)}(h?This function must be paired with debugfs_leave_cancellation().h]h?This function must be paired with debugfs_leave_cancellation().}(hjNyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'debugfs_leave_cancellation (C function)c.debugfs_leave_cancellationhNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj}yhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyyhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyyhhhjyhMubj/)}(hdebugfs_leave_cancellationh]j5)}(hdebugfs_leave_cancellationh]hdebugfs_leave_cancellation}(hjyhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjyyhhhjyhMubj)}(h>(struct file *file, struct debugfs_cancellation *cancellation)h](j)}(hstruct file *fileh](j )}(hjzh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubh)}(hhh]j5)}(hfileh]hfile}(hjyhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j)}jjysbc.debugfs_leave_cancellationasbuh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubjX)}(hj[h]h*}(hjzhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjyubj5)}(hfileh]hfile}(hjzhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjyubj)}(h)struct debugfs_cancellation *cancellationh](j )}(hjzh]hstruct}(hj,zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(zubj)}(h h]h }(hj9zhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(zubh)}(hhh]j5)}(hdebugfs_cancellationh]hdebugfs_cancellation}(hjJzhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjGzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLzmodnameN classnameNjj)}j]jyc.debugfs_leave_cancellationasbuh1hhj(zubj)}(h h]h }(hjhzhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(zubjX)}(hj[h]h*}(hjvzhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj(zubj5)}(h cancellationh]h cancellation}(hjzhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(zubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjyubeh}(h]h ]h"]h$]h&]jLjMuh1jhjyyhhhjyhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjuyhhhjyhMubah}(h]jpyah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjyhMhjryhhubjc)}(hhh]h)}(hleave cancellation sectionh]hleave cancellation section}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjzhhubah}(h]h ]h"]h$]h&]uh1jbhjryhhhjyhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1hhhhjpXhNhNubj)}(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)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjzubj)}(hhh](j)}(h.``struct file *file`` the file being accessed h](j)}(h``struct file *file``h]j)}(hjzh]hstruct file *file}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhjzubj)}(hhh]h)}(hthe file being accessedh]hthe file being accessed}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hKhj{ubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj{hKhjzubj)}(hw``struct debugfs_cancellation *cancellation`` the cancellation previously registered with debugfs_enter_cancellation() h](j)}(h-``struct debugfs_cancellation *cancellation``h]j)}(hj'{h]h)struct debugfs_cancellation *cancellation}(hj){hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%{ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhj!{ubj)}(hhh]h)}(hHthe cancellation previously registered with debugfs_enter_cancellation()h]hHthe cancellation previously registered with debugfs_enter_cancellation()}(hj@{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chKhj={ubah}(h]h ]h"]h$]h&]uh1jhj!{ubeh}(h]h ]h"]h$]h&]uh1jhj<{hKhjzubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(h**Description**h]j)}(hjc{h]h Description}(hje{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja{ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjzubh)}(h6See the documentation of debugfs_enter_cancellation().h]h6See the documentation of debugfs_enter_cancellation().}(hjy{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_u8 (C function)c.debugfs_create_u8hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj{hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMiubj)}(h h]h }(hj{hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj{hhhj{hMiubj/)}(hdebugfs_create_u8h]j5)}(hdebugfs_create_u8h]hdebugfs_create_u8}(hj{hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj{ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj{hhhj{hMiubj)}(hB(const char *name, umode_t mode, struct dentry *parent, u8 *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj{ubj+)}(hcharh]hchar}(hj|hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj{ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj{ubjX)}(hj[h]h*}(hj|hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj{ubj5)}(hnameh]hname}(hj)|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj{ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj{ubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjE|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjB|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG|modnameN classnameNjj)}j]j)}jj{sbc.debugfs_create_u8asbuh1hhj>|ubj)}(h h]h }(hje|hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj>|ubj5)}(hmodeh]hmode}(hjs|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj>|ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj{ubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubh)}(hhh]j5)}(hdentryh]hdentry}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]ja|c.debugfs_create_u8asbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubjX)}(hj[h]h*}(hj|hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubj5)}(hparenth]hparent}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj{ubj)}(h u8 *valueh](h)}(hhh]j5)}(hu8h]hu8}(hj|hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]ja|c.debugfs_create_u8asbuh1hhj|ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|ubjX)}(hj[h]h*}(hj+}hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj|ubj5)}(hvalueh]hvalue}(hj8}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj{ubeh}(h]h ]h"]h$]h&]jLjMuh1jhj{hhhj{hMiubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj{hhhj{hMiubah}(h]j{ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj{hMihj{hhubjc)}(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}(hjb}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM\hj_}hhubah}(h]h ]h"]h$]h&]uh1jbhj{hhhj{hMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjz}jjz}jjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./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)}(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:146: ./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.}(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:``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&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM^hj}ubj)}(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}hM^hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM^hj}ubj)}(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:146: ./fs/debugfs/file.chMahj~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}(hj6~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:146: ./fs/debugfs/file.chM_hj+~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj*~hMahj}ubj)}(hU``u8 *value`` a pointer to the variable that the file should read to and write from. h](j)}(h ``u8 *value``h]j)}(hja~h]h u8 *value}(hjc~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_~ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMchj[~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.}(hjz~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMbhjw~ubah}(h]h ]h"]h$]h&]uh1jhj[~ubeh}(h]h ]h"]h$]h&]uh1jhjv~hMchj}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:146: ./fs/debugfs/file.chMehj~}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 }(hj~hhhNhNubj)}(h **value**h]hvalue}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh . If the }(hj~hhhNhNubj)}(h**mode**h]hmode}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh9 variable is so set, it can be read from, and written to.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMehj~}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_u16 (C function)c.debugfs_create_u16hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hdebugfs_create_u16h]j5)}(hdebugfs_create_u16h]hdebugfs_create_u16}(hj'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hC(const char *name, umode_t mode, struct dentry *parent, u16 *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ubj+)}(hcharh]hchar}(hj^hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj?ubjX)}(hj[h]h*}(hjzhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj?ubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj;ubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj)sbc.debugfs_create_u16asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj;ubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.debugfs_create_u16asbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj4hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hjAhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj;ubj)}(h u16 *valueh](h)}(hhh]j5)}(hu16h]hu16}(hj]hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]jc.debugfs_create_u16asbuh1hhjVubj)}(h h]h }(hj{hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjVubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjVubj5)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjVubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj;ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj~hhhjhMubah}(h]j~ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhj~hhubjc)}(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:146: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhj~hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj؀jj؀jjjuh1hhhhjpXhNhNubj)}(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:146: ./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)}(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:146: ./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:146: ./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:146: ./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:146: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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:146: ./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.}(hj؁hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjՁubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԁhMhjubeh}(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:146: ./fs/debugfs/file.chMhj܀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}(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:146: ./fs/debugfs/file.chMhj܀ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_u32 (C function)c.debugfs_create_u32hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjshhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj`hhhjrhMubj/)}(hdebugfs_create_u32h]j5)}(hdebugfs_create_u32h]hdebugfs_create_u32}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj`hhhjrhMubj)}(hC(const char *name, umode_t mode, struct dentry *parent, u32 *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjʂhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj؂hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.debugfs_create_u32asbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hmodeh]hmode}(hj/hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjDubh)}(hhh]j5)}(hdentryh]hdentry}(hjfhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]jc.debugfs_create_u32asbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjDubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjDubj5)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjDubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h u32 *valueh](h)}(hhh]j5)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.debugfs_create_u32asbuh1hhjubj)}(h h]h }(hjكhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj`hhhjrhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj\hhhjrhMubah}(h]jWah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjrhMhjYhhubjc)}(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:146: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjYhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./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:146: ./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:146: ./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)}(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:146: ./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 }(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:146: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhj˄ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubj)}(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:146: ./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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhj: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 }(hjohhhNhNubj)}(h **value**h]hvalue}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh . If the }(hjohhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh9 variable is so set, it can be read from, and written to.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_u64 (C function)c.debugfs_create_u64hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj…hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjхhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjЅhMubj/)}(hdebugfs_create_u64h]j5)}(hdebugfs_create_u64h]hdebugfs_create_u64}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj߅ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjЅhMubj)}(hC(const char *name, umode_t mode, struct dentry *parent, u64 *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj6hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hjChhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j)}jjsbc.debugfs_create_u64asbuh1hhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjXubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjXubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hjĆhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjƆmodnameN classnameNjj)}j]j{c.debugfs_create_u64asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h u64 *valueh](h)}(hhh]j5)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j{c.debugfs_create_u64asbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjEhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hvalueh]hvalue}(hjRhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjЅhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjЅhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjЅhMhjhhubjc)}(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}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjЅhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./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:146: ./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.}(hjևhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj҇hMhjӇubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj҇hMhjubj)}(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:146: ./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&]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)}(hj/h]hstruct dentry *parent}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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 }(hjHhhhNhNubj)}(h``NULL``h]hNULL}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubhF, then the file will be created in the root of the debugfs filesystem.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubj)}(hV``u64 *value`` a pointer to the variable that the file should read to and write from. h](j)}(h``u64 *value``h]j)}(hj{h]h u64 *value}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjuubj)}(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:146: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(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:146: ./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 }(hj͈hhhNhNubj)}(h **value**h]hvalue}(hjՈhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͈ubh . If the }(hj͈hhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͈ubh9 variable is so set, it can be read from, and written to.}(hj͈hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!debugfs_create_ulong (C function)c.debugfs_create_ulonghNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj.hMubj/)}(hdebugfs_create_ulongh]j5)}(hdebugfs_create_ulongh]hdebugfs_create_ulong}(hjAhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj=ubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj.hMubj)}(hM(const char *name, umode_t mode, struct dentry *parent, unsigned long *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjYubj+)}(hcharh]hchar}(hjxhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjYubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjYubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjYubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjUubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjCsbc.debugfs_create_ulongasbuh1hhjubj)}(h h]h }(hj݉hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjUubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hj"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]jىc.debugfs_create_ulongasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjNhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjUubj)}(hunsigned long *valueh](j+)}(hunsignedh]hunsigned}(hjthhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpubj+)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjpubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjpubj5)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjpubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjUubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj.hMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj.hMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj.hMhjhhubjc)}(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:146: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjpXhNhNubj)}(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:146: ./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:146: ./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.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(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&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjWubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubj)}(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:146: ./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:146: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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:146: ./fs/debugfs/file.chMhj܋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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjubah}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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 }(hj4hhhNhNubj)}(h **value**h]hvalue}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh . If the }(hj4hhhNhNubj)}(h**mode**h]hmode}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh9 variable is so set, it can be read from, and written to.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_x8 (C function)c.debugfs_create_x8hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM*ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM*ubj/)}(hdebugfs_create_x8h]j5)}(hdebugfs_create_x8h]hdebugfs_create_x8}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM*ubj)}(hB(const char *name, umode_t mode, struct dentry *parent, u8 *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjČhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjьhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hjߌhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}jjsbc.debugfs_create_x8asbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hmodeh]hmode}(hjRhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjgubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j@c.debugfs_create_x8asbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjgubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjgubj5)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjgubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h u8 *valueh](h)}(hhh]j5)}(hu8h]hu8}(hjލhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjۍubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j@c.debugfs_create_x8asbuh1hhj׍ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj׍ubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj׍ubj5)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj׍ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM*ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM*ubah}(h]jzah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM*hj|hhubjc)}(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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM!hj>hhubah}(h]h ]h"]h$]h&]uh1jbhj|hhhjhM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./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:146: ./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"hjyubj)}(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:146: ./fs/debugfs/file.chM#hjubj)}(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ЎhM#hjюubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjЎhM#hjyubj)}(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:146: ./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 }(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:146: ./fs/debugfs/file.chM$hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM&hjyubj)}(hT``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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM'hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM'hjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_x16 (C function)c.debugfs_create_x16hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM<ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhM<ubj/)}(hdebugfs_create_x16h]j5)}(hdebugfs_create_x16h]hdebugfs_create_x16}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhM<ubj)}(hC(const char *name, umode_t mode, struct dentry *parent, u16 *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj֏hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjҏubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjҏubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjҏubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjҏubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjҏubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjҏubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjΏubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)}jjsbc.debugfs_create_x16asbuh1hhj/ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/ubj5)}(hmodeh]hmode}(hjdhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj/ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjΏubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jRc.debugfs_create_x16asbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubjX)}(hj[h]h*}(hjǐhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjyubj5)}(hparenth]hparent}(hjԐhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjΏubj)}(h u16 *valueh](h)}(hhh]j5)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jRc.debugfs_create_x16asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hvalueh]hvalue}(hj)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjΏubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhM<ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhM<ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM<hjhhubjc)}(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}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM3hjPhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhM<ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1hhhhjpXhNhNubj)}(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)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM7hjoubj)}(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:146: ./fs/debugfs/file.chM4hjubj)}(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&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubj)}(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&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM5hjǑubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjǑubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubj)}(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:146: ./fs/debugfs/file.chM8hjubj)}(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}(hj'hhhNhNubah}(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:146: ./fs/debugfs/file.chM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hjubj)}(hU``u16 *value`` a pointer to the variable that the file should read to and write from.h](j)}(h``u16 *value``h]j)}(hjRh]h u16 *value}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM9hjLubj)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM9hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM9hjubeh}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_x32 (C function)c.debugfs_create_x32hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMNubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMNubj/)}(hdebugfs_create_x32h]j5)}(hdebugfs_create_x32h]hdebugfs_create_x32}(hj̒hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjȒubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMNubj)}(hC(const char *name, umode_t mode, struct dentry *parent, u32 *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hj,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjHhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j)}jjΒsbc.debugfs_create_x32asbuh1hhjAubj)}(h h]h }(hjhhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjAubj5)}(hmodeh]hmode}(hjvhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjAubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jdc.debugfs_create_x32asbuh1hhjubj)}(h h]h }(hj˓hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjٓhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h u32 *valueh](h)}(hhh]j5)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jdc.debugfs_create_x32asbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj.hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hvalueh]hvalue}(hj;hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMNubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMNubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMNhjhhubjc)}(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}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMEhjbhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}jj}jjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./fs/debugfs/file.chMIhjubj)}(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:146: ./fs/debugfs/file.chMFhjubj)}(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&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݔubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMGhjٔubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjٔubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjubj)}(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:146: ./fs/debugfs/file.chMJhjubj)}(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 }(hj1hhhNhNubj)}(h``NULL``h]hNULL}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubhF, then the file will be created in the root of the debugfs filesystem.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMHhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMJhjubj)}(hU``u32 *value`` a pointer to the variable that the file should read to and write from.h](j)}(h``u32 *value``h]j)}(hjdh]h u32 *value}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMKhj^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&]uh1hhjyhMKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_x64 (C function)c.debugfs_create_x64hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM`ubj)}(h h]h }(hj̕hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhj˕hM`ubj/)}(hdebugfs_create_x64h]j5)}(hdebugfs_create_x64h]hdebugfs_create_x64}(hjޕhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjڕubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhj˕hM`ubj)}(hC(const char *name, umode_t mode, struct dentry *parent, u64 *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj1hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hj>hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjZhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j)}jjsbc.debugfs_create_x64asbuh1hhjSubj)}(h h]h }(hjzhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjSubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjSubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jvc.debugfs_create_x64asbuh1hhjubj)}(h h]h }(hjݖhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h u64 *valueh](h)}(hhh]j5)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jvc.debugfs_create_x64asbuh1hhj ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hj@hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hvalueh]hvalue}(hjMhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhj˕hM`ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhj˕hM`ubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhj˕hM`hjhhubjc)}(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}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMWhjthhubah}(h]h ]h"]h$]h&]uh1jbhjhhhj˕hM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./fs/debugfs/file.chM[hjubj)}(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:146: ./fs/debugfs/file.chMXhjubj)}(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͗hMXhjΗubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj͗hMXhjubj)}(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:146: ./fs/debugfs/file.chMYhjubj)}(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&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubj)}(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:146: ./fs/debugfs/file.chM\hj$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 }(hjChhhNhNubj)}(h``NULL``h]hNULL}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubhF, then the file will be created in the root of the debugfs filesystem.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMZhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hM\hjubj)}(hU``u64 *value`` a pointer to the variable that the file should read to and write from.h](j)}(h``u64 *value``h]j)}(hjvh]h u64 *value}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM]hjpubj)}(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&]uh1hhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"debugfs_create_size_t (C function)c.debugfs_create_size_thNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjϘhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj˘hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjޘhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj˘hhhjݘhMubj/)}(hdebugfs_create_size_th]j5)}(hdebugfs_create_size_th]hdebugfs_create_size_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj˘hhhjݘhMubj)}(hF(const char *name, umode_t mode, struct dentry *parent, size_t *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hj'hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjChhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hjPhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjlhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j)}jjsbc.debugfs_create_size_tasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjeubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjeubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hjљhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjΙubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjәmodnameN classnameNjj)}j]jc.debugfs_create_size_tasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h size_t *valueh](h)}(hhh]j5)}(hsize_th]hsize_t}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]jc.debugfs_create_size_tasbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjRhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hvalueh]hvalue}(hj_hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj˘hhhjݘhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjǘhhhjݘhMubah}(h]j˜ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjݘhMhjĘhhubjc)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jbhjĘhhhjݘhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjpXhNhNubj)}(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:146: ./fs/debugfs/file.chM}hjubj)}(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:146: ./fs/debugfs/file.chMzhjĚ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&]uh1hhjߚhMzhjubah}(h]h ]h"]h$]h&]uh1jhjĚubeh}(h]h ]h"]h$]h&]uh1jhjߚhMzhjubj)}(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:146: ./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{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&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM~hj6ubj)}(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 }(hjUhhhNhNubj)}(h``NULL``h]hNULL}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubhF, then the file will be created in the root of the debugfs filesystem.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM|hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM~hjubj)}(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)}(hjh]h size_t *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$debugfs_create_atomic_t (C function)c.debugfs_create_atomic_thNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjݛhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjݛhhhjhMubj/)}(hdebugfs_create_atomic_th]j5)}(hdebugfs_create_atomic_th]hdebugfs_create_atomic_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjݛhhhjhMubj)}(hH(const char *name, umode_t mode, struct dentry *parent, atomic_t *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjUhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hjbhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj~hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.debugfs_create_atomic_tasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjwubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjwubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjŜhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjҜhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.debugfs_create_atomic_tasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hatomic_t *valueh](h)}(hhh]j5)}(hatomic_th]hatomic_t}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]jc.debugfs_create_atomic_tasbuh1hhj1ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj1ubjX)}(hj[h]h*}(hjdhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj1ubj5)}(hvalueh]hvalue}(hjqhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj1ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjݛhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjٛhhhjhMubah}(h]jԛah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhj֛hhubjc)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhj֛hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjpXhNhNubj)}(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:146: ./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:146: ./fs/debugfs/file.chMhj֝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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj֝ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjӝubj)}(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:146: ./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*hMhjӝubj)}(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)}(hjNh]hstruct dentry *parent}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjHubj)}(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 }(hjghhhNhNubj)}(h``NULL``h]hNULL}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubhF, then the file will be created in the root of the debugfs filesystem.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjӝubj)}(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)}(hjh]hatomic_t *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjӝubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h debugfs_create_bool (C function)c.debugfs_create_boolhNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hdebugfs_create_boolh]j5)}(hdebugfs_create_boolh]hdebugfs_create_bool}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hD(const char *name, umode_t mode, struct dentry *parent, bool *value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubj+)}(hcharh]hchar}(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj,ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj,ubjX)}(hj[h]h*}(hjghhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj,ubj5)}(hnameh]hname}(hjthhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj,ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.debugfs_create_boolasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjןhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjӟubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjӟubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.debugfs_create_boolasbuh1hhjӟubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjӟubjX)}(hj[h]h*}(hj!hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjӟubj5)}(hparenth]hparent}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjӟubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubj)}(h bool *valueh](j+)}(hj.h]hbool}(hjGhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjCubj)}(h h]h }(hjThhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjCubjX)}(hj[h]h*}(hjbhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjCubj5)}(hvalueh]hvalue}(hjohhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjCubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj(ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjpXhNhNubj)}(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:146: ./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:146: ./fs/debugfs/file.chMhjԠ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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjԠubeh}(h]h ]h"]h$]h&]uh1jhjhMhjѠubj)}(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:146: ./fs/debugfs/file.chMhj ubj)}(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjѠubj)}(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)}(hjLh]hstruct dentry *parent}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjFubj)}(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 }(hjehhhNhNubj)}(h``NULL``h]hNULL}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubhF, then the file will be created in the root of the debugfs filesystem.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjѠubj)}(hW``bool *value`` a pointer to the variable that the file should read to and write from. h](j)}(h``bool *value``h]j)}(hjh]h bool *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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:146: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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:146: ./fs/debugfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdebugfs_create_str (C function)c.debugfs_create_strhNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj9hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM{ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9hhhjKhM{ubj/)}(hdebugfs_create_strh]j5)}(hdebugfs_create_strh]hdebugfs_create_str}(hj^hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjZubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj9hhhjKhM{ubj)}(hE(const char *name, umode_t mode, struct dentry *parent, char **value)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjvubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjvubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjvubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjvubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjrubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjڢhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjעubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjܢmodnameN classnameNjj)}j]j)}jj`sbc.debugfs_create_strasbuh1hhjӢubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjӢubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjӢubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjrubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hj?hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]jc.debugfs_create_strasbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjkhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hjxhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjrubj)}(h char **valueh](j+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hvalueh]hvalue}(hjǣhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjrubeh}(h]h ]h"]h$]h&]jLjMuh1jhj9hhhjKhM{ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj5hhhjKhM{ubah}(h]j0ah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjKhM{hj2hhubjc)}(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:146: ./fs/debugfs/file.chMnhjhhubah}(h]h ]h"]h$]h&]uh1jbhj2hhhjKhM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1hhhhjpXhNhNubj)}(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. **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:146: ./fs/debugfs/file.chMrhj 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)}(hj2h]hconst char *name}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMohj,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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMohjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMohj)ubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjkh]h umode_t mode}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMphjeubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMphj)ubj)}(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:146: ./fs/debugfs/file.chMshjubj)}(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}(hjŤhhhNhNubah}(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:146: ./fs/debugfs/file.chMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshj)ubj)}(hX``char **value`` a pointer to the variable that the file should read to and write from. 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:146: ./fs/debugfs/file.chMuhjubj)}(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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMuhj)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:146: ./fs/debugfs/file.chMwhj 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 }(hjBhhhNhNubj)}(h **value**h]hvalue}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh . If the }(hjBhhhNhNubj)}(h**mode**h]hmode}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh9 variable is so set, it can be read from, and written to.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMwhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h debugfs_create_blob (C function)c.debugfs_create_blobhNtauh1hhjpXhhhNhNubh)}(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 )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdebugfs_create_blobsbc.debugfs_create_blobasbuh1hhjhhhjhMubj)}(h h]h }(hjեhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjhhhjhMubj/)}(hdebugfs_create_blobh]j5)}(hjҥh]hdebugfs_create_blob}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hZ(const char *name, umode_t mode, struct dentry *parent, struct debugfs_blob_wrapper *blob)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj+)}(hcharh]hchar}(hj*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hjFhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hnameh]hname}(hjShhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjohhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jХc.debugfs_create_blobasbuh1hhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhubj5)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjhubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hjҦhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjϦubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjԦmodnameN classnameNjj)}j]jХc.debugfs_create_blobasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h!struct debugfs_blob_wrapper *blobh](j )}(hjzh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(hdebugfs_blob_wrapperh]hdebugfs_blob_wrapper}(hjBhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jХc.debugfs_create_blobasbuh1hhj ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubjX)}(hj[h]h*}(hjnhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj ubj5)}(hblobh]hblob}(hj{hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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:146: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./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:146: ./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&]uh1jhjhMhjݧubj)}(h:``umode_t mode`` the permission that the file should have h](j)}(h``umode_t mode``h]j)}(hjh]h umode_t mode}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjubj)}(hhh]h)}(h(the permission that the file should haveh]h(the permission that the file should have}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjݧubj)}(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)}(hjXh]hstruct dentry *parent}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjRubj)}(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 }(hjqhhhNhNubj)}(h``NULL``h]hNULL}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubhF, then the file will be created in the root of the debugfs filesystem.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjݧubj)}(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:146: ./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:146: ./fs/debugfs/file.chMhjubah}(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&]uh1jhjިubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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:146: ./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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%debugfs_create_u32_array (C function)c.debugfs_create_u32_arrayhNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjchhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjvhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjchhhjuhMubj/)}(hdebugfs_create_u32_arrayh]j5)}(hdebugfs_create_u32_arrayh]hdebugfs_create_u32_array}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjchhhjuhMubj)}(hX(const char *name, umode_t mode, struct dentry *parent, struct debugfs_u32_array *array)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjͩhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj۩hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.debugfs_create_u32_arrayasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hmodeh]hmode}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj)}(h h]h }(hjXhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGubh)}(hhh]j5)}(hdentryh]hdentry}(hjihhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j c.debugfs_create_u32_arrayasbuh1hhjGubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjGubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjGubj5)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjGubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hstruct debugfs_u32_array *arrayh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjȪhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdebugfs_u32_arrayh]hdebugfs_u32_array}(hj٪hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj֪ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj۪modnameN classnameNjj)}j]j c.debugfs_create_u32_arrayasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(harrayh]harray}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhjchhhjuhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj_hhhjuhMubah}(h]jZah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjuhMhj\hhubjc)}(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:146: ./fs/debugfs/file.chM hj9hhubah}(h]h ]h"]h$]h&]uh1jbhj\hhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./fs/debugfs/file.chMhjXubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM hjwubj)}(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&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM hjtubj)}(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:146: ./fs/debugfs/file.chMhjubj)}(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&]uh1hhj˫hMhj̫ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˫hMhjtubj)}(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:146: ./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:146: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubj)}(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&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhj5ubj)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjtubeh}(h]h ]h"]h$]h&]uh1jhjXubh)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjXubh)}(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 }(hjhhhNhNubj)}(h **array**h]harray}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh as data. If the }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!debugfs_print_regs32 (C function)c.debugfs_print_regs32hNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hj߬hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj۬hhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj۬hhhjhM8ubj/)}(hdebugfs_print_regs32h]j5)}(hdebugfs_print_regs32h]hdebugfs_print_regs32}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hj۬hhhjhM8ubj)}(hc(struct seq_file *s, const struct debugfs_reg32 *regs, int nregs, void __iomem *base, char *prefix)h](j)}(hstruct seq_file *sh](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hseq_fileh]hseq_file}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j)}jjsbc.debugfs_print_regs32asbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hjh]hs}(hjuhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h const struct debugfs_reg32 *regsh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h debugfs_reg32h]h debugfs_reg32}(hjƭhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjíubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjȭmodnameN classnameNjj)}j]jVc.debugfs_print_regs32asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hregsh]hregs}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h int nregsh](j+)}(hinth]hint}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj5)}(hnregsh]hnregs}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(hvoid __iomem *baseh](j+)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjIubj)}(h h]h }(hj[hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubh__iomem}(hjIhhhNhNubj)}(h h]h }(hjmhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjIubjX)}(hj[h]h*}(hj{hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjIubj5)}(hbaseh]hbase}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjIubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubj)}(h char *prefixh](j+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hprefixh]hprefix}(hjʮhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjubeh}(h]h ]h"]h$]h&]jLjMuh1jhj۬hhhjhM8ubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhj׬hhhjhM8ubah}(h]jҬah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhM8hjԬhhubjc)}(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:146: ./fs/debugfs/file.chM*hjhhubah}(h]h ]h"]h$]h&]uh1jbhjԬhhhjhM8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1hhhhjpXhNhNubj)}(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:146: ./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)}(hj5h]hstruct seq_file *s}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM+hj/ubj)}(hhh]h)}(h4the seq_file structure being used to generate outputh]h4the seq_file structure being used to generate output}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM+hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhM+hj,ubj)}(hQ``const struct debugfs_reg32 *regs`` an array if struct debugfs_reg32 structures h](j)}(h$``const struct debugfs_reg32 *regs``h]j)}(hjnh]h const struct debugfs_reg32 *regs}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM,hjhubj)}(hhh]h)}(h+an array if struct debugfs_reg32 structuresh]h+an array if struct debugfs_reg32 structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM,hj,ubj)}(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:146: ./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-hj,ubj)}(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&]uh1jhjޯubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM.hjگubj)}(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&]uh1jhjگubeh}(h]h ]h"]h$]h&]uh1jhjhM.hj,ubj)}(h>``char *prefix`` a string to be prefixed to every output line h](j)}(h``char *prefix``h]j)}(hjh]h char *prefix}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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}(hj2hhhNhNubah}(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&]uh1jhjubh)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM1hjubh)}(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}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$debugfs_create_regset32 (C function)c.debugfs_create_regset32hNtauh1hhjpXhhhNhNubh)}(hhh](j)}(huvoid debugfs_create_regset32 (const char *name, umode_t mode, struct dentry *parent, struct debugfs_regset32 *regset)h]j)}(htvoid debugfs_create_regset32(const char *name, umode_t mode, struct dentry *parent, struct debugfs_regset32 *regset)h](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMhubj/)}(hdebugfs_create_regset32h]j5)}(hdebugfs_create_regset32h]hdebugfs_create_regset32}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMhubj)}(hX(const char *name, umode_t mode, struct dentry *parent, struct debugfs_regset32 *regset)h](j)}(hconst char *nameh](j )}(hjh]hconst}(hjְhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjҰubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjҰubj+)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjҰubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjҰubjX)}(hj[h]h*}(hj hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjҰubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjҰubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjΰubj)}(h umode_t modeh](h)}(hhh]j5)}(humode_th]humode_t}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)}jjsbc.debugfs_create_regset32asbuh1hhj/ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/ubj5)}(hmodeh]hmode}(hjdhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj/ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjΰubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubh)}(hhh]j5)}(hdentryh]hdentry}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jRc.debugfs_create_regset32asbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjyubjX)}(hj[h]h*}(hjDZhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjyubj5)}(hparenth]hparent}(hjԱhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjyubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjΰubj)}(hstruct debugfs_regset32 *regseth](j )}(hjzh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdebugfs_regset32h]hdebugfs_regset32}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jRc.debugfs_create_regset32asbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hj7hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hregseth]hregset}(hjDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhjΰubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMhubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMhubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhhjhhubjc)}(hhh]h)}(h2create a debugfs file that returns register valuesh]h2create a debugfs file that returns register values}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMZhjkhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjpXhNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM^hjubj)}(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:146: ./fs/debugfs/file.chM[hjubj)}(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&]uh1hhjIJhM[hjŲubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjIJhM[hjubj)}(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:146: ./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\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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./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 }(hj:hhhNhNubj)}(h``NULL``h]hNULL}(hjBhhhNhNubah}(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:146: ./fs/debugfs/file.chM]hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM_hjubj)}(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)}(hjmh]hstruct debugfs_regset32 *regset}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMbhjgubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chM`hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubeh}(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:146: ./fs/debugfs/file.chMdhjubh)}(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}(hjdzhsFhhNhNubah}(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:146: ./fs/debugfs/file.chMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(debugfs_create_devm_seqfile (C function)c.debugfs_create_devm_seqfilehNtauh1hhjpXhhhNhNubh)}(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](j+)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hdebugfs_create_devm_seqfileh]j5)}(hdebugfs_create_devm_seqfileh]hdebugfs_create_devm_seqfile}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jLjMuh1j.hjhhhjhMubj)}(hm(struct device *dev, const char *name, struct dentry *parent, int (*read_fn)(struct seq_file *s, void *data))h](j)}(hstruct device *devh](j )}(hjzh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubh)}(hhh]j5)}(hdeviceh]hdevice}(hj[hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j)}jj#sbc.debugfs_create_devm_seqfileasbuh1hhj9ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9ubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhj9ubj5)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj9ubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(hconst char *nameh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj+)}(hcharh]hchar}(hjʴhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(h h]h }(hjشhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(hstruct dentry *parenth](j )}(hjzh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(hdentryh]hdentry}(hj*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]jwc.debugfs_create_devm_seqfileasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubjX)}(hj[h]h*}(hjVhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjubj5)}(hparenth]hparent}(hjchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubj)}(h.int (*read_fn)(struct seq_file *s, void *data)h](j+)}(hinth]hint}(hj|hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxubjX)}(hjh]h(}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubjX)}(hj[h]h*}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubj5)}(hread_fnh]hread_fn}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjxubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubjX)}(hjh]h(}(hj͵hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubj )}(hjzh]hstruct}(hjڵhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxubh)}(hhh]j5)}(hseq_fileh]hseq_file}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jwc.debugfs_create_devm_seqfileasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxubjX)}(hj[h]h*}(hj$hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubj5)}(hjh]hs}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjxubjX)}(hjh]h,}(hj>hhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxubj+)}(hvoidh]hvoid}(hjYhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjxubj)}(h h]h }(hjghhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjxubjX)}(hj[h]h*}(hjuhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubj5)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjxubjX)}(hj!h]h)}(hjhhhNhNubah}(h]h ]jdah"]h$]h&]uh1jWhjxubeh}(h]h ]h"]h$]h&]noemphjLjMuh1jhj5ubeh}(h]h ]h"]h$]h&]jLjMuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jLjMjTuh1jjUjVhjhhhjhMubah}(h]jah ](jZj[eh"]h$]h&]j_j`)jahuh1hhjhMhjhhubjc)}(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:146: ./fs/debugfs/file.chMhjhhubah}(h]h ]h"]h$]h&]uh1jbhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjѶjjѶjjjuh1hhhhjpXhNhNubj)}(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)}(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:146: ./fs/debugfs/file.chMhjնubj)}(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:146: ./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)}(hj3h]hconst char *name}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhj-ubj)}(hhh]h)}(hname of the debugfs file.h]hname of the debugfs file.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubj)}(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)}(hjlh]hstruct dentry *parent}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjfubj)}(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:146: ./fs/debugfs/file.chMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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:146: ./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.}(hjѷhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/filesystems/api-summary:146: ./fs/debugfs/file.chMhjηubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjͷhMhjubeh}(h]h ]h"]h$]h&]uh1jhjնubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjpXhhhNhNubeh}(h]debugfs-interfaceah ]h"]debugfs interfaceah$]h&]uh1hhj_XhhhhhKubeh}(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_handlerj4error_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}(jj jj jRjRjjjQjNj!j!j9Pj6Pjjjn jk jZjWjf jc j9j6j@$j=$j\XjYXjjjju nametypes}(jjjRjjQj!j9Pjjn jZjf j9j@$j\Xjjuh}(j hj hjRhhjjkjpjjjA jF jjjj"jpjujjjjjIjNji!jn!j#j#j&j &jy(j~(jM+jR+j-j-j9/j>/j0j0jo2jt2j 4j4j5j5j 7j7j8j8jV:j[:j <j%<j=j=jH@jM@jAjAjCjCjEjEjGj GjHjHj JjJjKjKjeMjjMjNjNjgPjlPjjRjRjSjTjTjxVj}VjCXjHXjYjYj`[je[j\j\j<^jA^j`j`jcjcj&ej+ej6gj;gjbjjgjjmjmjYpj^pjrjrj?tjDtjujujwjxjzjzj|j|j~j~jjjIjNjj jÅjȅjjjqjvjWj\jjÍjNjjjjkjpjjjmjrjxj}jjjTjYjSjXjjj>jCjjjdjijjjjj8j=j۱jj*j/jjjjjj jljqjjjojtjjjjjOjTjjjjjjj>jCjjjjjsjxjBjGjjjpjujjjKjPjjjjjjjj jnjsjjj!jTjqjvjjjejjjjjWj\jj j j jjjjjSjXjjjjjjjbjgj6Pj!j "j"j|$j$j%j%j(j(jc+jh+j-j-j0j0j3j4j%6j*6jO8jT8j;j;j>j>j?j?jAjAj%Dj*DjFjFjIjIj;Kj@KjNjNjjSjCSjUjUj,Yj1Yj\j \j]j]jS_jX_jcjcjgjgjjjjjymj~mjqjqjtjtj5xj:xj{j{jj!jOjTjijnjmjrjjjqjvjj$jjjjjjjjjĤjɤjejjjjjCjHjjjjjLjQjjjj!jjjjj~jjjjfjkjCjHjjj\jajljqjjjjjjjjjjjjj@jEjjjjjjjjjjj*j/jvj{jIjNjjjdjijjjjjjj j j j jjjhjmjjjjj#j(j!j&j7j<jjjd#ji#j'j'j+j +j-j-j/j/j3j#3j5j5j8j8j<j<jp?ju?jLBjQBjMEjREj8Ij=IjKjKjwOj|OjhRjmRjoVjtVjvZj{Zjk^jp^jajajgjgjfljkljWoj\oj"rj'rjsjtj(wj-wjJzjOzj}j}jjjjj)j.jCjHjjjjjjjjjjjjjjjϟjԟjjjFjKjpjujj jdjijjjjjjjjjjjjj!j&jjj!j&jjj#j(jjjojtjjjsjxjjj jjk jjWj#j@jEjjjjjjjYj^j&j+jjjjjjjZj_jjjjjjjc j]jzjj6jq j j j j j j j8j=jjjjj=$j<jYj^j)j.j3j8jjj4j9j!j!jYXjC$j`$je$j'j'j)j)jj,jo,j.j/j0j0jj3jo3j5j5jc8jh8j:j:j<j<j@j@jCjCjhEjmEjSHjXHj[Mj`MjOjOjRjRjTjTjj_XjjpXjXjXj[j[jE_jJ_jcjcjKfjPfjijijljljSnjXnjjpjopjsjsjtjtjujuj'wj,wjpyjuyj{j{j~j~jWj\jjjjjzjjjjjjjj˜jǘjԛjٛjjj0j5jjjZj_jҬj׬jjjju 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.