aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cachefiles
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2009-11-19 13:11:04 -0500
committerDavid Howells <dhowells@redhat.com>2009-11-19 13:11:04 -0500
commit4fbf4291aa15926cd4fdca0ffe9122e89d0459db (patch)
treeec2195c39ef8117acea598af4a5c20c77f67aa0b /fs/cachefiles
parent440f0affe247e9990c8f8778f1861da4fd7d5e50 (diff)
FS-Cache: Allow the current state of all objects to be dumped
Allow the current state of all fscache objects to be dumped by doing: cat /proc/fs/fscache/objects By default, all objects and all fields will be shown. This can be restricted by adding a suitable key to one of the caller's keyrings (such as the session keyring): keyctl add user fscache:objlist "<restrictions>" @s The <restrictions> are: K Show hexdump of object key (don't show if not given) A Show hexdump of object aux data (don't show if not given) And paired restrictions: C Show objects that have a cookie c Show objects that don't have a cookie B Show objects that are busy b Show objects that aren't busy W Show objects that have pending writes w Show objects that don't have pending writes R Show objects that have outstanding reads r Show objects that don't have outstanding reads S Show objects that have slow work queued s Show objects that don't have slow work queued If neither side of a restriction pair is given, then both are implied. For example: keyctl add user fscache:objlist KB @s shows objects that are busy, and lists their object keys, but does not dump their auxiliary data. It also implies "CcWwRrSs", but as 'B' is given, 'b' is not implied. Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs/cachefiles')
-rw-r--r--fs/cachefiles/interface.c1
-rw-r--r--fs/cachefiles/rdwr.c6
2 files changed, 5 insertions, 2 deletions
diff --git a/fs/cachefiles/interface.c b/fs/cachefiles/interface.c
index 431accd475a7..dd7f852746cb 100644
--- a/fs/cachefiles/interface.c
+++ b/fs/cachefiles/interface.c
@@ -331,6 +331,7 @@ static void cachefiles_put_object(struct fscache_object *_object)
331 } 331 }
332 332
333 cache = object->fscache.cache; 333 cache = object->fscache.cache;
334 fscache_object_destroy(&object->fscache);
334 kmem_cache_free(cachefiles_object_jar, object); 335 kmem_cache_free(cachefiles_object_jar, object);
335 fscache_object_destroyed(cache); 336 fscache_object_destroyed(cache);
336 } 337 }
diff --git a/fs/cachefiles/rdwr.c b/fs/cachefiles/rdwr.c
index a69787e7dd96..3304646dae84 100644
--- a/fs/cachefiles/rdwr.c
+++ b/fs/cachefiles/rdwr.c
@@ -333,7 +333,8 @@ int cachefiles_read_or_alloc_page(struct fscache_retrieval *op,
333 333
334 shift = PAGE_SHIFT - inode->i_sb->s_blocksize_bits; 334 shift = PAGE_SHIFT - inode->i_sb->s_blocksize_bits;
335 335
336 op->op.flags = FSCACHE_OP_FAST; 336 op->op.flags &= FSCACHE_OP_KEEP_FLAGS;
337 op->op.flags |= FSCACHE_OP_FAST;
337 op->op.processor = cachefiles_read_copier; 338 op->op.processor = cachefiles_read_copier;
338 339
339 pagevec_init(&pagevec, 0); 340 pagevec_init(&pagevec, 0);
@@ -639,7 +640,8 @@ int cachefiles_read_or_alloc_pages(struct fscache_retrieval *op,
639 640
640 pagevec_init(&pagevec, 0); 641 pagevec_init(&pagevec, 0);
641 642
642 op->op.flags = FSCACHE_OP_FAST; 643 op->op.flags &= FSCACHE_OP_KEEP_FLAGS;
644 op->op.flags |= FSCACHE_OP_FAST;
643 op->op.processor = cachefiles_read_copier; 645 op->op.processor = cachefiles_read_copier;
644 646
645 INIT_LIST_HEAD(&backpages); 647 INIT_LIST_HEAD(&backpages);