sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget1/translations/zh_CN/filesystems/caching/netfs-apimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/zh_TW/filesystems/caching/netfs-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/it_IT/filesystems/caching/netfs-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ja_JP/filesystems/caching/netfs-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ko_KR/filesystems/caching/netfs-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/sp_SP/filesystems/caching/netfs-apimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhK/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api.rsthKubhsection)}(hhh](htitle)}(hNetwork Filesystem Caching APIh]hNetwork Filesystem Caching API}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hFscache provides an API by which a network filesystem can make use of local caching facilities. The API is arranged around a number of principles:h]hFscache provides an API by which a network filesystem can make use of local caching facilities. The API is arranged around a number of principles:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh block_quote)}(hX(1) A cache is logically organised into volumes and data storage objects within those volumes. (2) Volumes and data storage objects are represented by various types of cookie. (3) Cookies have keys that distinguish them from their peers. (4) Cookies have coherency data that allows a cache to determine if the cached data is still valid. (5) I/O is done asynchronously where possible. h]henumerated_list)}(hhh](h list_item)}(h[A cache is logically organised into volumes and data storage objects within those volumes. h]h)}(hZA cache is logically organised into volumes and data storage objects within those volumes.h]hZA cache is logically organised into volumes and data storage objects within those volumes.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hMVolumes and data storage objects are represented by various types of cookie. h]h)}(hLVolumes and data storage objects are represented by various types of cookie.h]hLVolumes and data storage objects are represented by various types of cookie.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(h:Cookies have keys that distinguish them from their peers. h]h)}(h9Cookies have keys that distinguish them from their peers.h]h9Cookies have keys that distinguish them from their peers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(h`Cookies have coherency data that allows a cache to determine if the cached data is still valid. h]h)}(h_Cookies have coherency data that allows a cache to determine if the cached data is still valid.h]h_Cookies have coherency data that allows a cache to determine if the cached data is still valid.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj.ubah}(h]h ]h"]h$]h&]uh1hhhubh)}(h+I/O is done asynchronously where possible. h]h)}(h*I/O is done asynchronously where possible.h]h*I/O is done asynchronously where possible.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]enumtypearabicprefix(suffix)uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hThis API is used by::h]hThis API is used by:}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(h#include .h]h#include .}hjsbah}(h]h ]h"]h$]h&]hhuh1j~hhhKhhhhubh)}(hXpThis document contains the following sections: (1) Overview (2) Volume registration (3) Data file registration (4) Declaring a cookie to be in use (5) Resizing a data file (truncation) (6) Data I/O API (7) Data file coherency (8) Data file invalidation (9) Write back resource management (10) Caching of local modifications (11) Page release and invalidationh]hXpThis document contains the following sections: (1) Overview (2) Volume registration (3) Data file registration (4) Declaring a cookie to be in use (5) Resizing a data file (truncation) (6) Data I/O API (7) Data file coherency (8) Data file invalidation (9) Write back resource management (10) Caching of local modifications (11) Page release and invalidation}hjsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhK)ubh)}(hhh](h)}(hOverviewh]hOverview}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK+ubh)}(hX The fscache hierarchy is organised on two levels from a network filesystem's point of view. The upper level represents "volumes" and the lower level represents "data storage objects". These are represented by two types of cookie, hereafter referred to as "volume cookies" and "cookies".h]hX2The fscache hierarchy is organised on two levels from a network filesystem’s point of view. The upper level represents “volumes” and the lower level represents “data storage objects”. These are represented by two types of cookie, hereafter referred to as “volume cookies” and “cookies”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjhhubh)}(hXA network filesystem acquires a volume cookie for a volume using a volume key, which represents all the information that defines that volume (e.g. cell name or server address, volume ID or share name). This must be rendered as a printable string that can be used as a directory name (ie. no '/' characters and shouldn't begin with a '.'). The maximum name length is one less than the maximum size of a filename component (allowing the cache backend one char for its own purposes).h]hXA network filesystem acquires a volume cookie for a volume using a volume key, which represents all the information that defines that volume (e.g. cell name or server address, volume ID or share name). This must be rendered as a printable string that can be used as a directory name (ie. no ‘/’ characters and shouldn’t begin with a ‘.’). The maximum name length is one less than the maximum size of a filename component (allowing the cache backend one char for its own purposes).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubh)}(hFA filesystem would typically have a volume cookie for each superblock.h]hFA filesystem would typically have a volume cookie for each superblock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjhhubh)}(hXThe filesystem then acquires a cookie for each file within that volume using an object key. Object keys are binary blobs and only need to be unique within their parent volume. The cache backend is responsible for rendering the binary blob into something it can use and may employ hash tables, trees or whatever to improve its ability to find an object. This is transparent to the network filesystem.h]hXThe filesystem then acquires a cookie for each file within that volume using an object key. Object keys are binary blobs and only need to be unique within their parent volume. The cache backend is responsible for rendering the binary blob into something it can use and may employ hash tables, trees or whatever to improve its ability to find an object. This is transparent to the network filesystem.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKsetattr()`` inode operation under the inode lock.h](hThe caller must have first marked the cookie in-use. The cookie and the new size are passed in and the cache is synchronously resized. This is expected to be called from }(hjAhhhNhNubhliteral)}(h``->setattr()``h]h ->setattr()}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjAubh& inode operation under the inode lock.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]resizing-a-data-file-truncationah ]h"]!resizing a data file (truncation)ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Data I/O APIh]h Data I/O API}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhhhhhKubh)}(h\To do data I/O operations directly through a cookie, the following functions are available::h]h[To do data I/O operations directly through a cookie, the following functions are available:}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjkhhubj)}(hXtint fscache_begin_read_operation(struct netfs_cache_resources *cres, struct fscache_cookie *cookie); int fscache_read(struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, enum netfs_read_from_hole read_hole, netfs_io_terminated_t term_func, void *term_func_priv); int fscache_write(struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, netfs_io_terminated_t term_func, void *term_func_priv);h]hXtint fscache_begin_read_operation(struct netfs_cache_resources *cres, struct fscache_cookie *cookie); int fscache_read(struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, enum netfs_read_from_hole read_hole, netfs_io_terminated_t term_func, void *term_func_priv); int fscache_write(struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, netfs_io_terminated_t term_func, void *term_func_priv);}hjsbah}(h]h ]h"]h$]h&]hhuh1j~hhhKhjkhhubh)}(hX+The *begin* function sets up an operation, attaching the resources required to the cache resources block from the cookie. Assuming it doesn't return an error (for instance, it will return -ENOBUFS if given a NULL cookie, but otherwise do nothing), then one of the other two functions can be issued.h](hThe }(hjhhhNhNubj )}(h*begin*h]hbegin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhX" function sets up an operation, attaching the resources required to the cache resources block from the cookie. Assuming it doesn’t return an error (for instance, it will return -ENOBUFS if given a NULL cookie, but otherwise do nothing), then one of the other two functions can be issued.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjkhhubh)}(hThe *read* and *write* functions initiate a direct-IO operation. Both take the previously set up cache resources block, an indication of the start file position, and an I/O iterator that describes buffer and indicates the amount of data.h](hThe }(hjhhhNhNubj )}(h*read*h]hread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and }(hjhhhNhNubj )}(h*write*h]hwrite}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh functions initiate a direct-IO operation. Both take the previously set up cache resources block, an indication of the start file position, and an I/O iterator that describes buffer and indicates the amount of data.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjkhhubh)}(hThe read function also takes a parameter to indicate how it should handle a partially populated region (a hole) in the disk content. This may be to ignore it, skip over an initial hole and place zeros in the buffer or give an error.h]hThe read function also takes a parameter to indicate how it should handle a partially populated region (a hole) in the disk content. This may be to ignore it, skip over an initial hole and place zeros in the buffer or give an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjkhhubh)}(hkThe read and write functions can be given an optional termination function that will be run on completion::h]hjThe read and write functions can be given an optional termination function that will be run on completion:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjkhhubj)}(h~typedef void (*netfs_io_terminated_t)(void *priv, ssize_t transferred_or_error, bool was_async);h]h~typedef void (*netfs_io_terminated_t)(void *priv, ssize_t transferred_or_error, bool was_async);}hjsbah}(h]h ]h"]h$]h&]hhuh1j~hhhMhjkhhubh)}(hX0If a termination function is given, the operation will be run asynchronously and the termination function will be called upon completion. If not given, the operation will be run synchronously. Note that in the asynchronous case, it is possible for the operation to complete before the function returns.h]hX0If a termination function is given, the operation will be run asynchronously and the termination function will be called upon completion. If not given, the operation will be run synchronously. Note that in the asynchronous case, it is possible for the operation to complete before the function returns.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjkhhubh)}(hgBoth the read and write functions end the operation when they complete, detaching any pinned resources.h]hgBoth the read and write functions end the operation when they complete, detaching any pinned resources.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjkhhubh)}(hcThe read operation will fail with ESTALE if invalidation occurred whilst the operation was ongoing.h]hcThe read operation will fail with ESTALE if invalidation occurred whilst the operation was ongoing.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjkhhubeh}(h] data-i-o-apiah ]h"] data i/o apiah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hData File Coherencyh]hData File Coherency}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhhhhhM"ubh)}(hfTo request an update of the coherency data and file size on a cookie, the following should be called::h]heTo request an update of the coherency data and file size on a cookie, the following should be called:}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM$hjFhhubj)}(hvoid fscache_update_cookie(struct fscache_cookie *cookie, const void *aux_data, const loff_t *object_size);h]hvoid fscache_update_cookie(struct fscache_cookie *cookie, const void *aux_data, const loff_t *object_size);}hjesbah}(h]h ]h"]h$]h&]hhuh1j~hhhM'hjFhhubh)}(h>This will update the cookie's coherency data and/or file size.h]h@This will update the cookie’s coherency data and/or file size.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM+hjFhhubeh}(h]data-file-coherencyah ]h"]data file coherencyah$]h&]uh1hhhhhhhhM"ubh)}(hhh](h)}(hData File Invalidationh]hData File Invalidation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM/ubh)}(hX9Sometimes it will be necessary to invalidate an object that contains data. Typically this will be necessary when the server informs the network filesystem of a remote third-party change - at which point the filesystem has to throw away the state and cached data that it had for an file and reload from the server.h]hX9Sometimes it will be necessary to invalidate an object that contains data. Typically this will be necessary when the server informs the network filesystem of a remote third-party change - at which point the filesystem has to throw away the state and cached data that it had for an file and reload from the server.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM1hjhhubh)}(hWTo indicate that a cache object should be invalidated, the following should be called::h]hVTo indicate that a cache object should be invalidated, the following should be called:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM7hjhhubj)}(hvoid fscache_invalidate(struct fscache_cookie *cookie, const void *aux_data, loff_t size, unsigned int flags);h]hvoid fscache_invalidate(struct fscache_cookie *cookie, const void *aux_data, loff_t size, unsigned int flags);}hjsbah}(h]h ]h"]h$]h&]hhuh1j~hhhM:hjhhubh)}(hXThis increases the invalidation counter in the cookie to cause outstanding reads to fail with -ESTALE, sets the coherency data and file size from the information supplied, blocks new I/O on the cookie and dispatches the cache to go and get rid of the old data.h]hXThis increases the invalidation counter in the cookie to cause outstanding reads to fail with -ESTALE, sets the coherency data and file size from the information supplied, blocks new I/O on the cookie and dispatches the cache to go and get rid of the old data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM?hjhhubh)}(hVInvalidation runs asynchronously in a worker thread so that it doesn't block too much.h]hXInvalidation runs asynchronously in a worker thread so that it doesn’t block too much.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMDhjhhubeh}(h]data-file-invalidationah ]h"]data file invalidationah$]h&]uh1hhhhhhhhM/ubh)}(hhh](h)}(hWrite-Back Resource Managementh]hWrite-Back Resource Management}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMIubh)}(hTo write data to the cache from network filesystem writeback, the cache resources required need to be pinned at the point the modification is made (for instance when the page is marked dirty) as it's not possible to open a file in a thread that's exiting.h]hXTo write data to the cache from network filesystem writeback, the cache resources required need to be pinned at the point the modification is made (for instance when the page is marked dirty) as it’s not possible to open a file in a thread that’s exiting.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMKhjhhubh)}(h5The following facilities are provided to manage this:h]h5The following facilities are provided to manage this:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMPhjhhubh)}(hX* An inode flag, ``I_PINNING_FSCACHE_WB``, is provided to indicate that an in-use is held on the cookie for this inode. It can only be changed if the the inode lock is held. * A flag, ``unpinned_fscache_wb`` is placed in the ``writeback_control`` struct that gets set if ``__writeback_single_inode()`` clears ``I_PINNING_FSCACHE_WB`` because all the dirty pages were cleared. h]h bullet_list)}(hhh](h)}(hAn inode flag, ``I_PINNING_FSCACHE_WB``, is provided to indicate that an in-use is held on the cookie for this inode. It can only be changed if the the inode lock is held. h]h)}(hAn inode flag, ``I_PINNING_FSCACHE_WB``, is provided to indicate that an in-use is held on the cookie for this inode. It can only be changed if the the inode lock is held.h](hAn inode flag, }(hj"hhhNhNubjJ)}(h``I_PINNING_FSCACHE_WB``h]hI_PINNING_FSCACHE_WB}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj"ubh, is provided to indicate that an in-use is held on the cookie for this inode. It can only be changed if the the inode lock is held.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMRhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hA flag, ``unpinned_fscache_wb`` is placed in the ``writeback_control`` struct that gets set if ``__writeback_single_inode()`` clears ``I_PINNING_FSCACHE_WB`` because all the dirty pages were cleared. h]h)}(hA flag, ``unpinned_fscache_wb`` is placed in the ``writeback_control`` struct that gets set if ``__writeback_single_inode()`` clears ``I_PINNING_FSCACHE_WB`` because all the dirty pages were cleared.h](hA flag, }(hjLhhhNhNubjJ)}(h``unpinned_fscache_wb``h]hunpinned_fscache_wb}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjLubh is placed in the }(hjLhhhNhNubjJ)}(h``writeback_control``h]hwriteback_control}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjLubh struct that gets set if }(hjLhhhNhNubjJ)}(h``__writeback_single_inode()``h]h__writeback_single_inode()}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjLubh clears }(hjLhhhNhNubjJ)}(h``I_PINNING_FSCACHE_WB``h]hI_PINNING_FSCACHE_WB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjLubh* because all the dirty pages were cleared.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMVhjHubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]bullet*uh1jhhhMRhjubah}(h]h ]h"]h$]h&]uh1hhhhMRhjhhubh)}(h7To support this, the following functions are provided::h]h6To support this, the following functions are provided:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMZhjhhubj)}(hXbool fscache_dirty_folio(struct address_space *mapping, struct folio *folio, struct fscache_cookie *cookie); void fscache_unpin_writeback(struct writeback_control *wbc, struct fscache_cookie *cookie); void fscache_clear_inode_writeback(struct fscache_cookie *cookie, struct inode *inode, const void *aux);h]hXbool fscache_dirty_folio(struct address_space *mapping, struct folio *folio, struct fscache_cookie *cookie); void fscache_unpin_writeback(struct writeback_control *wbc, struct fscache_cookie *cookie); void fscache_clear_inode_writeback(struct fscache_cookie *cookie, struct inode *inode, const void *aux);}hjsbah}(h]h ]h"]h$]h&]hhuh1j~hhhM\hjhhubh)}(hXThe *set* function is intended to be called from the filesystem's ``dirty_folio`` address space operation. If ``I_PINNING_FSCACHE_WB`` is not set, it sets that flag and increments the use count on the cookie (the caller must already have called ``fscache_use_cookie()``).h](hThe }(hjhhhNhNubj )}(h*set*h]hset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh; function is intended to be called from the filesystem’s }(hjhhhNhNubjJ)}(h``dirty_folio``h]h dirty_folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubh address space operation. If }(hjhhhNhNubjJ)}(h``I_PINNING_FSCACHE_WB``h]hI_PINNING_FSCACHE_WB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubho is not set, it sets that flag and increments the use count on the cookie (the caller must already have called }(hjhhhNhNubjJ)}(h``fscache_use_cookie()``h]hfscache_use_cookie()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMehjhhubh)}(hThe *unpin* function is intended to be called from the filesystem's ``write_inode`` superblock operation. It cleans up after writing by unusing the cookie if unpinned_fscache_wb is set in the writeback_control struct.h](hThe }(hj(hhhNhNubj )}(h*unpin*h]hunpin}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(ubh; function is intended to be called from the filesystem’s }(hj(hhhNhNubjJ)}(h``write_inode``h]h write_inode}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj(ubh superblock operation. It cleans up after writing by unusing the cookie if unpinned_fscache_wb is set in the writeback_control struct.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMjhjhhubh)}(hX)The *clear* function is intended to be called from the netfs's ``evict_inode`` superblock operation. It must be called *after* ``truncate_inode_pages_final()``, but *before* ``clear_inode()``. This cleans up any hanging ``I_PINNING_FSCACHE_WB``. It also allows the coherency data to be updated.h](hThe }(hjZhhhNhNubj )}(h*clear*h]hclear}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZubh6 function is intended to be called from the netfs’s }(hjZhhhNhNubjJ)}(h``evict_inode``h]h evict_inode}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjZubh* superblock operation. It must be called }(hjZhhhNhNubj )}(h*after*h]hafter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZubh }(hjZhhhNhNubjJ)}(h ``truncate_inode_pages_final()``h]htruncate_inode_pages_final()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjZubh, but }(hjZhhhNhNubj )}(h*before*h]hbefore}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZubh }(hjZhhhNhNubjJ)}(h``clear_inode()``h]h clear_inode()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjZubh. This cleans up any hanging }(hjZhhhNhNubjJ)}(h``I_PINNING_FSCACHE_WB``h]hI_PINNING_FSCACHE_WB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjZubh3. It also allows the coherency data to be updated.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMnhjhhubeh}(h]write-back-resource-managementah ]h"]write-back resource managementah$]h&]uh1hhhhhhhhMIubh)}(hhh](h)}(hCaching of Local Modificationsh]hCaching of Local Modifications}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMvubh)}(hXoIf a network filesystem has locally modified data that it wants to write to the cache, it needs to mark the pages to indicate that a write is in progress, and if the mark is already present, it needs to wait for it to be removed first (presumably due to an already in-progress operation). This prevents multiple competing DIO writes to the same storage in the cache.h]hXoIf a network filesystem has locally modified data that it wants to write to the cache, it needs to mark the pages to indicate that a write is in progress, and if the mark is already present, it needs to wait for it to be removed first (presumably due to an already in-progress operation). This prevents multiple competing DIO writes to the same storage in the cache.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMxhjhhubh)}(hUFirstly, the netfs should determine if caching is available by doing something like::h]hTFirstly, the netfs should determine if caching is available by doing something like:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM~hjhhubj)}(h.bool caching = fscache_cookie_enabled(cookie);h]h.bool caching = fscache_cookie_enabled(cookie);}hjsbah}(h]h ]h"]h$]h&]hhuh1j~hhhMhjhhubh)}(hIf caching is to be attempted, pages should be waited for and then marked using the following functions provided by the netfs helper library::h]hIf caching is to be attempted, pages should be waited for and then marked using the following functions provided by the netfs helper library:}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hvoid set_page_fscache(struct page *page); void wait_on_page_fscache(struct page *page); int wait_on_page_fscache_killable(struct page *page);h]hvoid set_page_fscache(struct page *page); void wait_on_page_fscache(struct page *page); int wait_on_page_fscache_killable(struct page *page);}hj7sbah}(h]h ]h"]h$]h&]hhuh1j~hhhMhjhhubh)}(hiOnce all the pages in the span are marked, the netfs can ask fscache to schedule a write of that region::h]hhOnce all the pages in the span are marked, the netfs can ask fscache to schedule a write of that region:}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hXSvoid fscache_write_to_cache(struct fscache_cookie *cookie, struct address_space *mapping, loff_t start, size_t len, loff_t i_size, netfs_io_terminated_t term_func, void *term_func_priv, bool caching)h]hXSvoid fscache_write_to_cache(struct fscache_cookie *cookie, struct address_space *mapping, loff_t start, size_t len, loff_t i_size, netfs_io_terminated_t term_func, void *term_func_priv, bool caching)}hjSsbah}(h]h ]h"]h$]h&]hhuh1j~hhhMhjhhubh)}(hZAnd if an error occurs before that point is reached, the marks can be removed by calling::h]hYAnd if an error occurs before that point is reached, the marks can be removed by calling:}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hvoid fscache_clear_page_bits(struct address_space *mapping, loff_t start, size_t len, bool caching)h]hvoid fscache_clear_page_bits(struct address_space *mapping, loff_t start, size_t len, bool caching)}hjosbah}(h]h ]h"]h$]h&]hhuh1j~hhhMhjhhubh)}(hXIn these functions, a pointer to the mapping to which the source pages are attached is passed in and start and len indicate the size of the region that's going to be written (it doesn't have to align to page boundaries necessarily, but it does have to align to DIO boundaries on the backing filesystem). The caching parameter indicates if caching should be skipped, and if false, the functions do nothing.h]hXIn these functions, a pointer to the mapping to which the source pages are attached is passed in and start and len indicate the size of the region that’s going to be written (it doesn’t have to align to page boundaries necessarily, but it does have to align to DIO boundaries on the backing filesystem). The caching parameter indicates if caching should be skipped, and if false, the functions do nothing.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hX$The write function takes some additional parameters: the cookie representing the cache object to be written to, i_size indicates the size of the netfs file and term_func indicates an optional completion function, to which term_func_priv will be passed, along with the error or amount written.h]hX$The write function takes some additional parameters: the cookie representing the cache object to be written to, i_size indicates the size of the netfs file and term_func indicates an optional completion function, to which term_func_priv will be passed, along with the error or amount written.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hNote that the write function will always run asynchronously and will unmark all the pages upon completion before calling term_func.h]hNote that the write function will always run asynchronously and will unmark all the pages upon completion before calling term_func.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]caching-of-local-modificationsah ]h"]caching of local modificationsah$]h&]uh1hhhhhhhhMvubh)}(hhh](h)}(hPage Release and Invalidationh]hPage Release and Invalidation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXFscache keeps track of whether we have any data in the cache yet for a cache object we've just created. It knows it doesn't have to do any reading until it has done a write and then the page it wrote from has been released by the VM, after which it *has* to look in the cache.h](hFscache keeps track of whether we have any data in the cache yet for a cache object we’ve just created. It knows it doesn’t have to do any reading until it has done a write and then the page it wrote from has been released by the VM, after which it }(hjhhhNhNubj )}(h*has*h]hhas}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh to look in the cache.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hTo inform fscache that a page might now be in the cache, the following function should be called from the ``release_folio`` address space op::h](hjTo inform fscache that a page might now be in the cache, the following function should be called from the }(hjhhhNhNubjJ)}(h``release_folio``h]h release_folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubh address space op:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h>void fscache_note_page_release(struct fscache_cookie *cookie);h]h>void fscache_note_page_release(struct fscache_cookie *cookie);}hj sbah}(h]h ]h"]h$]h&]hhuh1j~hhhMhjhhubh)}(h@if the page has been released (ie. release_folio returned true).h]h@if the page has been released (ie. release_folio returned true).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hPage release and page invalidation should also wait for any mark left on the page to say that a DIO write is underway from that page::h]hPage release and page invalidation should also wait for any mark left on the page to say that a DIO write is underway from that page:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hcvoid wait_on_page_fscache(struct page *page); int wait_on_page_fscache_killable(struct page *page);h]hcvoid wait_on_page_fscache(struct page *page); int wait_on_page_fscache_killable(struct page *page);}hj* sbah}(h]h ]h"]h$]h&]hhuh1j~hhhMhjhhubeh}(h]page-release-and-invalidationah ]h"]page release and invalidationah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hAPI Function Referenceh]hAPI Function Reference}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ hhhhhMubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single#fscache_acquire_volume (C function)c.fscache_acquire_volumehNtauh1jQ hj@ hhhNhNubhdesc)}(hhh](hdesc_signature)}(hstruct fscache_volume * fscache_acquire_volume (const char *volume_key, const char *cache_name, const void *coherency_data, size_t coherency_len)h]hdesc_signature_line)}(hstruct fscache_volume *fscache_acquire_volume(const char *volume_key, const char *cache_name, const void *coherency_data, size_t coherency_len)h](hdesc_sig_keyword)}(hstructh]hstruct}(hju hhhNhNubah}(h]h ]kah"]h$]h&]uh1js hjo hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKubhdesc_sig_space)}(h h]h }(hj hhhNhNubah}(h]h ]wah"]h$]h&]uh1j hjo hhhj hKubh)}(hhh]h desc_sig_name)}(hfscache_volumeh]hfscache_volume}(hj hhhNhNubah}(h]h ]nah"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j fscache_acquire_volumesbc.fscache_acquire_volumeasbuh1hhjo hhhj hKubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjo hhhj hKubhdesc_sig_punctuation)}(hjh]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hjo hhhj hKubh desc_name)}(hfscache_acquire_volumeh]j )}(hj h]hfscache_acquire_volume}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j hjo hhhj hKubhdesc_parameterlist)}(hb(const char *volume_key, const char *cache_name, const void *coherency_data, size_t coherency_len)h](hdesc_parameter)}(hconst char *volume_keyh](jt )}(hconsth]hconst}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubhdesc_sig_keyword_type)}(hcharh]hchar}(hj) hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j' hj ubj )}(h h]h }(hj8 hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hjh]h*}(hjF hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(h volume_keyh]h volume_key}(hjS hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hconst char *cache_nameh](jt )}(hj h]hconst}(hjl hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjh ubj )}(h h]h }(hjy hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjh ubj( )}(hcharh]hchar}(hj hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjh ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjh ubj )}(hjh]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjh ubj )}(h cache_nameh]h cache_name}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjh ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hconst void *coherency_datah](jt )}(hj h]hconst}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj( )}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hjh]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hcoherency_datah]hcoherency_data}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hsize_t coherency_lenh](h)}(hhh]j )}(hsize_th]hsize_t}(hj) hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj& ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj+ modnameN classnameNj j )}j ]j c.fscache_acquire_volumeasbuh1hhj" ubj )}(h h]h }(hjG hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj" ubj )}(h coherency_lenh]h coherency_len}(hjU hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj" ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubeh}(h]h ]h"]h$]h&]hhuh1j hjo hhhj hKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jm sphinx_line_type declaratorhji hhhj hKubah}(h]j` ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jg hj hKhjd hhubh desc_content)}(hhh]h)}(h.Register a volume as desiring caching servicesh]h.Register a volume as desiring caching services}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhj hhubah}(h]h ]h"]h$]h&]uh1j hjd hhhj hKubeh}(h]h ](j functioneh"]h$]h&]domainj objtypej desctypej noindex noindexentrynocontentsentryuh1jb hhhj@ hNhNubh container)}(hXL**Parameters** ``const char *volume_key`` An identification string for the volume ``const char *cache_name`` The name of the cache to use (or NULL for the default) ``const void *coherency_data`` Piece of arbitrary coherency data to check (or NULL) ``size_t coherency_len`` The size of the coherency data **Description** Register a volume as desiring caching services if they're available. The caller must provide an identifier for the volume and may also indicate which cache it should be in. If a preexisting volume entry is found in the cache, the coherency data must match otherwise the entry will be invalidated. Returns a cookie pointer on success, -ENOMEM if out of memory or -EBUSY if a cache volume of that name is already acquired. Note that "NULL" is a valid cookie pointer and can be returned if caching is refused.h](h)}(h**Parameters**h]hstrong)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhj ubhdefinition_list)}(hhh](hdefinition_list_item)}(hC``const char *volume_key`` An identification string for the volume h](hterm)}(h``const char *volume_key``h]jJ)}(hj h]hconst char *volume_key}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhj ubh definition)}(hhh]h)}(h'An identification string for the volumeh]h'An identification string for the volume}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj hKhj ubj )}(hR``const char *cache_name`` The name of the cache to use (or NULL for the default) h](j )}(h``const char *cache_name``h]jJ)}(hj h]hconst char *cache_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhj ubj )}(hhh]h)}(h6The name of the cache to use (or NULL for the default)h]h6The name of the cache to use (or NULL for the default)}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj* hKhj+ ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj* hKhj ubj )}(hT``const void *coherency_data`` Piece of arbitrary coherency data to check (or NULL) h](j )}(h``const void *coherency_data``h]jJ)}(hjN h]hconst void *coherency_data}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjL ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjH ubj )}(hhh]h)}(h4Piece of arbitrary coherency data to check (or NULL)h]h4Piece of arbitrary coherency data to check (or NULL)}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc hKhjd ubah}(h]h ]h"]h$]h&]uh1j hjH ubeh}(h]h ]h"]h$]h&]uh1j hjc hKhj ubj )}(h8``size_t coherency_len`` The size of the coherency data h](j )}(h``size_t coherency_len``h]jJ)}(hj h]hsize_t coherency_len}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhj ubj )}(hhh]h)}(hThe size of the coherency datah]hThe size of the coherency data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj hKhj ubeh}(h]h ]h"]h$]h&]uh1j hj ubh)}(h**Description**h]j )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhj ubh)}(hX*Register a volume as desiring caching services if they're available. The caller must provide an identifier for the volume and may also indicate which cache it should be in. If a preexisting volume entry is found in the cache, the coherency data must match otherwise the entry will be invalidated.h]hX,Register a volume as desiring caching services if they’re available. The caller must provide an identifier for the volume and may also indicate which cache it should be in. If a preexisting volume entry is found in the cache, the coherency data must match otherwise the entry will be invalidated.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhj ubh)}(hReturns a cookie pointer on success, -ENOMEM if out of memory or -EBUSY if a cache volume of that name is already acquired. Note that "NULL" is a valid cookie pointer and can be returned if caching is refused.h]hReturns a cookie pointer on success, -ENOMEM if out of memory or -EBUSY if a cache volume of that name is already acquired. Note that “NULL” is a valid cookie pointer and can be returned if caching is refused.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ &fscache_relinquish_volume (C function)c.fscache_relinquish_volumehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hkvoid fscache_relinquish_volume (struct fscache_volume *volume, const void *coherency_data, bool invalidate)h]jn )}(hjvoid fscache_relinquish_volume(struct fscache_volume *volume, const void *coherency_data, bool invalidate)h](j( )}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKubj )}(h h]h }(hj% hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhj$ hKubj )}(hfscache_relinquish_volumeh]j )}(hfscache_relinquish_volumeh]hfscache_relinquish_volume}(hj7 hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3 ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj hhhj$ hKubj )}(hL(struct fscache_volume *volume, const void *coherency_data, bool invalidate)h](j )}(hstruct fscache_volume *volumeh](jt )}(hjw h]hstruct}(hjS hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjO ubj )}(h h]h }(hj` hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjO ubh)}(hhh]j )}(hfscache_volumeh]hfscache_volume}(hjq hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjn ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjs modnameN classnameNj j )}j ]j )}j j9 sbc.fscache_relinquish_volumeasbuh1hhjO ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjO ubj )}(hjh]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjO ubj )}(hvolumeh]hvolume}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjO ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjK ubj )}(hconst void *coherency_datah](jt )}(hj h]hconst}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj( )}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hjh]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hcoherency_datah]hcoherency_data}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjK ubj )}(hbool invalidateh](j( )}(hboolh]hbool}(hj"hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjubj )}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h invalidateh]h invalidate}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjK ubeh}(h]h ]h"]h$]h&]hhuh1j hj hhhj$ hKubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj hhhj$ hKubah}(h]j ah ](j| j} eh"]h$]h&]j j )j huh1jg hj$ hKhj hhubj )}(hhh]h)}(hCease caching a volumeh]hCease caching a volume}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjehhubah}(h]h ]h"]h$]h&]uh1j hj hhhj$ hKubeh}(h]h ](j functioneh"]h$]h&]j j j jj jj j j uh1jb hhhj@ hNhNubj )}(hX**Parameters** ``struct fscache_volume *volume`` The volume cookie ``const void *coherency_data`` Piece of arbitrary coherency data to set (or NULL) ``bool invalidate`` True if the volume should be invalidated **Description** Indicate that a filesystem no longer desires caching services for a volume. The caller must have relinquished all file cookies prior to calling this. The stored coherency data is updated.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh](j )}(h4``struct fscache_volume *volume`` The volume cookie h](j )}(h!``struct fscache_volume *volume``h]jJ)}(hjh]hstruct fscache_volume *volume}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(hThe volume cookieh]hThe volume cookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(hR``const void *coherency_data`` Piece of arbitrary coherency data to set (or NULL) h](j )}(h``const void *coherency_data``h]jJ)}(hjh]hconst void *coherency_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(h2Piece of arbitrary coherency data to set (or NULL)h]h2Piece of arbitrary coherency data to set (or NULL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h=``bool invalidate`` True if the volume should be invalidated h](j )}(h``bool invalidate``h]jJ)}(hjh]hbool invalidate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(h(True if the volume should be invalidatedh]h(True if the volume should be invalidated}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj0hKhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j )}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjTubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubh)}(hIndicate that a filesystem no longer desires caching services for a volume. The caller must have relinquished all file cookies prior to calling this. The stored coherency data is updated.h]hIndicate that a filesystem no longer desires caching services for a volume. The caller must have relinquished all file cookies prior to calling this. The stored coherency data is updated.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ #fscache_acquire_cookie (C function)c.fscache_acquire_cookiehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hstruct fscache_cookie * fscache_acquire_cookie (struct fscache_volume *volume, u8 advice, const void *index_key, size_t index_key_len, const void *aux_data, size_t aux_data_len, loff_t object_size)h]jn )}(hstruct fscache_cookie *fscache_acquire_cookie(struct fscache_volume *volume, u8 advice, const void *index_key, size_t index_key_len, const void *aux_data, size_t aux_data_len, loff_t object_size)h](jt )}(hjw h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjhhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]j )}j fscache_acquire_cookiesbc.fscache_acquire_cookieasbuh1hhjhhhjhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj )}(hfscache_acquire_cookieh]j )}(hjh]hfscache_acquire_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhjhKubj )}(h(struct fscache_volume *volume, u8 advice, const void *index_key, size_t index_key_len, const void *aux_data, size_t aux_data_len, loff_t object_size)h](j )}(hstruct fscache_volume *volumeh](jt )}(hjw h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj )}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hfscache_volumeh]hfscache_volume}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj5modnameN classnameNj j )}j ]jc.fscache_acquire_cookieasbuh1hhjubj )}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjh]h*}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hvolumeh]hvolume}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(h u8 adviceh](h)}(hhh]j )}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]jc.fscache_acquire_cookieasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hadviceh]hadvice}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hconst void *index_keyh](jt )}(hj h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj( )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h index_keyh]h index_key}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hsize_t index_key_lenh](h)}(hhh]j )}(hsize_th]hsize_t}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj/modnameN classnameNj j )}j ]jc.fscache_acquire_cookieasbuh1hhj&ubj )}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubj )}(h index_key_lenh]h index_key_len}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hconst void *aux_datah](jt )}(hj h]hconst}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjnubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnubj( )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjnubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnubj )}(haux_datah]haux_data}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hsize_t aux_data_lenh](h)}(hhh]j )}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]jc.fscache_acquire_cookieasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h aux_data_lenh]h aux_data_len}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hloff_t object_sizeh](h)}(hhh]j )}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]jc.fscache_acquire_cookieasbuh1hhjubj )}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h object_sizeh]h object_size}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hjhhhjhKubah}(h]jah ](j| j} eh"]h$]h&]j j )j huh1jg hjhKhjhhubj )}(hhh]h)}(h,Acquire a cookie to represent a cache objecth]h,Acquire a cookie to represent a cache object}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjmhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j functioneh"]h$]h&]j j j jj jj j j uh1jb hhhj@ hNhNubj )}(hXp**Parameters** ``struct fscache_volume *volume`` The volume in which to locate/create this cookie ``u8 advice`` Advice flags (FSCACHE_COOKIE_ADV_*) ``const void *index_key`` The index key for this cookie ``size_t index_key_len`` Size of the index key ``const void *aux_data`` The auxiliary data for the cookie (may be NULL) ``size_t aux_data_len`` Size of the auxiliary data buffer ``loff_t object_size`` The initial size of object **Description** Acquire a cookie to represent a data file within the given cache volume. See Documentation/filesystems/caching/netfs-api.rst for a complete description.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh](j )}(hS``struct fscache_volume *volume`` The volume in which to locate/create this cookie h](j )}(h!``struct fscache_volume *volume``h]jJ)}(hjh]hstruct fscache_volume *volume}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(h0The volume in which to locate/create this cookieh]h0The volume in which to locate/create this cookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h2``u8 advice`` Advice flags (FSCACHE_COOKIE_ADV_*) h](j )}(h ``u8 advice``h]jJ)}(hjh]h u8 advice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(h#Advice flags (FSCACHE_COOKIE_ADV_*)h]h#Advice flags (FSCACHE_COOKIE_ADV_*)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h8``const void *index_key`` The index key for this cookie h](j )}(h``const void *index_key``h]jJ)}(hj#h]hconst void *index_key}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj!ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(hThe index key for this cookieh]hThe index key for this cookie}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj8hKhjubj )}(h/``size_t index_key_len`` Size of the index key h](j )}(h``size_t index_key_len``h]jJ)}(hj\h]hsize_t index_key_len}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjZubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjVubj )}(hhh]h)}(hSize of the index keyh]hSize of the index key}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjrubah}(h]h ]h"]h$]h&]uh1j hjVubeh}(h]h ]h"]h$]h&]uh1j hjqhKhjubj )}(hI``const void *aux_data`` The auxiliary data for the cookie (may be NULL) h](j )}(h``const void *aux_data``h]jJ)}(hjh]hconst void *aux_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(h/The auxiliary data for the cookie (may be NULL)h]h/The auxiliary data for the cookie (may be NULL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h:``size_t aux_data_len`` Size of the auxiliary data buffer h](j )}(h``size_t aux_data_len``h]jJ)}(hjh]hsize_t aux_data_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(h!Size of the auxiliary data bufferh]h!Size of the auxiliary data buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h2``loff_t object_size`` The initial size of object h](j )}(h``loff_t object_size``h]jJ)}(hjh]hloff_t object_size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubj )}(hhh]h)}(hThe initial size of objecth]hThe initial size of object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j )}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj@ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubh)}(hHAcquire a cookie to represent a data file within the given cache volume.h]hHAcquire a cookie to represent a data file within the given cache volume.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubh)}(hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.h]hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ fscache_use_cookie (C function)c.fscache_use_cookiehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hIvoid fscache_use_cookie (struct fscache_cookie *cookie, bool will_modify)h]jn )}(hHvoid fscache_use_cookie(struct fscache_cookie *cookie, bool will_modify)h](j( )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjhhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj )}(hfscache_use_cookieh]j )}(hfscache_use_cookieh]hfscache_use_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhjhMubj )}(h1(struct fscache_cookie *cookie, bool will_modify)h](j )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.fscache_use_cookieasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hcookieh]hcookie}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hbool will_modifyh](j( )}(hj$h]hbool}(hjEhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjAubj )}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj )}(h will_modifyh]h will_modify}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hjhhhjhMubah}(h]jah ](j| j} eh"]h$]h&]j j )j huh1jg hjhMhjhhubj )}(hhh]h)}(h-Request usage of cookie attached to an objecth]h-Request usage of cookie attached to an object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j functioneh"]h$]h&]j j j jj jj j j uh1jb hhhj@ hNhNubj )}(hX**Parameters** ``struct fscache_cookie *cookie`` The cookie representing the cache object ``bool will_modify`` If cache is expected to be modified locally **Description** Request usage of the cookie attached to an object. The caller should tell the cache if the object's contents are about to be modified locally and then the cache can apply the policy that has been set to handle this case.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hjubj )}(hhh](j )}(hK``struct fscache_cookie *cookie`` The cookie representing the cache object h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hjh]hstruct fscache_cookie *cookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjubj )}(hhh]h)}(h(The cookie representing the cache objecth]h(The cookie representing the cache object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjubj )}(hA``bool will_modify`` If cache is expected to be modified locally h](j )}(h``bool will_modify``h]jJ)}(hjh]hbool will_modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hjubj )}(hhh]h)}(h+If cache is expected to be modified locallyh]h+If cache is expected to be modified locally}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhM hjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j )}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hjubh)}(hRequest usage of the cookie attached to an object. The caller should tell the cache if the object's contents are about to be modified locally and then the cache can apply the policy that has been set to handle this case.h]hRequest usage of the cookie attached to an object. The caller should tell the cache if the object’s contents are about to be modified locally and then the cache can apply the policy that has been set to handle this case.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ !fscache_unuse_cookie (C function)c.fscache_unuse_cookiehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hjvoid fscache_unuse_cookie (struct fscache_cookie *cookie, const void *aux_data, const loff_t *object_size)h]jn )}(hivoid fscache_unuse_cookie(struct fscache_cookie *cookie, const void *aux_data, const loff_t *object_size)h](j( )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjhhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj )}(hfscache_unuse_cookieh]j )}(hfscache_unuse_cookieh]hfscache_unuse_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhjhMubj )}(hP(struct fscache_cookie *cookie, const void *aux_data, const loff_t *object_size)h](j )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.fscache_unuse_cookieasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjh]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hcookieh]hcookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hconst void *aux_datah](jt )}(hj h]hconst}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj/ubj )}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj( )}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj/ubj )}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj )}(hjh]h*}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj )}(haux_datah]haux_data}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hconst loff_t *object_sizeh](jt )}(hj h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]jc.fscache_unuse_cookieasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h object_sizeh]h object_size}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj|hhhjhMubah}(h]jwah ](j| j} eh"]h$]h&]j j )j huh1jg hjhMhjyhhubj )}(hhh]h)}(h+Cease usage of cookie attached to an objecth]h+Cease usage of cookie attached to an object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjyhhhjhMubeh}(h]h ](j functioneh"]h$]h&]j j j j)j j)j j j uh1jb hhhj@ hNhNubj )}(hX**Parameters** ``struct fscache_cookie *cookie`` The cookie representing the cache object ``const void *aux_data`` Updated auxiliary data (or NULL) ``const loff_t *object_size`` Revised size of the object (or NULL) **Description** Cease usage of the cookie attached to an object. When the users count reaches zero then the cookie relinquishment will be permitted to proceed.h](h)}(h**Parameters**h]j )}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj-ubj )}(hhh](j )}(hK``struct fscache_cookie *cookie`` The cookie representing the cache object h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hjRh]hstruct fscache_cookie *cookie}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjPubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjLubj )}(hhh]h)}(h(The cookie representing the cache objecth]h(The cookie representing the cache object}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1j hjLubeh}(h]h ]h"]h$]h&]uh1j hjghMhjIubj )}(h:``const void *aux_data`` Updated auxiliary data (or NULL) h](j )}(h``const void *aux_data``h]jJ)}(hjh]hconst void *aux_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjubj )}(hhh]h)}(h Updated auxiliary data (or NULL)h]h Updated auxiliary data (or NULL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjIubj )}(hC``const loff_t *object_size`` Revised size of the object (or NULL) h](j )}(h``const loff_t *object_size``h]jJ)}(hjh]hconst loff_t *object_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjubj )}(hhh]h)}(h$Revised size of the object (or NULL)h]h$Revised size of the object (or NULL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjIubeh}(h]h ]h"]h$]h&]uh1j hj-ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj-ubh)}(hCease usage of the cookie attached to an object. When the users count reaches zero then the cookie relinquishment will be permitted to proceed.h]hCease usage of the cookie attached to an object. When the users count reaches zero then the cookie relinquishment will be permitted to proceed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ &fscache_relinquish_cookie (C function)c.fscache_relinquish_cookiehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hKvoid fscache_relinquish_cookie (struct fscache_cookie *cookie, bool retire)h]jn )}(hJvoid fscache_relinquish_cookie(struct fscache_cookie *cookie, bool retire)h](j( )}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj@hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM3ubj )}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@hhhjRhM3ubj )}(hfscache_relinquish_cookieh]j )}(hfscache_relinquish_cookieh]hfscache_relinquish_cookie}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjaubah}(h]h ](j j eh"]h$]h&]hhuh1j hj@hhhjRhM3ubj )}(h,(struct fscache_cookie *cookie, bool retire)h](j )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj}ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]j )}j jgsbc.fscache_relinquish_cookieasbuh1hhj}ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubj )}(hcookieh]hcookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjyubj )}(h bool retireh](j( )}(hj$h]hbool}(hjhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hretireh]hretire}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjyubeh}(h]h ]h"]h$]h&]hhuh1j hj@hhhjRhM3ubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj<hhhjRhM3ubah}(h]j7ah ](j| j} eh"]h$]h&]j j )j huh1jg hjRhM3hj9hhubj )}(hhh]h)}(h3Return the cookie to the cache, maybe discarding ith]h3Return the cookie to the cache, maybe discarding it}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM(hj5hhubah}(h]h ]h"]h$]h&]uh1j hj9hhhjRhM3ubeh}(h]h ](j functioneh"]h$]h&]j j j jPj jPj j j uh1jb hhhj@ hNhNubj )}(hX|**Parameters** ``struct fscache_cookie *cookie`` The cookie being returned ``bool retire`` True if the cache object the cookie represents is to be discarded **Description** This function returns a cookie to the cache, forcibly discarding the associated cache object if retire is set to true. See Documentation/filesystems/caching/netfs-api.rst for a complete description.h](h)}(h**Parameters**h]j )}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjXubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM,hjTubj )}(hhh](j )}(h<``struct fscache_cookie *cookie`` The cookie being returned h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hjyh]hstruct fscache_cookie *cookie}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjwubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM*hjsubj )}(hhh]h)}(hThe cookie being returnedh]hThe cookie being returned}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1j hjsubeh}(h]h ]h"]h$]h&]uh1j hjhM*hjpubj )}(hR``bool retire`` True if the cache object the cookie represents is to be discarded h](j )}(h``bool retire``h]jJ)}(hjh]h bool retire}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM+hjubj )}(hhh]h)}(hATrue if the cache object the cookie represents is to be discardedh]hATrue if the cache object the cookie represents is to be discarded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhM+hjpubeh}(h]h ]h"]h$]h&]uh1j hjTubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM-hjTubh)}(hvThis function returns a cookie to the cache, forcibly discarding the associated cache object if retire is set to true.h]hvThis function returns a cookie to the cache, forcibly discarding the associated cache object if retire is set to true.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM-hjTubh)}(hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.h]hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM0hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ "fscache_update_cookie (C function)c.fscache_update_cookiehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hkvoid fscache_update_cookie (struct fscache_cookie *cookie, const void *aux_data, const loff_t *object_size)h]jn )}(hjvoid fscache_update_cookie(struct fscache_cookie *cookie, const void *aux_data, const loff_t *object_size)h](j( )}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj=hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMrubj )}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=hhhjOhMrubj )}(hfscache_update_cookieh]j )}(hfscache_update_cookieh]hfscache_update_cookie}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj^ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj=hhhjOhMrubj )}(hP(struct fscache_cookie *cookie, const void *aux_data, const loff_t *object_size)h](j )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjzubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]j )}j jdsbc.fscache_update_cookieasbuh1hhjzubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzubj )}(hcookieh]hcookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjvubj )}(hconst void *aux_datah](jt )}(hj h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj( )}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjh]h*}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(haux_datah]haux_data}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjvubj )}(hconst loff_t *object_sizeh](jt )}(hj h]hconst}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjIubj )}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubh)}(hhh]j )}(hloff_th]hloff_t}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmmodnameN classnameNj j )}j ]jc.fscache_update_cookieasbuh1hhjIubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubj )}(h object_sizeh]h object_size}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjvubeh}(h]h ]h"]h$]h&]hhuh1j hj=hhhjOhMrubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj9hhhjOhMrubah}(h]j4ah ](j| j} eh"]h$]h&]j j )j huh1jg hjOhMrhj6hhubj )}(hhh]h)}(h&Request that a cache object be updatedh]h&Request that a cache object be updated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMehjhhubah}(h]h ]h"]h$]h&]uh1j hj6hhhjOhMrubeh}(h]h ](j functioneh"]h$]h&]j j j jj jj j j uh1jb hhhj@ hNhNubj )}(hXd**Parameters** ``struct fscache_cookie *cookie`` The cookie representing the cache object ``const void *aux_data`` The updated auxiliary data for the cookie (may be NULL) ``const loff_t *object_size`` The current size of the object (may be NULL) **Description** Request an update of the index data for the cache object associated with the cookie. The auxiliary data on the cookie will be updated first if **aux_data** is set and the object size will be updated and the object possibly trimmed if **object_size** is set. See Documentation/filesystems/caching/netfs-api.rst for a complete description.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMihjubj )}(hhh](j )}(hK``struct fscache_cookie *cookie`` The cookie representing the cache object h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hjh]hstruct fscache_cookie *cookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMfhj ubj )}(hhh]h)}(h(The cookie representing the cache objecth]h(The cookie representing the cache object}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMfhj%ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj$hMfhjubj )}(hQ``const void *aux_data`` The updated auxiliary data for the cookie (may be NULL) h](j )}(h``const void *aux_data``h]jJ)}(hjHh]hconst void *aux_data}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjFubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMghjBubj )}(hhh]h)}(h7The updated auxiliary data for the cookie (may be NULL)h]h7The updated auxiliary data for the cookie (may be NULL)}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMghj^ubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1j hj]hMghjubj )}(hK``const loff_t *object_size`` The current size of the object (may be NULL) h](j )}(h``const loff_t *object_size``h]jJ)}(hjh]hconst loff_t *object_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhhj{ubj )}(hhh]h)}(h,The current size of the object (may be NULL)h]h,The current size of the object (may be NULL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1j hjhMhhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMjhjubh)}(hXRequest an update of the index data for the cache object associated with the cookie. The auxiliary data on the cookie will be updated first if **aux_data** is set and the object size will be updated and the object possibly trimmed if **object_size** is set.h](hRequest an update of the index data for the cache object associated with the cookie. The auxiliary data on the cookie will be updated first if }(hjhhhNhNubj )}(h **aux_data**h]haux_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhO is set and the object size will be updated and the object possibly trimmed if }(hjhhhNhNubj )}(h**object_size**h]h object_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh is set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMjhjubh)}(hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.h]hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ "fscache_resize_cookie (C function)c.fscache_resize_cookiehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hKvoid fscache_resize_cookie (struct fscache_cookie *cookie, loff_t new_size)h]jn )}(hJvoid fscache_resize_cookie(struct fscache_cookie *cookie, loff_t new_size)h](j( )}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj0hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0hhhjBhMubj )}(hfscache_resize_cookieh]j )}(hfscache_resize_cookieh]hfscache_resize_cookie}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQubah}(h]h ](j j eh"]h$]h&]hhuh1j hj0hhhjBhMubj )}(h0(struct fscache_cookie *cookie, loff_t new_size)h](j )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjmubj )}(h h]h }(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjmubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]j )}j jWsbc.fscache_resize_cookieasbuh1hhjmubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjmubj )}(hjh]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjmubj )}(hcookieh]hcookie}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjiubj )}(hloff_t new_sizeh](h)}(hhh]j )}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j ]jc.fscache_resize_cookieasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hnew_sizeh]hnew_size}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjiubeh}(h]h ]h"]h$]h&]hhuh1j hj0hhhjBhMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj,hhhjBhMubah}(h]j'ah ](j| j} eh"]h$]h&]j j )j huh1jg hjBhMhj)hhubj )}(hhh]h)}(h&Request that a cache object be resizedh]h&Request that a cache object be resized}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM{hj9hhubah}(h]h ]h"]h$]h&]uh1j hj)hhhjBhMubeh}(h]h ](j functioneh"]h$]h&]j j j jTj jTj j j uh1jb hhhj@ hNhNubj )}(hX.**Parameters** ``struct fscache_cookie *cookie`` The cookie representing the cache object ``loff_t new_size`` The new size of the object (may be NULL) **Description** Request that the size of an object be changed. See Documentation/filesystems/caching/netfs-api.rst for a complete description.h](h)}(h**Parameters**h]j )}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjXubj )}(hhh](j )}(hK``struct fscache_cookie *cookie`` The cookie representing the cache object h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hj}h]hstruct fscache_cookie *cookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj{ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM|hjwubj )}(hhh]h)}(h(The cookie representing the cache objecth]h(The cookie representing the cache object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1j hjwubeh}(h]h ]h"]h$]h&]uh1j hjhM|hjtubj )}(h=``loff_t new_size`` The new size of the object (may be NULL) h](j )}(h``loff_t new_size``h]jJ)}(hjh]hloff_t new_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM}hjubj )}(hhh]h)}(h(The new size of the object (may be NULL)h]h(The new size of the object (may be NULL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhM}hjtubeh}(h]h ]h"]h$]h&]uh1j hjXubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjXubh)}(h.Request that the size of an object be changed.h]h.Request that the size of an object be changed.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjXubh)}(hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.h]hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ fscache_invalidate (C function)c.fscache_invalidatehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hnvoid fscache_invalidate (struct fscache_cookie *cookie, const void *aux_data, loff_t size, unsigned int flags)h]jn )}(hmvoid fscache_invalidate(struct fscache_cookie *cookie, const void *aux_data, loff_t size, unsigned int flags)h](j( )}(hvoidh]hvoid}(hjE hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjA hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hjT hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjA hhhjS hMubj )}(hfscache_invalidateh]j )}(hfscache_invalidateh]hfscache_invalidate}(hjf hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjb ubah}(h]h ](j j eh"]h$]h&]hhuh1j hjA hhhjS hMubj )}(hV(struct fscache_cookie *cookie, const void *aux_data, loff_t size, unsigned int flags)h](j )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj~ ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~ ubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj modnameN classnameNj j )}j ]j )}j jh sbc.fscache_invalidateasbuh1hhj~ ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~ ubj )}(hjh]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~ ubj )}(hcookieh]hcookie}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~ ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjz ubj )}(hconst void *aux_datah](jt )}(hj h]hconst}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj ubj )}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj( )}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj ubj )}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hjh]h*}(hj+!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(haux_datah]haux_data}(hj8!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjz ubj )}(h loff_t sizeh](h)}(hhh]j )}(hloff_th]hloff_t}(hjT!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQ!ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjV!modnameN classnameNj j )}j ]j c.fscache_invalidateasbuh1hhjM!ubj )}(h h]h }(hjr!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjM!ubj )}(hsizeh]hsize}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjM!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjz ubj )}(hunsigned int flagsh](j( )}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj!ubj )}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj( )}(hinth]hint}(hj!hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj!ubj )}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj )}(hflagsh]hflags}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjz ubeh}(h]h ]h"]h$]h&]hhuh1j hjA hhhjS hMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj= hhhjS hMubah}(h]j8 ah ](j| j} eh"]h$]h&]j j )j huh1jg hjS hMhj: hhubj )}(hhh]h)}(h.Notify cache that an object needs invalidationh]h.Notify cache that an object needs invalidation}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj!hhubah}(h]h ]h"]h$]h&]uh1j hj: hhhjS hMubeh}(h]h ](j functioneh"]h$]h&]j j j j"j j"j j j uh1jb hhhj@ hNhNubj )}(hX?**Parameters** ``struct fscache_cookie *cookie`` The cookie representing the cache object ``const void *aux_data`` The updated auxiliary data for the cookie (may be NULL) ``loff_t size`` The revised size of the object. ``unsigned int flags`` Invalidation flags (FSCACHE_INVAL_*) **Description** Notify the cache that an object is needs to be invalidated and that it should abort any retrievals or stores it is doing on the cache. This increments inval_counter on the cookie which can be used by the caller to reconsider I/O requests as they complete. If **flags** has FSCACHE_INVAL_DIO_WRITE set, this indicates that this is due to a direct I/O write and will cause caching to be disabled on this cookie until it is completely unused. See Documentation/filesystems/caching/netfs-api.rst for a complete description.h](h)}(h**Parameters**h]j )}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj"ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj"ubj )}(hhh](j )}(hK``struct fscache_cookie *cookie`` The cookie representing the cache object h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hj<"h]hstruct fscache_cookie *cookie}(hj>"hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj:"ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj6"ubj )}(hhh]h)}(h(The cookie representing the cache objecth]h(The cookie representing the cache object}(hjU"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ"hMhjR"ubah}(h]h ]h"]h$]h&]uh1j hj6"ubeh}(h]h ]h"]h$]h&]uh1j hjQ"hMhj3"ubj )}(hQ``const void *aux_data`` The updated auxiliary data for the cookie (may be NULL) h](j )}(h``const void *aux_data``h]jJ)}(hju"h]hconst void *aux_data}(hjw"hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjs"ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjo"ubj )}(hhh]h)}(h7The updated auxiliary data for the cookie (may be NULL)h]h7The updated auxiliary data for the cookie (may be NULL)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1j hjo"ubeh}(h]h ]h"]h$]h&]uh1j hj"hMhj3"ubj )}(h0``loff_t size`` The revised size of the object. h](j )}(h``loff_t size``h]jJ)}(hj"h]h loff_t size}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj"ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj"ubj )}(hhh]h)}(hThe revised size of the object.h]hThe revised size of the object.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1j hj"hMhj3"ubj )}(h<``unsigned int flags`` Invalidation flags (FSCACHE_INVAL_*) h](j )}(h``unsigned int flags``h]jJ)}(hj"h]hunsigned int flags}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj"ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj"ubj )}(hhh]h)}(h$Invalidation flags (FSCACHE_INVAL_*)h]h$Invalidation flags (FSCACHE_INVAL_*)}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1j hj"hMhj3"ubeh}(h]h ]h"]h$]h&]uh1j hj"ubh)}(h**Description**h]j )}(hj"#h]h Description}(hj$#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj #ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj"ubh)}(hXNotify the cache that an object is needs to be invalidated and that it should abort any retrievals or stores it is doing on the cache. This increments inval_counter on the cookie which can be used by the caller to reconsider I/O requests as they complete.h]hXNotify the cache that an object is needs to be invalidated and that it should abort any retrievals or stores it is doing on the cache. This increments inval_counter on the cookie which can be used by the caller to reconsider I/O requests as they complete.}(hj8#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj"ubh)}(hIf **flags** has FSCACHE_INVAL_DIO_WRITE set, this indicates that this is due to a direct I/O write and will cause caching to be disabled on this cookie until it is completely unused.h](hIf }(hjG#hhhNhNubj )}(h **flags**h]hflags}(hjO#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjG#ubh has FSCACHE_INVAL_DIO_WRITE set, this indicates that this is due to a direct I/O write and will cause caching to be disabled on this cookie until it is completely unused.}(hjG#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj"ubh)}(hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.h]hOSee Documentation/filesystems/caching/netfs-api.rst for a complete description.}(hjh#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ $fscache_operation_valid (C function)c.fscache_operation_validhNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(haconst struct netfs_cache_ops * fscache_operation_valid (const struct netfs_cache_resources *cres)h]jn )}(h_const struct netfs_cache_ops *fscache_operation_valid(const struct netfs_cache_resources *cres)h](jt )}(hj h]hconst}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj#hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#hhhj#hMubjt )}(hjw h]hstruct}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj#hhhj#hMubj )}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#hhhj#hMubh)}(hhh]j )}(hnetfs_cache_opsh]hnetfs_cache_ops}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj#modnameN classnameNj j )}j ]j )}j fscache_operation_validsbc.fscache_operation_validasbuh1hhj#hhhj#hMubj )}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#hhhj#hMubj )}(hjh]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#hhhj#hMubj )}(hfscache_operation_validh]j )}(hj#h]hfscache_operation_valid}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj $ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj#hhhj#hMubj )}(h*(const struct netfs_cache_resources *cres)h]j )}(h(const struct netfs_cache_resources *cresh](jt )}(hj h]hconst}(hj,$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj($ubj )}(h h]h }(hj9$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj($ubjt )}(hjw h]hstruct}(hjG$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj($ubj )}(h h]h }(hjT$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj($ubh)}(hhh]j )}(hnetfs_cache_resourcesh]hnetfs_cache_resources}(hje$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjb$ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjg$modnameN classnameNj j )}j ]j#c.fscache_operation_validasbuh1hhj($ubj )}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj($ubj )}(hjh]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj($ubj )}(hcresh]hcres}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj($ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj$$ubah}(h]h ]h"]h$]h&]hhuh1j hj#hhhj#hMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj#hhhj#hMubah}(h]j#ah ](j| j} eh"]h$]h&]j j )j huh1jg hj#hMhj#hhubj )}(hhh]h)}(h.Return true if operations resources are usableh]h.Return true if operations resources are usable}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1j hj#hhhj#hMubeh}(h]h ](j functioneh"]h$]h&]j j j j$j j$j j j uh1jb hhhj@ hNhNubj )}(h**Parameters** ``const struct netfs_cache_resources *cres`` The resources to check. **Description** Returns a pointer to the operations table if usable or NULL if not.h](h)}(h**Parameters**h]j )}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj$ubj )}(hhh]j )}(hE``const struct netfs_cache_resources *cres`` The resources to check. h](j )}(h,``const struct netfs_cache_resources *cres``h]jJ)}(hj %h]h(const struct netfs_cache_resources *cres}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj%ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj%ubj )}(hhh]h)}(hThe resources to check.h]hThe resources to check.}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1j hj%hMhj%ubah}(h]h ]h"]h$]h&]uh1j hj$ubh)}(h**Description**h]j )}(hjD%h]h Description}(hjF%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjB%ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj$ubh)}(hCReturns a pointer to the operations table if usable or NULL if not.h]hCReturns a pointer to the operations table if usable or NULL if not.}(hjZ%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ )fscache_begin_read_operation (C function)c.fscache_begin_read_operationhNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hdint fscache_begin_read_operation (struct netfs_cache_resources *cres, struct fscache_cookie *cookie)h]jn )}(hcint fscache_begin_read_operation(struct netfs_cache_resources *cres, struct fscache_cookie *cookie)h](j( )}(hinth]hint}(hj%hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj%hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%hhhj%hMubj )}(hfscache_begin_read_operationh]j )}(hfscache_begin_read_operationh]hfscache_begin_read_operation}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj%hhhj%hMubj )}(hC(struct netfs_cache_resources *cres, struct fscache_cookie *cookie)h](j )}(h"struct netfs_cache_resources *cresh](jt )}(hjw h]hstruct}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj%ubj )}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubh)}(hhh]j )}(hnetfs_cache_resourcesh]hnetfs_cache_resources}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj%modnameN classnameNj j )}j ]j )}j j%sbc.fscache_begin_read_operationasbuh1hhj%ubj )}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubj )}(hjh]h*}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubj )}(hcresh]hcres}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj%ubj )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hj8&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj4&ubj )}(h h]h }(hjE&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4&ubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hjV&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjS&ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjX&modnameN classnameNj j )}j ]j&c.fscache_begin_read_operationasbuh1hhj4&ubj )}(h h]h }(hjt&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4&ubj )}(hjh]h*}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4&ubj )}(hcookieh]hcookie}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj%ubeh}(h]h ]h"]h$]h&]hhuh1j hj%hhhj%hMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj%hhhj%hMubah}(h]j|%ah ](j| j} eh"]h$]h&]j j )j huh1jg hj%hMhj~%hhubj )}(hhh]h)}(h(Begin a read operation for the netfs libh]h(Begin a read operation for the netfs lib}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj&hhubah}(h]h ]h"]h$]h&]uh1j hj~%hhhj%hMubeh}(h]h ](j functioneh"]h$]h&]j j j j&j j&j j j uh1jb hhhj@ hNhNubj )}(hX**Parameters** ``struct netfs_cache_resources *cres`` The cache resources for the read being performed ``struct fscache_cookie *cookie`` The cookie representing the cache object **Description** Begin a read operation on behalf of the netfs helper library. **cres** indicates the cache resources to which the operation state should be attached; **cookie** indicates the cache object that will be accessed. **cres->inval_counter** is set from **cookie->inval_counter** for comparison at the end of the operation. This allows invalidation during the operation to be detected by the caller. **Return** * 0 - Success * -ENOBUFS - No caching available * Other error code from the cache, such as -ENOMEM.h](h)}(h**Parameters**h]j )}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj&ubj )}(hhh](j )}(hX``struct netfs_cache_resources *cres`` The cache resources for the read being performed h](j )}(h&``struct netfs_cache_resources *cres``h]jJ)}(hj&h]h"struct netfs_cache_resources *cres}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj&ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj&ubj )}(hhh]h)}(h0The cache resources for the read being performedh]h0The cache resources for the read being performed}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1j hj'hMhj&ubj )}(hK``struct fscache_cookie *cookie`` The cookie representing the cache object h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hj3'h]hstruct fscache_cookie *cookie}(hj5'hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj1'ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj-'ubj )}(hhh]h)}(h(The cookie representing the cache objecth]h(The cookie representing the cache object}(hjL'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH'hMhjI'ubah}(h]h ]h"]h$]h&]uh1j hj-'ubeh}(h]h ]h"]h$]h&]uh1j hjH'hMhj&ubeh}(h]h ]h"]h$]h&]uh1j hj&ubh)}(h**Description**h]j )}(hjn'h]h Description}(hjp'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjl'ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj&ubh)}(hBegin a read operation on behalf of the netfs helper library. **cres** indicates the cache resources to which the operation state should be attached; **cookie** indicates the cache object that will be accessed.h](h?Begin a read operation on behalf of the netfs helper library. }(hj'hhhNhNubj )}(h**cres**h]hcres}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubhP indicates the cache resources to which the operation state should be attached; }(hj'hhhNhNubj )}(h **cookie**h]hcookie}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubh2 indicates the cache object that will be accessed.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj&ubh)}(h**cres->inval_counter** is set from **cookie->inval_counter** for comparison at the end of the operation. This allows invalidation during the operation to be detected by the caller.h](j )}(h**cres->inval_counter**h]hcres->inval_counter}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubh is set from }(hj'hhhNhNubj )}(h**cookie->inval_counter**h]hcookie->inval_counter}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubhy for comparison at the end of the operation. This allows invalidation during the operation to be detected by the caller.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj&ubh)}(h **Return**h]j )}(hj'h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj&ubj)}(hhh](h)}(h0 - Successh]h)}(hj(h]h0 - Success}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj(ubah}(h]h ]h"]h$]h&]uh1hhj'ubh)}(h!-ENOBUFS - No caching availableh]h option_list)}(hhh]hoption_list_item)}(hhh](h option_group)}(hhh]hoption)}(h-ENOBUFSh](h option_string)}(h-Eh]h-E}hj4(sbah}(h]h ]h"]h$]h&]uh1j2(hj.(ubhoption_argument)}(hNOBUFSh]hNOBUFS}(hjD(hhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jB(hj.(ubeh}(h]h ]h"]h$]h&]uh1j,(hj)(ubah}(h]h ]h"]h$]h&]uh1j'(hj$(ubh description)}(h- No caching availableh]j)}(hhh]h)}(hNo caching availableh]h)}(hjj(h]hNo caching available}(hjl(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjh(ubah}(h]h ]h"]h$]h&]uh1hhje(ubah}(h]h ]h"]h$]h&]j-uh1jhjy(hMhja(ubah}(h]h ]h"]h$]h&]uh1j_(hj$(ubeh}(h]h ]h"]h$]h&]uh1j"(hj(ubah}(h]h ]h"]h$]h&]uh1j(hjy(hMhj(ubah}(h]h ]h"]h$]h&]uh1hhj'ubh)}(h1Other error code from the cache, such as -ENOMEM.h]h)}(hj(h]h1Other error code from the cache, such as -ENOMEM.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj(ubah}(h]h ]h"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]jjuh1jhj(hMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ "fscache_end_operation (C function)c.fscache_end_operationhNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(h?void fscache_end_operation (struct netfs_cache_resources *cres)h]jn )}(h>void fscache_end_operation(struct netfs_cache_resources *cres)h](j( )}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj(hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(hhhj(hMubj )}(hfscache_end_operationh]j )}(hfscache_end_operationh]hfscache_end_operation}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj(hhhj(hMubj )}(h$(struct netfs_cache_resources *cres)h]j )}(h"struct netfs_cache_resources *cresh](jt )}(hjw h]hstruct}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj)ubj )}(h h]h }(hj')hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubh)}(hhh]j )}(hnetfs_cache_resourcesh]hnetfs_cache_resources}(hj8)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5)ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj:)modnameN classnameNj j )}j ]j )}j j)sbc.fscache_end_operationasbuh1hhj)ubj )}(h h]h }(hjX)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj )}(hjh]h*}(hjf)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj )}(hcresh]hcres}(hjs)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj)ubah}(h]h ]h"]h$]h&]hhuh1j hj(hhhj(hMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj(hhhj(hMubah}(h]j(ah ](j| j} eh"]h$]h&]j j )j huh1jg hj(hMhj(hhubj )}(hhh]h)}(h(End the read operation for the netfs libh]h(End the read operation for the netfs lib}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj)hhubah}(h]h ]h"]h$]h&]uh1j hj(hhhj(hMubeh}(h]h ](j functioneh"]h$]h&]j j j j)j j)j j j uh1jb hhhj@ hNhNubj )}(h**Parameters** ``struct netfs_cache_resources *cres`` The cache resources for the read operation **Description** Clean up the resources at the end of the read request.h](h)}(h**Parameters**h]j )}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj)ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj)ubj )}(hhh]j )}(hR``struct netfs_cache_resources *cres`` The cache resources for the read operation h](j )}(h&``struct netfs_cache_resources *cres``h]jJ)}(hj)h]h"struct netfs_cache_resources *cres}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj)ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj)ubj )}(hhh]h)}(h*The cache resources for the read operationh]h*The cache resources for the read operation}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1j hj)hMhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubh)}(h**Description**h]j )}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj)ubh)}(h6Clean up the resources at the end of the read request.h]h6Clean up the resources at the end of the read request.}(hj/*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ fscache_read (C function)c.fscache_readhNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hint fscache_read (struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, enum netfs_read_from_hole read_hole, netfs_io_terminated_t term_func, void *term_func_priv)h]jn )}(hint fscache_read(struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, enum netfs_read_from_hole read_hole, netfs_io_terminated_t term_func, void *term_func_priv)h](j( )}(hinth]hint}(hj^*hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjZ*hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hjm*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZ*hhhjl*hMubj )}(h fscache_readh]j )}(h fscache_readh]h fscache_read}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj{*ubah}(h]h ](j j eh"]h$]h&]hhuh1j hjZ*hhhjl*hMubj )}(h(struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, enum netfs_read_from_hole read_hole, netfs_io_terminated_t term_func, void *term_func_priv)h](j )}(h"struct netfs_cache_resources *cresh](jt )}(hjw h]hstruct}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj*ubj )}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubh)}(hhh]j )}(hnetfs_cache_resourcesh]hnetfs_cache_resources}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj*modnameN classnameNj j )}j ]j )}j j*sbc.fscache_readasbuh1hhj*ubj )}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj )}(hjh]h*}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj )}(hcresh]hcres}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubj )}(hloff_t start_posh](h)}(hhh]j )}(hloff_th]hloff_t}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj +ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj+modnameN classnameNj j )}j ]j*c.fscache_readasbuh1hhj +ubj )}(h h]h }(hj.+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj +ubj )}(h start_posh]h start_pos}(hj<+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj +ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubj )}(hstruct iov_iter *iterh](jt )}(hjw h]hstruct}(hjU+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjQ+ubj )}(h h]h }(hjb+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQ+ubh)}(hhh]j )}(hiov_iterh]hiov_iter}(hjs+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjp+ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetju+modnameN classnameNj j )}j ]j*c.fscache_readasbuh1hhjQ+ubj )}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQ+ubj )}(hjh]h*}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQ+ubj )}(hiterh]hiter}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQ+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubj )}(h#enum netfs_read_from_hole read_holeh](jt )}(henumh]henum}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj+ubj )}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubh)}(hhh]j )}(hnetfs_read_from_holeh]hnetfs_read_from_hole}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj+modnameN classnameNj j )}j ]j*c.fscache_readasbuh1hhj+ubj )}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubj )}(h read_holeh]h read_hole}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubj )}(hnetfs_io_terminated_t term_funch](h)}(hhh]j )}(hnetfs_io_terminated_th]hnetfs_io_terminated_t}(hj,,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj),ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj.,modnameN classnameNj j )}j ]j*c.fscache_readasbuh1hhj%,ubj )}(h h]h }(hjJ,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%,ubj )}(h term_funch]h term_func}(hjX,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubj )}(hvoid *term_func_privh](j( )}(hvoidh]hvoid}(hjq,hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjm,ubj )}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjm,ubj )}(hjh]h*}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjm,ubj )}(hterm_func_privh]hterm_func_priv}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjm,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubeh}(h]h ]h"]h$]h&]hhuh1j hjZ*hhhjl*hMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hjV*hhhjl*hMubah}(h]jQ*ah ](j| j} eh"]h$]h&]j j )j huh1jg hjl*hMhjS*hhubj )}(hhh]h)}(hStart a read from the cache.h]hStart a read from the cache.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj,hhubah}(h]h ]h"]h$]h&]uh1j hjS*hhhjl*hMubeh}(h]h ](j functioneh"]h$]h&]j j j j,j j,j j j uh1jb hhhj@ hNhNubj )}(hX**Parameters** ``struct netfs_cache_resources *cres`` The cache resources to use ``loff_t start_pos`` The beginning file offset in the cache file ``struct iov_iter *iter`` The buffer to fill - and also the length ``enum netfs_read_from_hole read_hole`` How to handle a hole in the data. ``netfs_io_terminated_t term_func`` The function to call upon completion ``void *term_func_priv`` The private data for **term_func** **Description** Start a read from the cache. **cres** indicates the cache object to read from and must be obtained by a call to fscache_begin_operation() beforehand. The data is read into the iterator, **iter**, and that also indicates the size of the operation. **start_pos** is the start position in the file, though if **seek_data** is set appropriately, the cache can use SEEK_DATA to find the next piece of data, writing zeros for the hole into the iterator. Upon termination of the operation, **term_func** will be called and supplied with **term_func_priv** plus the amount of data written, if successful, or the error code otherwise. **read_hole** indicates how a partially populated region in the cache should be handled. It can be one of a number of settings: NETFS_READ_HOLE_IGNORE - Just try to read (may return a short read). NETFS_READ_HOLE_CLEAR - Seek for data, clearing the part of the buffer skipped over, then do as for IGNORE. NETFS_READ_HOLE_FAIL - Give ENODATA if we encounter a hole.h](h)}(h**Parameters**h]j )}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj,ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj,ubj )}(hhh](j )}(hB``struct netfs_cache_resources *cres`` The cache resources to use h](j )}(h&``struct netfs_cache_resources *cres``h]jJ)}(hj-h]h"struct netfs_cache_resources *cres}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj-ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj,ubj )}(hhh]h)}(hThe cache resources to useh]hThe cache resources to use}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]uh1j hj-hMhj,ubj )}(hA``loff_t start_pos`` The beginning file offset in the cache file h](j )}(h``loff_t start_pos``h]jJ)}(hj>-h]hloff_t start_pos}(hj@-hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj<-ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj8-ubj )}(hhh]h)}(h+The beginning file offset in the cache fileh]h+The beginning file offset in the cache file}(hjW-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS-hMhjT-ubah}(h]h ]h"]h$]h&]uh1j hj8-ubeh}(h]h ]h"]h$]h&]uh1j hjS-hMhj,ubj )}(hC``struct iov_iter *iter`` The buffer to fill - and also the length h](j )}(h``struct iov_iter *iter``h]jJ)}(hjw-h]hstruct iov_iter *iter}(hjy-hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhju-ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjq-ubj )}(hhh]h)}(h(The buffer to fill - and also the lengthh]h(The buffer to fill - and also the length}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hjq-ubeh}(h]h ]h"]h$]h&]uh1j hj-hMhj,ubj )}(hJ``enum netfs_read_from_hole read_hole`` How to handle a hole in the data. h](j )}(h'``enum netfs_read_from_hole read_hole``h]jJ)}(hj-h]h#enum netfs_read_from_hole read_hole}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj-ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj-ubj )}(hhh]h)}(h!How to handle a hole in the data.h]h!How to handle a hole in the data.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1j hj-hMhj,ubj )}(hI``netfs_io_terminated_t term_func`` The function to call upon completion h](j )}(h#``netfs_io_terminated_t term_func``h]jJ)}(hj-h]hnetfs_io_terminated_t term_func}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj-ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj-ubj )}(hhh]h)}(h$The function to call upon completionh]h$The function to call upon completion}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1j hj-hMhj,ubj )}(h<``void *term_func_priv`` The private data for **term_func** h](j )}(h``void *term_func_priv``h]jJ)}(hj".h]hvoid *term_func_priv}(hj$.hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj .ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj.ubj )}(hhh]h)}(h"The private data for **term_func**h](hThe private data for }(hj;.hhhNhNubj )}(h **term_func**h]h term_func}(hjC.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;.ubeh}(h]h ]h"]h$]h&]uh1hhj7.hMhj8.ubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1j hj7.hMhj,ubeh}(h]h ]h"]h$]h&]uh1j hj,ubh)}(h**Description**h]j )}(hjk.h]h Description}(hjm.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hji.ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj,ubh)}(hStart a read from the cache. **cres** indicates the cache object to read from and must be obtained by a call to fscache_begin_operation() beforehand.h](hStart a read from the cache. }(hj.hhhNhNubj )}(h**cres**h]hcres}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.ubhp indicates the cache object to read from and must be obtained by a call to fscache_begin_operation() beforehand.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj,ubh)}(hX*The data is read into the iterator, **iter**, and that also indicates the size of the operation. **start_pos** is the start position in the file, though if **seek_data** is set appropriately, the cache can use SEEK_DATA to find the next piece of data, writing zeros for the hole into the iterator.h](h$The data is read into the iterator, }(hj.hhhNhNubj )}(h**iter**h]hiter}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.ubh6, and that also indicates the size of the operation. }(hj.hhhNhNubj )}(h **start_pos**h]h start_pos}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.ubh. is the start position in the file, though if }(hj.hhhNhNubj )}(h **seek_data**h]h seek_data}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.ubh is set appropriately, the cache can use SEEK_DATA to find the next piece of data, writing zeros for the hole into the iterator.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj,ubh)}(hUpon termination of the operation, **term_func** will be called and supplied with **term_func_priv** plus the amount of data written, if successful, or the error code otherwise.h](h#Upon termination of the operation, }(hj.hhhNhNubj )}(h **term_func**h]h term_func}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.ubh" will be called and supplied with }(hj.hhhNhNubj )}(h**term_func_priv**h]hterm_func_priv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.ubhM plus the amount of data written, if successful, or the error code otherwise.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj,ubh)}(h**read_hole** indicates how a partially populated region in the cache should be handled. It can be one of a number of settings:h](j )}(h **read_hole**h]h read_hole}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/ubhs indicates how a partially populated region in the cache should be handled. It can be one of a number of settings:}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj,ubh)}(hXNETFS_READ_HOLE_IGNORE - Just try to read (may return a short read). NETFS_READ_HOLE_CLEAR - Seek for data, clearing the part of the buffer skipped over, then do as for IGNORE. NETFS_READ_HOLE_FAIL - Give ENODATA if we encounter a hole.h](h)}(hDNETFS_READ_HOLE_IGNORE - Just try to read (may return a short read).h]hDNETFS_READ_HOLE_IGNORE - Just try to read (may return a short read).}(hj;/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj7/ubj )}(hhh]j )}(hlNETFS_READ_HOLE_CLEAR - Seek for data, clearing the part of the buffer skipped over, then do as for IGNORE. h](j )}(hFNETFS_READ_HOLE_CLEAR - Seek for data, clearing the part of the bufferh]hFNETFS_READ_HOLE_CLEAR - Seek for data, clearing the part of the buffer}(hjQ/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjM/ubj )}(hhh]h)}(h$skipped over, then do as for IGNORE.h]h$skipped over, then do as for IGNORE.}(hjc/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_/hMhj`/ubah}(h]h ]h"]h$]h&]uh1j hjM/ubeh}(h]h ]h"]h$]h&]uh1j hj_/hMhjJ/ubah}(h]h ]h"]h$]h&]uh1j hj7/ubh)}(h;NETFS_READ_HOLE_FAIL - Give ENODATA if we encounter a hole.h]h;NETFS_READ_HOLE_FAIL - Give ENODATA if we encounter a hole.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj7/ubeh}(h]h ]h"]h$]h&]uh1hhjI/hMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ *fscache_begin_write_operation (C function)c.fscache_begin_write_operationhNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(heint fscache_begin_write_operation (struct netfs_cache_resources *cres, struct fscache_cookie *cookie)h]jn )}(hdint fscache_begin_write_operation(struct netfs_cache_resources *cres, struct fscache_cookie *cookie)h](j( )}(hinth]hint}(hj/hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj/hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/hhhj/hMubj )}(hfscache_begin_write_operationh]j )}(hfscache_begin_write_operationh]hfscache_begin_write_operation}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj/hhhj/hMubj )}(hC(struct netfs_cache_resources *cres, struct fscache_cookie *cookie)h](j )}(h"struct netfs_cache_resources *cresh](jt )}(hjw h]hstruct}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj/ubj )}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubh)}(hhh]j )}(hnetfs_cache_resourcesh]hnetfs_cache_resources}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj0modnameN classnameNj j )}j ]j )}j j/sbc.fscache_begin_write_operationasbuh1hhj/ubj )}(h h]h }(hj30hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj )}(hjh]h*}(hjA0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj )}(hcresh]hcres}(hjN0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj/ubj )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hjg0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjc0ubj )}(h h]h }(hjt0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc0ubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj0modnameN classnameNj j )}j ]j/0c.fscache_begin_write_operationasbuh1hhjc0ubj )}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc0ubj )}(hjh]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc0ubj )}(hcookieh]hcookie}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj/ubeh}(h]h ]h"]h$]h&]hhuh1j hj/hhhj/hMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj/hhhj/hMubah}(h]j/ah ](j| j} eh"]h$]h&]j j )j huh1jg hj/hMhj/hhubj )}(hhh]h)}(h)Begin a write operation for the netfs libh]h)Begin a write operation for the netfs lib}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1j hj/hhhj/hMubeh}(h]h ](j functioneh"]h$]h&]j j j j1j j1j j j uh1jb hhhj@ hNhNubj )}(hX**Parameters** ``struct netfs_cache_resources *cres`` The cache resources for the write being performed ``struct fscache_cookie *cookie`` The cookie representing the cache object **Description** Begin a write operation on behalf of the netfs helper library. **cres** indicates the cache resources to which the operation state should be attached; **cookie** indicates the cache object that will be accessed. **cres->inval_counter** is set from **cookie->inval_counter** for comparison at the end of the operation. This allows invalidation during the operation to be detected by the caller. **Return** * 0 - Success * -ENOBUFS - No caching available * Other error code from the cache, such as -ENOMEM.h](h)}(h**Parameters**h]j )}(hj 1h]h Parameters}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hj1ubj )}(hhh](j )}(hY``struct netfs_cache_resources *cres`` The cache resources for the write being performed h](j )}(h&``struct netfs_cache_resources *cres``h]jJ)}(hj)1h]h"struct netfs_cache_resources *cres}(hj+1hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj'1ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hj#1ubj )}(hhh]h)}(h1The cache resources for the write being performedh]h1The cache resources for the write being performed}(hjB1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>1hM hj?1ubah}(h]h ]h"]h$]h&]uh1j hj#1ubeh}(h]h ]h"]h$]h&]uh1j hj>1hM hj 1ubj )}(hK``struct fscache_cookie *cookie`` The cookie representing the cache object h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hjb1h]hstruct fscache_cookie *cookie}(hjd1hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj`1ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hj\1ubj )}(hhh]h)}(h(The cookie representing the cache objecth]h(The cookie representing the cache object}(hj{1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw1hM hjx1ubah}(h]h ]h"]h$]h&]uh1j hj\1ubeh}(h]h ]h"]h$]h&]uh1j hjw1hM hj 1ubeh}(h]h ]h"]h$]h&]uh1j hj1ubh)}(h**Description**h]j )}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hj1ubh)}(hBegin a write operation on behalf of the netfs helper library. **cres** indicates the cache resources to which the operation state should be attached; **cookie** indicates the cache object that will be accessed.h](h@Begin a write operation on behalf of the netfs helper library. }(hj1hhhNhNubj )}(h**cres**h]hcres}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubhP indicates the cache resources to which the operation state should be attached; }(hj1hhhNhNubj )}(h **cookie**h]hcookie}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubh2 indicates the cache object that will be accessed.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM hj1ubh)}(h**cres->inval_counter** is set from **cookie->inval_counter** for comparison at the end of the operation. This allows invalidation during the operation to be detected by the caller.h](j )}(h**cres->inval_counter**h]hcres->inval_counter}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubh is set from }(hj1hhhNhNubj )}(h**cookie->inval_counter**h]hcookie->inval_counter}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubhy for comparison at the end of the operation. This allows invalidation during the operation to be detected by the caller.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj1ubh)}(h **Return**h]j )}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj1ubj)}(hhh](h)}(h0 - Successh]h)}(hj22h]h0 - Success}(hj42hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj02ubah}(h]h ]h"]h$]h&]uh1hhj-2ubh)}(h!-ENOBUFS - No caching availableh]j()}(hhh]j#()}(hhh](j(()}(hhh]j-()}(h-ENOBUFSh](j3()}(h-Eh]h-E}hjY2sbah}(h]h ]h"]h$]h&]uh1j2(hjU2ubjC()}(hNOBUFSh]hNOBUFS}(hjg2hhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jB(hjU2ubeh}(h]h ]h"]h$]h&]uh1j,(hjR2ubah}(h]h ]h"]h$]h&]uh1j'(hjO2ubj`()}(h- No caching availableh]j)}(hhh]h)}(hNo caching availableh]h)}(hj2h]hNo caching available}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj2ubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]jj(uh1jhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1j_(hjO2ubeh}(h]h ]h"]h$]h&]uh1j"(hjL2ubah}(h]h ]h"]h$]h&]uh1j(hj2hMhjH2ubah}(h]h ]h"]h$]h&]uh1hhj-2ubh)}(h1Other error code from the cache, such as -ENOMEM.h]h)}(hj2h]h1Other error code from the cache, such as -ENOMEM.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhj2ubah}(h]h ]h"]h$]h&]uh1hhj-2ubeh}(h]h ]h"]h$]h&]jjuh1jhjA2hMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ fscache_write (C function)c.fscache_writehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hint fscache_write (struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, netfs_io_terminated_t term_func, void *term_func_priv)h]jn )}(hint fscache_write(struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, netfs_io_terminated_t term_func, void *term_func_priv)h](j( )}(hinth]hint}(hj2hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj2hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM5ubj )}(h h]h }(hj 3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2hhhj 3hM5ubj )}(h fscache_writeh]j )}(h fscache_writeh]h fscache_write}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj2hhhj 3hM5ubj )}(h(struct netfs_cache_resources *cres, loff_t start_pos, struct iov_iter *iter, netfs_io_terminated_t term_func, void *term_func_priv)h](j )}(h"struct netfs_cache_resources *cresh](jt )}(hjw h]hstruct}(hj:3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj63ubj )}(h h]h }(hjG3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj63ubh)}(hhh]j )}(hnetfs_cache_resourcesh]hnetfs_cache_resources}(hjX3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjU3ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjZ3modnameN classnameNj j )}j ]j )}j j 3sbc.fscache_writeasbuh1hhj63ubj )}(h h]h }(hjx3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj63ubj )}(hjh]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj63ubj )}(hcresh]hcres}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj63ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj23ubj )}(hloff_t start_posh](h)}(hhh]j )}(hloff_th]hloff_t}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj3modnameN classnameNj j )}j ]jt3c.fscache_writeasbuh1hhj3ubj )}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj )}(h start_posh]h start_pos}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj23ubj )}(hstruct iov_iter *iterh](jt )}(hjw h]hstruct}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj3ubj )}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubh)}(hhh]j )}(hiov_iterh]hiov_iter}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj4modnameN classnameNj j )}j ]jt3c.fscache_writeasbuh1hhj3ubj )}(h h]h }(hj04hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj )}(hjh]h*}(hj>4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj )}(hiterh]hiter}(hjK4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj23ubj )}(hnetfs_io_terminated_t term_funch](h)}(hhh]j )}(hnetfs_io_terminated_th]hnetfs_io_terminated_t}(hjg4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjd4ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetji4modnameN classnameNj j )}j ]jt3c.fscache_writeasbuh1hhj`4ubj )}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`4ubj )}(h term_funch]h term_func}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj23ubj )}(hvoid *term_func_privh](j( )}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj4ubj )}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4ubj )}(hjh]h*}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4ubj )}(hterm_func_privh]hterm_func_priv}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj23ubeh}(h]h ]h"]h$]h&]hhuh1j hj2hhhj 3hM5ubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj2hhhj 3hM5ubah}(h]j2ah ](j| j} eh"]h$]h&]j j )j huh1jg hj 3hM5hj2hhubj )}(hhh]h)}(hStart a write to the cache.h]hStart a write to the cache.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM#hj4hhubah}(h]h ]h"]h$]h&]uh1j hj2hhhj 3hM5ubeh}(h]h ](j functioneh"]h$]h&]j j j j5j j5j j j uh1jb hhhj@ hNhNubj )}(hXg**Parameters** ``struct netfs_cache_resources *cres`` The cache resources to use ``loff_t start_pos`` The beginning file offset in the cache file ``struct iov_iter *iter`` The data to write - and also the length ``netfs_io_terminated_t term_func`` The function to call upon completion ``void *term_func_priv`` The private data for **term_func** **Description** Start a write to the cache. **cres** indicates the cache object to write to and must be obtained by a call to fscache_begin_operation() beforehand. The data to be written is obtained from the iterator, **iter**, and that also indicates the size of the operation. **start_pos** is the start position in the file. Upon termination of the operation, **term_func** will be called and supplied with **term_func_priv** plus the amount of data written, if successful, or the error code otherwise.h](h)}(h**Parameters**h]j )}(hj!5h]h Parameters}(hj#5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM'hj5ubj )}(hhh](j )}(hB``struct netfs_cache_resources *cres`` The cache resources to use h](j )}(h&``struct netfs_cache_resources *cres``h]jJ)}(hj@5h]h"struct netfs_cache_resources *cres}(hjB5hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj>5ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM$hj:5ubj )}(hhh]h)}(hThe cache resources to useh]hThe cache resources to use}(hjY5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU5hM$hjV5ubah}(h]h ]h"]h$]h&]uh1j hj:5ubeh}(h]h ]h"]h$]h&]uh1j hjU5hM$hj75ubj )}(hA``loff_t start_pos`` The beginning file offset in the cache file h](j )}(h``loff_t start_pos``h]jJ)}(hjy5h]hloff_t start_pos}(hj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjw5ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM%hjs5ubj )}(hhh]h)}(h+The beginning file offset in the cache fileh]h+The beginning file offset in the cache file}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM%hj5ubah}(h]h ]h"]h$]h&]uh1j hjs5ubeh}(h]h ]h"]h$]h&]uh1j hj5hM%hj75ubj )}(hB``struct iov_iter *iter`` The data to write - and also the length h](j )}(h``struct iov_iter *iter``h]jJ)}(hj5h]hstruct iov_iter *iter}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj5ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM&hj5ubj )}(hhh]h)}(h'The data to write - and also the lengthh]h'The data to write - and also the length}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM&hj5ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1j hj5hM&hj75ubj )}(hI``netfs_io_terminated_t term_func`` The function to call upon completion h](j )}(h#``netfs_io_terminated_t term_func``h]jJ)}(hj5h]hnetfs_io_terminated_t term_func}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj5ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM'hj5ubj )}(hhh]h)}(h$The function to call upon completionh]h$The function to call upon completion}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM'hj6ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1j hj6hM'hj75ubj )}(h<``void *term_func_priv`` The private data for **term_func** h](j )}(h``void *term_func_priv``h]jJ)}(hj$6h]hvoid *term_func_priv}(hj&6hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj"6ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM(hj6ubj )}(hhh]h)}(h"The private data for **term_func**h](hThe private data for }(hj=6hhhNhNubj )}(h **term_func**h]h term_func}(hjE6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=6ubeh}(h]h ]h"]h$]h&]uh1hhj96hM(hj:6ubah}(h]h ]h"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]uh1j hj96hM(hj75ubeh}(h]h ]h"]h$]h&]uh1j hj5ubh)}(h**Description**h]j )}(hjm6h]h Description}(hjo6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjk6ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM*hj5ubh)}(hStart a write to the cache. **cres** indicates the cache object to write to and must be obtained by a call to fscache_begin_operation() beforehand.h](hStart a write to the cache. }(hj6hhhNhNubj )}(h**cres**h]hcres}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubho indicates the cache object to write to and must be obtained by a call to fscache_begin_operation() beforehand.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM*hj5ubh)}(hThe data to be written is obtained from the iterator, **iter**, and that also indicates the size of the operation. **start_pos** is the start position in the file.h](h6The data to be written is obtained from the iterator, }(hj6hhhNhNubj )}(h**iter**h]hiter}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubh6, and that also indicates the size of the operation. }(hj6hhhNhNubj )}(h **start_pos**h]h start_pos}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubh# is the start position in the file.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM-hj5ubh)}(hUpon termination of the operation, **term_func** will be called and supplied with **term_func_priv** plus the amount of data written, if successful, or the error code otherwise.h](h#Upon termination of the operation, }(hj6hhhNhNubj )}(h **term_func**h]h term_func}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubh" will be called and supplied with }(hj6hhhNhNubj )}(h**term_func_priv**h]hterm_func_priv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubhM plus the amount of data written, if successful, or the error code otherwise.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM1hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ $fscache_clear_page_bits (C function)c.fscache_clear_page_bitshNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hdvoid fscache_clear_page_bits (struct address_space *mapping, loff_t start, size_t len, bool caching)h]jn )}(hcvoid fscache_clear_page_bits(struct address_space *mapping, loff_t start, size_t len, bool caching)h](j( )}(hvoidh]hvoid}(hj*7hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj&7hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMJubj )}(h h]h }(hj97hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&7hhhj87hMJubj )}(hfscache_clear_page_bitsh]j )}(hfscache_clear_page_bitsh]hfscache_clear_page_bits}(hjK7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjG7ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj&7hhhj87hMJubj )}(hG(struct address_space *mapping, loff_t start, size_t len, bool caching)h](j )}(hstruct address_space *mappingh](jt )}(hjw h]hstruct}(hjg7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjc7ubj )}(h h]h }(hjt7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc7ubh)}(hhh]j )}(h address_spaceh]h address_space}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj7modnameN classnameNj j )}j ]j )}j jM7sbc.fscache_clear_page_bitsasbuh1hhjc7ubj )}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc7ubj )}(hjh]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc7ubj )}(hmappingh]hmapping}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj_7ubj )}(h loff_t starth](h)}(hhh]j )}(hloff_th]hloff_t}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj7modnameN classnameNj j )}j ]j7c.fscache_clear_page_bitsasbuh1hhj7ubj )}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubj )}(hstarth]hstart}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj_7ubj )}(h size_t lenh](h)}(hhh]j )}(hsize_th]hsize_t}(hj$8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!8ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj&8modnameN classnameNj j )}j ]j7c.fscache_clear_page_bitsasbuh1hhj8ubj )}(h h]h }(hjB8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8ubj )}(hlenh]hlen}(hjP8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj_7ubj )}(h bool cachingh](j( )}(hj$h]hbool}(hji8hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hje8ubj )}(h h]h }(hjv8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hje8ubj )}(hcachingh]hcaching}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hje8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj_7ubeh}(h]h ]h"]h$]h&]hhuh1j hj&7hhhj87hMJubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj"7hhhj87hMJubah}(h]j7ah ](j| j} eh"]h$]h&]j j )j huh1jg hj87hMJhj7hhubj )}(hhh]h)}(h-Clear the PG_fscache bits from a set of pagesh]h-Clear the PG_fscache bits from a set of pages}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMAhj8hhubah}(h]h ]h"]h$]h&]uh1j hj7hhhj87hMJubeh}(h]h ](j functioneh"]h$]h&]j j j j8j j8j j j uh1jb hhhj@ hNhNubj )}(hXS**Parameters** ``struct address_space *mapping`` The netfs inode to use as the source ``loff_t start`` The start position in **mapping** ``size_t len`` The amount of data to unlock ``bool caching`` If PG_fscache has been set **Description** Clear the PG_fscache flag from a sequence of pages and wake up anyone who's waiting.h](h)}(h**Parameters**h]j )}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj8ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMEhj8ubj )}(hhh](j )}(hG``struct address_space *mapping`` The netfs inode to use as the source h](j )}(h!``struct address_space *mapping``h]jJ)}(hj8h]hstruct address_space *mapping}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj8ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMBhj8ubj )}(hhh]h)}(h$The netfs inode to use as the sourceh]h$The netfs inode to use as the source}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMBhj9ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1j hj9hMBhj8ubj )}(h3``loff_t start`` The start position in **mapping** h](j )}(h``loff_t start``h]jJ)}(hj(9h]h loff_t start}(hj*9hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj&9ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMChj"9ubj )}(hhh]h)}(h!The start position in **mapping**h](hThe start position in }(hjA9hhhNhNubj )}(h **mapping**h]hmapping}(hjI9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjA9ubeh}(h]h ]h"]h$]h&]uh1hhj=9hMChj>9ubah}(h]h ]h"]h$]h&]uh1j hj"9ubeh}(h]h ]h"]h$]h&]uh1j hj=9hMChj8ubj )}(h,``size_t len`` The amount of data to unlock h](j )}(h``size_t len``h]jJ)}(hjo9h]h size_t len}(hjq9hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjm9ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMDhji9ubj )}(hhh]h)}(hThe amount of data to unlockh]hThe amount of data to unlock}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMDhj9ubah}(h]h ]h"]h$]h&]uh1j hji9ubeh}(h]h ]h"]h$]h&]uh1j hj9hMDhj8ubj )}(h,``bool caching`` If PG_fscache has been set h](j )}(h``bool caching``h]jJ)}(hj9h]h bool caching}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj9ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMEhj9ubj )}(hhh]h)}(hIf PG_fscache has been seth]hIf PG_fscache has been set}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMEhj9ubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1j hj9hMEhj8ubeh}(h]h ]h"]h$]h&]uh1j hj8ubh)}(h**Description**h]j )}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMGhj8ubh)}(hTClear the PG_fscache flag from a sequence of pages and wake up anyone who's waiting.h]hVClear the PG_fscache flag from a sequence of pages and wake up anyone who’s waiting.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMGhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ #fscache_write_to_cache (C function)c.fscache_write_to_cachehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(hvoid fscache_write_to_cache (struct fscache_cookie *cookie, struct address_space *mapping, loff_t start, size_t len, loff_t i_size, netfs_io_terminated_t term_func, void *term_func_priv, bool using_pgpriv2, bool caching)h]jn )}(hvoid fscache_write_to_cache(struct fscache_cookie *cookie, struct address_space *mapping, loff_t start, size_t len, loff_t i_size, netfs_io_terminated_t term_func, void *term_func_priv, bool using_pgpriv2, bool caching)h](j( )}(hvoidh]hvoid}(hj(:hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj$:hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMkubj )}(h h]h }(hj7:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$:hhhj6:hMkubj )}(hfscache_write_to_cacheh]j )}(hfscache_write_to_cacheh]hfscache_write_to_cache}(hjI:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjE:ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj$:hhhj6:hMkubj )}(h(struct fscache_cookie *cookie, struct address_space *mapping, loff_t start, size_t len, loff_t i_size, netfs_io_terminated_t term_func, void *term_func_priv, bool using_pgpriv2, bool caching)h](j )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hje:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hja:ubj )}(h h]h }(hjr:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hja:ubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj:modnameN classnameNj j )}j ]j )}j jK:sbc.fscache_write_to_cacheasbuh1hhja:ubj )}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hja:ubj )}(hjh]h*}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hja:ubj )}(hcookieh]hcookie}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hja:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubj )}(hstruct address_space *mappingh](jt )}(hjw h]hstruct}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj:ubj )}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:ubh)}(hhh]j )}(h address_spaceh]h address_space}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj:modnameN classnameNj j )}j ]j:c.fscache_write_to_cacheasbuh1hhj:ubj )}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:ubj )}(hjh]h*}(hj!;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:ubj )}(hmappingh]hmapping}(hj.;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubj )}(h loff_t starth](h)}(hhh]j )}(hloff_th]hloff_t}(hjJ;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjG;ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjL;modnameN classnameNj j )}j ]j:c.fscache_write_to_cacheasbuh1hhjC;ubj )}(h h]h }(hjh;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjC;ubj )}(hstarth]hstart}(hjv;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjC;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubj )}(h size_t lenh](h)}(hhh]j )}(hsize_th]hsize_t}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj;modnameN classnameNj j )}j ]j:c.fscache_write_to_cacheasbuh1hhj;ubj )}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubj )}(hlenh]hlen}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubj )}(h loff_t i_sizeh](h)}(hhh]j )}(hloff_th]hloff_t}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj;modnameN classnameNj j )}j ]j:c.fscache_write_to_cacheasbuh1hhj;ubj )}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubj )}(hi_sizeh]hi_size}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubj )}(hnetfs_io_terminated_t term_funch](h)}(hhh]j )}(hnetfs_io_terminated_th]hnetfs_io_terminated_t}(hj"<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj$<modnameN classnameNj j )}j ]j:c.fscache_write_to_cacheasbuh1hhj<ubj )}(h h]h }(hj@<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubj )}(h term_funch]h term_func}(hjN<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubj )}(hvoid *term_func_privh](j( )}(hvoidh]hvoid}(hjg<hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hjc<ubj )}(h h]h }(hju<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc<ubj )}(hjh]h*}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc<ubj )}(hterm_func_privh]hterm_func_priv}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubj )}(hbool using_pgpriv2h](j( )}(hj$h]hbool}(hj<hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj<ubj )}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubj )}(h using_pgpriv2h]h using_pgpriv2}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubj )}(h bool cachingh](j( )}(hj$h]hbool}(hj<hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj<ubj )}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubj )}(hcachingh]hcaching}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]:ubeh}(h]h ]h"]h$]h&]hhuh1j hj$:hhhj6:hMkubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj :hhhj6:hMkubah}(h]j:ah ](j| j} eh"]h$]h&]j j )j huh1jg hj6:hMkhj:hhubj )}(hhh]h)}(h.Save a write to the cache and clear PG_fscacheh]h.Save a write to the cache and clear PG_fscache}(hj"=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMShj=hhubah}(h]h ]h"]h$]h&]uh1j hj:hhhj6:hMkubeh}(h]h ](j functioneh"]h$]h&]j j j j:=j j:=j j j uh1jb hhhj@ hNhNubj )}(hX**Parameters** ``struct fscache_cookie *cookie`` The cookie representing the cache object ``struct address_space *mapping`` The netfs inode to use as the source ``loff_t start`` The start position in **mapping** ``size_t len`` The amount of data to write back ``loff_t i_size`` The new size of the inode ``netfs_io_terminated_t term_func`` The function to call upon completion ``void *term_func_priv`` The private data for **term_func** ``bool using_pgpriv2`` If we're using PG_private_2 to mark in-progress write ``bool caching`` If we actually want to do the caching **Description** Helper function for a netfs to write dirty data from an inode into the cache object that's backing it. **start** and **len** describe the range of the data. This does not need to be page-aligned, but to satisfy DIO requirements, the cache may expand it up to the page boundaries on either end. All the pages covering the range must be marked with PG_fscache. If given, **term_func** will be called upon completion and supplied with **term_func_priv**. Note that if **using_pgpriv2** is set, the PG_private_2 flags will have been cleared by this point, so the netfs must retain its own pin on the mapping.h](h)}(h**Parameters**h]j )}(hjD=h]h Parameters}(hjF=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjB=ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMWhj>=ubj )}(hhh](j )}(hK``struct fscache_cookie *cookie`` The cookie representing the cache object h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hjc=h]hstruct fscache_cookie *cookie}(hje=hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhja=ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMThj]=ubj )}(hhh]h)}(h(The cookie representing the cache objecth]h(The cookie representing the cache object}(hj|=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx=hMThjy=ubah}(h]h ]h"]h$]h&]uh1j hj]=ubeh}(h]h ]h"]h$]h&]uh1j hjx=hMThjZ=ubj )}(hG``struct address_space *mapping`` The netfs inode to use as the source h](j )}(h!``struct address_space *mapping``h]jJ)}(hj=h]hstruct address_space *mapping}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj=ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMUhj=ubj )}(hhh]h)}(h$The netfs inode to use as the sourceh]h$The netfs inode to use as the source}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMUhj=ubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1j hj=hMUhjZ=ubj )}(h3``loff_t start`` The start position in **mapping** h](j )}(h``loff_t start``h]jJ)}(hj=h]h loff_t start}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj=ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMVhj=ubj )}(hhh]h)}(h!The start position in **mapping**h](hThe start position in }(hj=hhhNhNubj )}(h **mapping**h]hmapping}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1hhj=hMVhj=ubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1j hj=hMVhjZ=ubj )}(h0``size_t len`` The amount of data to write back h](j )}(h``size_t len``h]jJ)}(hj>h]h size_t len}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj>ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMWhj>ubj )}(hhh]h)}(h The amount of data to write backh]h The amount of data to write back}(hj5>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1>hMWhj2>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1j hj1>hMWhjZ=ubj )}(h,``loff_t i_size`` The new size of the inode h](j )}(h``loff_t i_size``h]jJ)}(hjU>h]h loff_t i_size}(hjW>hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjS>ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMXhjO>ubj )}(hhh]h)}(hThe new size of the inodeh]hThe new size of the inode}(hjn>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj>hMXhjk>ubah}(h]h ]h"]h$]h&]uh1j hjO>ubeh}(h]h ]h"]h$]h&]uh1j hjj>hMXhjZ=ubj )}(hI``netfs_io_terminated_t term_func`` The function to call upon completion h](j )}(h#``netfs_io_terminated_t term_func``h]jJ)}(hj>h]hnetfs_io_terminated_t term_func}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj>ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMYhj>ubj )}(hhh]h)}(h$The function to call upon completionh]h$The function to call upon completion}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMYhj>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1j hj>hMYhjZ=ubj )}(h<``void *term_func_priv`` The private data for **term_func** h](j )}(h``void *term_func_priv``h]jJ)}(hj>h]hvoid *term_func_priv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj>ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMZhj>ubj )}(hhh]h)}(h"The private data for **term_func**h](hThe private data for }(hj>hhhNhNubj )}(h **term_func**h]h term_func}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1hhj>hMZhj>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1j hj>hMZhjZ=ubj )}(hM``bool using_pgpriv2`` If we're using PG_private_2 to mark in-progress write h](j )}(h``bool using_pgpriv2``h]jJ)}(hj?h]hbool using_pgpriv2}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj ?ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM[hj?ubj )}(hhh]h)}(h5If we're using PG_private_2 to mark in-progress writeh]h7If we’re using PG_private_2 to mark in-progress write}(hj'?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#?hM[hj$?ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1j hj#?hM[hjZ=ubj )}(h7``bool caching`` If we actually want to do the caching h](j )}(h``bool caching``h]jJ)}(hjG?h]h bool caching}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjE?ubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM\hjA?ubj )}(hhh]h)}(h%If we actually want to do the cachingh]h%If we actually want to do the caching}(hj`?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\?hM\hj]?ubah}(h]h ]h"]h$]h&]uh1j hjA?ubeh}(h]h ]h"]h$]h&]uh1j hj\?hM\hjZ=ubeh}(h]h ]h"]h$]h&]uh1j hj>=ubh)}(h**Description**h]j )}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM^hj>=ubh)}(hfHelper function for a netfs to write dirty data from an inode into the cache object that's backing it.h]hhHelper function for a netfs to write dirty data from an inode into the cache object that’s backing it.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM^hj>=ubh)}(hX**start** and **len** describe the range of the data. This does not need to be page-aligned, but to satisfy DIO requirements, the cache may expand it up to the page boundaries on either end. All the pages covering the range must be marked with PG_fscache.h](j )}(h **start**h]hstart}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh and }(hj?hhhNhNubj )}(h**len**h]hlen}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh describe the range of the data. This does not need to be page-aligned, but to satisfy DIO requirements, the cache may expand it up to the page boundaries on either end. All the pages covering the range must be marked with PG_fscache.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMahj>=ubh)}(hIf given, **term_func** will be called upon completion and supplied with **term_func_priv**. Note that if **using_pgpriv2** is set, the PG_private_2 flags will have been cleared by this point, so the netfs must retain its own pin on the mapping.h](h If given, }(hj?hhhNhNubj )}(h **term_func**h]h term_func}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh2 will be called upon completion and supplied with }(hj?hhhNhNubj )}(h**term_func_priv**h]hterm_func_priv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh. Note that if }(hj?hhhNhNubj )}(h**using_pgpriv2**h]h using_pgpriv2}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubhz is set, the PG_private_2 flags will have been cleared by this point, so the netfs must retain its own pin on the mapping.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMfhj>=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubjR )}(hhh]h}(h]h ]h"]h$]h&]entries](j^ &fscache_note_page_release (C function)c.fscache_note_page_releasehNtauh1jQ hj@ hhhNhNubjc )}(hhh](jh )}(h>void fscache_note_page_release (struct fscache_cookie *cookie)h]jn )}(h=void fscache_note_page_release(struct fscache_cookie *cookie)h](j( )}(hvoidh]hvoid}(hj;@hhhNhNubah}(h]h ]j4 ah"]h$]h&]uh1j' hj7@hhhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMubj )}(h h]h }(hjJ@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7@hhhjI@hMubj )}(hfscache_note_page_releaseh]j )}(hfscache_note_page_releaseh]hfscache_note_page_release}(hj\@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjX@ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj7@hhhjI@hMubj )}(h(struct fscache_cookie *cookie)h]j )}(hstruct fscache_cookie *cookieh](jt )}(hjw h]hstruct}(hjx@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjt@ubj )}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjt@ubh)}(hhh]j )}(hfscache_cookieh]hfscache_cookie}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj@modnameN classnameNj j )}j ]j )}j j^@sbc.fscache_note_page_releaseasbuh1hhjt@ubj )}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjt@ubj )}(hjh]h*}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjt@ubj )}(hcookieh]hcookie}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjt@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjp@ubah}(h]h ]h"]h$]h&]hhuh1j hj7@hhhjI@hMubeh}(h]h ]h"]h$]h&]hhjv uh1jm jw jx hj3@hhhjI@hMubah}(h]j.@ah ](j| j} eh"]h$]h&]j j )j huh1jg hjI@hMhj0@hhubj )}(hhh]h)}(h#Note that a netfs page got releasedh]h#Note that a netfs page got released}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM|hj@hhubah}(h]h ]h"]h$]h&]uh1j hj0@hhhjI@hMubeh}(h]h ](j functioneh"]h$]h&]j j j jAj jAj j j uh1jb hhhj@ hNhNubj )}(hX**Parameters** ``struct fscache_cookie *cookie`` The cookie corresponding to the file **Description** Note that a page that has been copied to the cache has been released. This means that future reads will need to look in the cache to see if it's there.h](h)}(h**Parameters**h]j )}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjAubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjAubj )}(hhh]j )}(hG``struct fscache_cookie *cookie`` The cookie corresponding to the file h](j )}(h!``struct fscache_cookie *cookie``h]jJ)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj:Aubah}(h]h ]h"]h$]h&]uh1j hf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhM}hj6Aubj )}(hhh]h)}(h$The cookie corresponding to the fileh]h$The cookie corresponding to the file}(hjUAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQAhM}hjRAubah}(h]h ]h"]h$]h&]uh1j hj6Aubeh}(h]h ]h"]h$]h&]uh1j hjQAhM}hj3Aubah}(h]h ]h"]h$]h&]uh1j hjAubh)}(h**Description**h]j )}(hjwAh]h Description}(hjyAhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjuAubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjAubh)}(hNote that a page that has been copied to the cache has been released. This means that future reads will need to look in the cache to see if it's there.h]hNote that a page that has been copied to the cache has been released. This means that future reads will need to look in the cache to see if it’s there.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/filesystems/caching/netfs-api:452: ./include/linux/fscache.hhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj@ hhhNhNubeh}(h]api-function-referenceah ]h"]api function referenceah$]h&]uh1hhhhhhhhMubeh}(h]network-filesystem-caching-apiah ]h"]network filesystem caching apiah$]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_handlerjAerror_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}(jAjAjDjAjjjj}jjjhjejCj@jjjjjjjjj= j: jAjAu nametypes}(jAjDjjjjhjCjjjjj= jAuh}(jAhjAjjjGj}jjjjejj@jkjjFjjjjjjj: jjAj@ j` ji j j jjjjjwj|j7j<j4j9j'j,j8 j= j#j#j|%j%j(j(jQ*jV*j/j/j2j2j7j"7j:j :j.@j3@u 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.