diff options
Diffstat (limited to 'Documentation/filesystems/caching')
| -rw-r--r-- | Documentation/filesystems/caching/fscache.txt | 110 | ||||
| -rw-r--r-- | Documentation/filesystems/caching/netfs-api.txt | 21 | 
2 files changed, 130 insertions, 1 deletions
| diff --git a/Documentation/filesystems/caching/fscache.txt b/Documentation/filesystems/caching/fscache.txt index 9e94b9491d89..a91e2e2095b0 100644 --- a/Documentation/filesystems/caching/fscache.txt +++ b/Documentation/filesystems/caching/fscache.txt | |||
| @@ -235,6 +235,7 @@ proc files. | |||
| 235 | neg=N Number of negative lookups made | 235 | neg=N Number of negative lookups made | 
| 236 | pos=N Number of positive lookups made | 236 | pos=N Number of positive lookups made | 
| 237 | crt=N Number of objects created by lookup | 237 | crt=N Number of objects created by lookup | 
| 238 | tmo=N Number of lookups timed out and requeued | ||
| 238 | Updates n=N Number of update cookie requests seen | 239 | Updates n=N Number of update cookie requests seen | 
| 239 | nul=N Number of upd reqs given a NULL parent | 240 | nul=N Number of upd reqs given a NULL parent | 
| 240 | run=N Number of upd reqs granted CPU time | 241 | run=N Number of upd reqs granted CPU time | 
| @@ -250,8 +251,10 @@ proc files. | |||
| 250 | ok=N Number of successful alloc reqs | 251 | ok=N Number of successful alloc reqs | 
| 251 | wt=N Number of alloc reqs that waited on lookup completion | 252 | wt=N Number of alloc reqs that waited on lookup completion | 
| 252 | nbf=N Number of alloc reqs rejected -ENOBUFS | 253 | nbf=N Number of alloc reqs rejected -ENOBUFS | 
| 254 | int=N Number of alloc reqs aborted -ERESTARTSYS | ||
| 253 | ops=N Number of alloc reqs submitted | 255 | ops=N Number of alloc reqs submitted | 
| 254 | owt=N Number of alloc reqs waited for CPU time | 256 | owt=N Number of alloc reqs waited for CPU time | 
| 257 | abt=N Number of alloc reqs aborted due to object death | ||
| 255 | Retrvls n=N Number of retrieval (read) requests seen | 258 | Retrvls n=N Number of retrieval (read) requests seen | 
| 256 | ok=N Number of successful retr reqs | 259 | ok=N Number of successful retr reqs | 
| 257 | wt=N Number of retr reqs that waited on lookup completion | 260 | wt=N Number of retr reqs that waited on lookup completion | 
| @@ -261,6 +264,7 @@ proc files. | |||
| 261 | oom=N Number of retr reqs failed -ENOMEM | 264 | oom=N Number of retr reqs failed -ENOMEM | 
| 262 | ops=N Number of retr reqs submitted | 265 | ops=N Number of retr reqs submitted | 
| 263 | owt=N Number of retr reqs waited for CPU time | 266 | owt=N Number of retr reqs waited for CPU time | 
| 267 | abt=N Number of retr reqs aborted due to object death | ||
| 264 | Stores n=N Number of storage (write) requests seen | 268 | Stores n=N Number of storage (write) requests seen | 
| 265 | ok=N Number of successful store reqs | 269 | ok=N Number of successful store reqs | 
| 266 | agn=N Number of store reqs on a page already pending storage | 270 | agn=N Number of store reqs on a page already pending storage | 
| @@ -268,12 +272,37 @@ proc files. | |||
| 268 | oom=N Number of store reqs failed -ENOMEM | 272 | oom=N Number of store reqs failed -ENOMEM | 
| 269 | ops=N Number of store reqs submitted | 273 | ops=N Number of store reqs submitted | 
| 270 | run=N Number of store reqs granted CPU time | 274 | run=N Number of store reqs granted CPU time | 
| 275 | pgs=N Number of pages given store req processing time | ||
| 276 | rxd=N Number of store reqs deleted from tracking tree | ||
| 277 | olm=N Number of store reqs over store limit | ||
| 278 | VmScan nos=N Number of release reqs against pages with no pending store | ||
| 279 | gon=N Number of release reqs against pages stored by time lock granted | ||
| 280 | bsy=N Number of release reqs ignored due to in-progress store | ||
| 281 | can=N Number of page stores cancelled due to release req | ||
| 271 | Ops pend=N Number of times async ops added to pending queues | 282 | Ops pend=N Number of times async ops added to pending queues | 
| 272 | run=N Number of times async ops given CPU time | 283 | run=N Number of times async ops given CPU time | 
| 273 | enq=N Number of times async ops queued for processing | 284 | enq=N Number of times async ops queued for processing | 
| 285 | can=N Number of async ops cancelled | ||
| 286 | rej=N Number of async ops rejected due to object lookup/create failure | ||
| 274 | dfr=N Number of async ops queued for deferred release | 287 | dfr=N Number of async ops queued for deferred release | 
| 275 | rel=N Number of async ops released | 288 | rel=N Number of async ops released | 
| 276 | gc=N Number of deferred-release async ops garbage collected | 289 | gc=N Number of deferred-release async ops garbage collected | 
| 290 | CacheOp alo=N Number of in-progress alloc_object() cache ops | ||
| 291 | luo=N Number of in-progress lookup_object() cache ops | ||
| 292 | luc=N Number of in-progress lookup_complete() cache ops | ||
| 293 | gro=N Number of in-progress grab_object() cache ops | ||
| 294 | upo=N Number of in-progress update_object() cache ops | ||
| 295 | dro=N Number of in-progress drop_object() cache ops | ||
| 296 | pto=N Number of in-progress put_object() cache ops | ||
| 297 | syn=N Number of in-progress sync_cache() cache ops | ||
| 298 | atc=N Number of in-progress attr_changed() cache ops | ||
| 299 | rap=N Number of in-progress read_or_alloc_page() cache ops | ||
| 300 | ras=N Number of in-progress read_or_alloc_pages() cache ops | ||
| 301 | alp=N Number of in-progress allocate_page() cache ops | ||
| 302 | als=N Number of in-progress allocate_pages() cache ops | ||
| 303 | wrp=N Number of in-progress write_page() cache ops | ||
| 304 | ucp=N Number of in-progress uncache_page() cache ops | ||
| 305 | dsp=N Number of in-progress dissociate_pages() cache ops | ||
| 277 | 306 | ||
| 278 | 307 | ||
| 279 | (*) /proc/fs/fscache/histogram | 308 | (*) /proc/fs/fscache/histogram | 
| @@ -299,6 +328,87 @@ proc files. | |||
| 299 | jiffy range covered, and the SECS field the equivalent number of seconds. | 328 | jiffy range covered, and the SECS field the equivalent number of seconds. | 
| 300 | 329 | ||
| 301 | 330 | ||
| 331 | =========== | ||
| 332 | OBJECT LIST | ||
| 333 | =========== | ||
| 334 | |||
| 335 | If CONFIG_FSCACHE_OBJECT_LIST is enabled, the FS-Cache facility will maintain a | ||
| 336 | list of all the objects currently allocated and allow them to be viewed | ||
| 337 | through: | ||
| 338 | |||
| 339 | /proc/fs/fscache/objects | ||
| 340 | |||
| 341 | This will look something like: | ||
| 342 | |||
| 343 | [root@andromeda ~]# head /proc/fs/fscache/objects | ||
| 344 | OBJECT PARENT STAT CHLDN OPS OOP IPR EX READS EM EV F S | NETFS_COOKIE_DEF TY FL NETFS_DATA OBJECT_KEY, AUX_DATA | ||
| 345 | ======== ======== ==== ===== === === === == ===== == == = = | ================ == == ================ ================ | ||
| 346 | 17e4b 2 ACTV 0 0 0 0 0 0 7b 4 0 8 | NFS.fh DT 0 ffff88001dd82820 010006017edcf8bbc93b43298fdfbe71e50b57b13a172c0117f38472, e567634700000000000000000000000063f2404a000000000000000000000000c9030000000000000000000063f2404a | ||
| 347 | 1693a 2 ACTV 0 0 0 0 0 0 7b 4 0 8 | NFS.fh DT 0 ffff88002db23380 010006017edcf8bbc93b43298fdfbe71e50b57b1e0162c01a2df0ea6, 420ebc4a000000000000000000000000420ebc4a0000000000000000000000000e1801000000000000000000420ebc4a | ||
| 348 | |||
| 349 | where the first set of columns before the '|' describe the object: | ||
| 350 | |||
| 351 | COLUMN DESCRIPTION | ||
| 352 | ======= =============================================================== | ||
| 353 | OBJECT Object debugging ID (appears as OBJ%x in some debug messages) | ||
| 354 | PARENT Debugging ID of parent object | ||
| 355 | STAT Object state | ||
| 356 | CHLDN Number of child objects of this object | ||
| 357 | OPS Number of outstanding operations on this object | ||
| 358 | OOP Number of outstanding child object management operations | ||
| 359 | IPR | ||
| 360 | EX Number of outstanding exclusive operations | ||
| 361 | READS Number of outstanding read operations | ||
| 362 | EM Object's event mask | ||
| 363 | EV Events raised on this object | ||
| 364 | F Object flags | ||
| 365 | S Object slow-work work item flags | ||
| 366 | |||
| 367 | and the second set of columns describe the object's cookie, if present: | ||
| 368 | |||
| 369 | COLUMN DESCRIPTION | ||
| 370 | =============== ======================================================= | ||
| 371 | NETFS_COOKIE_DEF Name of netfs cookie definition | ||
| 372 | TY Cookie type (IX - index, DT - data, hex - special) | ||
| 373 | FL Cookie flags | ||
| 374 | NETFS_DATA Netfs private data stored in the cookie | ||
| 375 | OBJECT_KEY Object key } 1 column, with separating comma | ||
| 376 | AUX_DATA Object aux data } presence may be configured | ||
| 377 | |||
| 378 | The data shown may be filtered by attaching the a key to an appropriate keyring | ||
| 379 | before viewing the file. Something like: | ||
| 380 | |||
| 381 | keyctl add user fscache:objlist <restrictions> @s | ||
| 382 | |||
| 383 | where <restrictions> are a selection of the following letters: | ||
| 384 | |||
| 385 | K Show hexdump of object key (don't show if not given) | ||
| 386 | A Show hexdump of object aux data (don't show if not given) | ||
| 387 | |||
| 388 | and the following paired letters: | ||
| 389 | |||
| 390 | C Show objects that have a cookie | ||
| 391 | c Show objects that don't have a cookie | ||
| 392 | B Show objects that are busy | ||
| 393 | b Show objects that aren't busy | ||
| 394 | W Show objects that have pending writes | ||
| 395 | w Show objects that don't have pending writes | ||
| 396 | R Show objects that have outstanding reads | ||
| 397 | r Show objects that don't have outstanding reads | ||
| 398 | S Show objects that have slow work queued | ||
| 399 | s Show objects that don't have slow work queued | ||
| 400 | |||
| 401 | If neither side of a letter pair is given, then both are implied. For example: | ||
| 402 | |||
| 403 | keyctl add user fscache:objlist KB @s | ||
| 404 | |||
| 405 | shows objects that are busy, and lists their object keys, but does not dump | ||
| 406 | their auxiliary data. It also implies "CcWwRrSs", but as 'B' is given, 'b' is | ||
| 407 | not implied. | ||
| 408 | |||
| 409 | By default all objects and all fields will be shown. | ||
| 410 | |||
| 411 | |||
| 302 | ========= | 412 | ========= | 
| 303 | DEBUGGING | 413 | DEBUGGING | 
| 304 | ========= | 414 | ========= | 
| diff --git a/Documentation/filesystems/caching/netfs-api.txt b/Documentation/filesystems/caching/netfs-api.txt index 2666b1ed5e9e..1902c57b72ef 100644 --- a/Documentation/filesystems/caching/netfs-api.txt +++ b/Documentation/filesystems/caching/netfs-api.txt | |||
| @@ -641,7 +641,7 @@ data file must be retired (see the relinquish cookie function below). | |||
| 641 | 641 | ||
| 642 | Furthermore, note that this does not cancel the asynchronous read or write | 642 | Furthermore, note that this does not cancel the asynchronous read or write | 
| 643 | operation started by the read/alloc and write functions, so the page | 643 | operation started by the read/alloc and write functions, so the page | 
| 644 | invalidation and release functions must use: | 644 | invalidation functions must use: | 
| 645 | 645 | ||
| 646 | bool fscache_check_page_write(struct fscache_cookie *cookie, | 646 | bool fscache_check_page_write(struct fscache_cookie *cookie, | 
| 647 | struct page *page); | 647 | struct page *page); | 
| @@ -654,6 +654,25 @@ to see if a page is being written to the cache, and: | |||
| 654 | to wait for it to finish if it is. | 654 | to wait for it to finish if it is. | 
| 655 | 655 | ||
| 656 | 656 | ||
| 657 | When releasepage() is being implemented, a special FS-Cache function exists to | ||
| 658 | manage the heuristics of coping with vmscan trying to eject pages, which may | ||
| 659 | conflict with the cache trying to write pages to the cache (which may itself | ||
| 660 | need to allocate memory): | ||
| 661 | |||
| 662 | bool fscache_maybe_release_page(struct fscache_cookie *cookie, | ||
| 663 | struct page *page, | ||
| 664 | gfp_t gfp); | ||
| 665 | |||
| 666 | This takes the netfs cookie, and the page and gfp arguments as supplied to | ||
| 667 | releasepage(). It will return false if the page cannot be released yet for | ||
| 668 | some reason and if it returns true, the page has been uncached and can now be | ||
| 669 | released. | ||
| 670 | |||
| 671 | To make a page available for release, this function may wait for an outstanding | ||
| 672 | storage request to complete, or it may attempt to cancel the storage request - | ||
| 673 | in which case the page will not be stored in the cache this time. | ||
| 674 | |||
| 675 | |||
| 657 | ========================== | 676 | ========================== | 
| 658 | INDEX AND DATA FILE UPDATE | 677 | INDEX AND DATA FILE UPDATE | 
| 659 | ========================== | 678 | ========================== | 
