cachefiles: Implement object lifecycle funcs
Implement allocate, get, see and put functions for the cachefiles_object struct. The members of the struct we're going to need are also added. Additionally, implement a lifecycle tracepoint. Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> cc: linux-cachefs@redhat.com Link: https://lore.kernel.org/r/163819639457.215744.4600093239395728232.stgit@warthog.procyon.org.uk/ # v1 Link: https://lore.kernel.org/r/163906939569.143852.3594314410666551982.stgit@warthog.procyon.org.uk/ # v2 Link: https://lore.kernel.org/r/163967148857.1823006.6332962598220464364.stgit@warthog.procyon.org.uk/ # v3 Link: https://lore.kernel.org/r/164021547762.640689.8422781599594931000.stgit@warthog.procyon.org.uk/ # v4
This commit is contained in:
@@ -18,6 +18,21 @@
|
||||
#ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
|
||||
#define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
|
||||
|
||||
enum cachefiles_obj_ref_trace {
|
||||
cachefiles_obj_get_ioreq,
|
||||
cachefiles_obj_new,
|
||||
cachefiles_obj_put_alloc_fail,
|
||||
cachefiles_obj_put_detach,
|
||||
cachefiles_obj_put_ioreq,
|
||||
cachefiles_obj_see_clean_commit,
|
||||
cachefiles_obj_see_clean_delete,
|
||||
cachefiles_obj_see_clean_drop_tmp,
|
||||
cachefiles_obj_see_lookup_cookie,
|
||||
cachefiles_obj_see_lookup_failed,
|
||||
cachefiles_obj_see_withdraw_cookie,
|
||||
cachefiles_obj_see_withdrawal,
|
||||
};
|
||||
|
||||
enum fscache_why_object_killed {
|
||||
FSCACHE_OBJECT_IS_STALE,
|
||||
FSCACHE_OBJECT_IS_WEIRD,
|
||||
@@ -66,6 +81,20 @@ enum cachefiles_error_trace {
|
||||
EM(FSCACHE_OBJECT_WAS_RETIRED, "was_retired") \
|
||||
E_(FSCACHE_OBJECT_WAS_CULLED, "was_culled")
|
||||
|
||||
#define cachefiles_obj_ref_traces \
|
||||
EM(cachefiles_obj_get_ioreq, "GET ioreq") \
|
||||
EM(cachefiles_obj_new, "NEW obj") \
|
||||
EM(cachefiles_obj_put_alloc_fail, "PUT alloc_fail") \
|
||||
EM(cachefiles_obj_put_detach, "PUT detach") \
|
||||
EM(cachefiles_obj_put_ioreq, "PUT ioreq") \
|
||||
EM(cachefiles_obj_see_clean_commit, "SEE clean_commit") \
|
||||
EM(cachefiles_obj_see_clean_delete, "SEE clean_delete") \
|
||||
EM(cachefiles_obj_see_clean_drop_tmp, "SEE clean_drop_tmp") \
|
||||
EM(cachefiles_obj_see_lookup_cookie, "SEE lookup_cookie") \
|
||||
EM(cachefiles_obj_see_lookup_failed, "SEE lookup_failed") \
|
||||
EM(cachefiles_obj_see_withdraw_cookie, "SEE withdraw_cookie") \
|
||||
E_(cachefiles_obj_see_withdrawal, "SEE withdrawal")
|
||||
|
||||
#define cachefiles_trunc_traces \
|
||||
EM(cachefiles_trunc_dio_adjust, "DIOADJ") \
|
||||
EM(cachefiles_trunc_expand_tmpfile, "EXPTMP") \
|
||||
@@ -100,6 +129,7 @@ enum cachefiles_error_trace {
|
||||
#define E_(a, b) TRACE_DEFINE_ENUM(a);
|
||||
|
||||
cachefiles_obj_kill_traces;
|
||||
cachefiles_obj_ref_traces;
|
||||
cachefiles_trunc_traces;
|
||||
cachefiles_error_traces;
|
||||
|
||||
@@ -113,6 +143,34 @@ cachefiles_error_traces;
|
||||
#define E_(a, b) { a, b }
|
||||
|
||||
|
||||
TRACE_EVENT(cachefiles_ref,
|
||||
TP_PROTO(unsigned int object_debug_id,
|
||||
unsigned int cookie_debug_id,
|
||||
int usage,
|
||||
enum cachefiles_obj_ref_trace why),
|
||||
|
||||
TP_ARGS(object_debug_id, cookie_debug_id, usage, why),
|
||||
|
||||
/* Note that obj may be NULL */
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, obj )
|
||||
__field(unsigned int, cookie )
|
||||
__field(enum cachefiles_obj_ref_trace, why )
|
||||
__field(int, usage )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->obj = object_debug_id;
|
||||
__entry->cookie = cookie_debug_id;
|
||||
__entry->usage = usage;
|
||||
__entry->why = why;
|
||||
),
|
||||
|
||||
TP_printk("c=%08x o=%08x u=%d %s",
|
||||
__entry->cookie, __entry->obj, __entry->usage,
|
||||
__print_symbolic(__entry->why, cachefiles_obj_ref_traces))
|
||||
);
|
||||
|
||||
TRACE_EVENT(cachefiles_lookup,
|
||||
TP_PROTO(struct cachefiles_object *obj,
|
||||
struct dentry *de),
|
||||
|
||||
@@ -49,6 +49,7 @@ enum fscache_volume_trace {
|
||||
enum fscache_cookie_trace {
|
||||
fscache_cookie_collision,
|
||||
fscache_cookie_discard,
|
||||
fscache_cookie_get_attach_object,
|
||||
fscache_cookie_get_end_access,
|
||||
fscache_cookie_get_hash_collision,
|
||||
fscache_cookie_get_inval_work,
|
||||
@@ -57,6 +58,7 @@ enum fscache_cookie_trace {
|
||||
fscache_cookie_new_acquire,
|
||||
fscache_cookie_put_hash_collision,
|
||||
fscache_cookie_put_lru,
|
||||
fscache_cookie_put_object,
|
||||
fscache_cookie_put_over_queued,
|
||||
fscache_cookie_put_relinquish,
|
||||
fscache_cookie_put_withdrawn,
|
||||
@@ -122,6 +124,7 @@ enum fscache_access_trace {
|
||||
#define fscache_cookie_traces \
|
||||
EM(fscache_cookie_collision, "*COLLIDE*") \
|
||||
EM(fscache_cookie_discard, "DISCARD ") \
|
||||
EM(fscache_cookie_get_attach_object, "GET attch") \
|
||||
EM(fscache_cookie_get_hash_collision, "GET hcoll") \
|
||||
EM(fscache_cookie_get_end_access, "GQ endac") \
|
||||
EM(fscache_cookie_get_inval_work, "GQ inval") \
|
||||
@@ -130,6 +133,7 @@ enum fscache_access_trace {
|
||||
EM(fscache_cookie_new_acquire, "NEW acq ") \
|
||||
EM(fscache_cookie_put_hash_collision, "PUT hcoll") \
|
||||
EM(fscache_cookie_put_lru, "PUT lru ") \
|
||||
EM(fscache_cookie_put_object, "PUT obj ") \
|
||||
EM(fscache_cookie_put_over_queued, "PQ overq") \
|
||||
EM(fscache_cookie_put_relinquish, "PUT relnq") \
|
||||
EM(fscache_cookie_put_withdrawn, "PUT wthdn") \
|
||||
|
||||
Reference in New Issue
Block a user