Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  cachefiles.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* CacheFiles tracepoints
 *
 * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
 * Written by David Howells (dhowells@redhat.com)
 */

#undef TRACE_SYSTEM
#define TRACE_SYSTEM cachefiles

#if !defined(_TRACE_CACHEFILES_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_CACHEFILES_H

#include <linux/tracepoint.h>

/*
 * Define enums for tracing information.
 */

#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,
 cachefiles_obj_get_ondemand_fd,
 cachefiles_obj_put_ondemand_fd,
 cachefiles_obj_get_read_req,
 cachefiles_obj_put_read_req,
};

enum fscache_why_object_killed {
 FSCACHE_OBJECT_IS_STALE,
 FSCACHE_OBJECT_IS_WEIRD,
 FSCACHE_OBJECT_INVALIDATED,
 FSCACHE_OBJECT_NO_SPACE,
 FSCACHE_OBJECT_WAS_RETIRED,
 FSCACHE_OBJECT_WAS_CULLED,
 FSCACHE_VOLUME_IS_WEIRD,
};

enum cachefiles_coherency_trace {
 cachefiles_coherency_check_aux,
 cachefiles_coherency_check_content,
 cachefiles_coherency_check_dirty,
 cachefiles_coherency_check_len,
 cachefiles_coherency_check_objsize,
 cachefiles_coherency_check_ok,
 cachefiles_coherency_check_type,
 cachefiles_coherency_check_xattr,
 cachefiles_coherency_set_fail,
 cachefiles_coherency_set_ok,
 cachefiles_coherency_vol_check_cmp,
 cachefiles_coherency_vol_check_ok,
 cachefiles_coherency_vol_check_resv,
 cachefiles_coherency_vol_check_xattr,
 cachefiles_coherency_vol_set_fail,
 cachefiles_coherency_vol_set_ok,
};

enum cachefiles_trunc_trace {
 cachefiles_trunc_dio_adjust,
 cachefiles_trunc_expand_tmpfile,
 cachefiles_trunc_shrink,
};

enum cachefiles_prepare_read_trace {
 cachefiles_trace_read_after_eof,
 cachefiles_trace_read_found_hole,
 cachefiles_trace_read_found_part,
 cachefiles_trace_read_have_data,
 cachefiles_trace_read_no_data,
 cachefiles_trace_read_no_file,
 cachefiles_trace_read_seek_error,
 cachefiles_trace_read_seek_nxio,
};

enum cachefiles_error_trace {
 cachefiles_trace_fallocate_error,
 cachefiles_trace_getxattr_error,
 cachefiles_trace_link_error,
 cachefiles_trace_lookup_error,
 cachefiles_trace_mkdir_error,
 cachefiles_trace_notify_change_error,
 cachefiles_trace_open_error,
 cachefiles_trace_read_error,
 cachefiles_trace_remxattr_error,
 cachefiles_trace_rename_error,
 cachefiles_trace_seek_error,
 cachefiles_trace_setxattr_error,
 cachefiles_trace_statfs_error,
 cachefiles_trace_tmpfile_error,
 cachefiles_trace_trunc_error,
 cachefiles_trace_unlink_error,
 cachefiles_trace_write_error,
};

#endif

/*
 * Define enum -> string mappings for display.
 */

#define cachefiles_obj_kill_traces    \
 EM(FSCACHE_OBJECT_IS_STALE, "stale")  \
 EM(FSCACHE_OBJECT_IS_WEIRD, "weird")  \
 EM(FSCACHE_OBJECT_INVALIDATED, "inval")  \
 EM(FSCACHE_OBJECT_NO_SPACE, "no_space")  \
 EM(FSCACHE_OBJECT_WAS_RETIRED, "was_retired")  \
 EM(FSCACHE_OBJECT_WAS_CULLED, "was_culled")  \
 E_(FSCACHE_VOLUME_IS_WEIRD, "volume_weird")

#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") \
 EM(cachefiles_obj_see_withdrawal, "SEE withdrawal") \
 EM(cachefiles_obj_get_ondemand_fd,      "GET ondemand_fd") \
 EM(cachefiles_obj_put_ondemand_fd,      "PUT ondemand_fd") \
 EM(cachefiles_obj_get_read_req,  "GET read_req")  \
 E_(cachefiles_obj_put_read_req,  "PUT read_req")

#define cachefiles_coherency_traces     \
 EM(cachefiles_coherency_check_aux, "BAD aux ")  \
 EM(cachefiles_coherency_check_content, "BAD cont")  \
 EM(cachefiles_coherency_check_dirty, "BAD dirt")  \
 EM(cachefiles_coherency_check_len, "BAD len ")  \
 EM(cachefiles_coherency_check_objsize, "BAD osiz")  \
 EM(cachefiles_coherency_check_ok, "OK ")  \
 EM(cachefiles_coherency_check_type, "BAD type")  \
 EM(cachefiles_coherency_check_xattr, "BAD xatt")  \
 EM(cachefiles_coherency_set_fail, "SET fail")  \
 EM(cachefiles_coherency_set_ok,  "SET ok ")  \
 EM(cachefiles_coherency_vol_check_cmp, "VOL BAD cmp ")  \
 EM(cachefiles_coherency_vol_check_ok, "VOL OK ")  \
 EM(cachefiles_coherency_vol_check_resv, "VOL BAD resv") \
 EM(cachefiles_coherency_vol_check_xattr,"VOL BAD xatt")  \
 EM(cachefiles_coherency_vol_set_fail, "VOL SET fail")  \
 E_(cachefiles_coherency_vol_set_ok, "VOL SET ok ")

#define cachefiles_trunc_traces      \
 EM(cachefiles_trunc_dio_adjust,  "DIOADJ")  \
 EM(cachefiles_trunc_expand_tmpfile, "EXPTMP")  \
 E_(cachefiles_trunc_shrink,  "SHRINK")

#define cachefiles_prepare_read_traces     \
 EM(cachefiles_trace_read_after_eof, "after-eof ")  \
 EM(cachefiles_trace_read_found_hole, "found-hole")  \
 EM(cachefiles_trace_read_found_part, "found-part")  \
 EM(cachefiles_trace_read_have_data, "have-data ")  \
 EM(cachefiles_trace_read_no_data, "no-data ")  \
 EM(cachefiles_trace_read_no_file, "no-file ")  \
 EM(cachefiles_trace_read_seek_error, "seek-error")  \
 E_(cachefiles_trace_read_seek_nxio, "seek-enxio")

#define cachefiles_error_traces      \
 EM(cachefiles_trace_fallocate_error, "fallocate")  \
 EM(cachefiles_trace_getxattr_error, "getxattr")  \
 EM(cachefiles_trace_link_error,  "link")   \
 EM(cachefiles_trace_lookup_error, "lookup")  \
 EM(cachefiles_trace_mkdir_error, "mkdir")  \
 EM(cachefiles_trace_notify_change_error, "notify_change") \
 EM(cachefiles_trace_open_error,  "open")   \
 EM(cachefiles_trace_read_error,  "read")   \
 EM(cachefiles_trace_remxattr_error, "remxattr")  \
 EM(cachefiles_trace_rename_error, "rename")  \
 EM(cachefiles_trace_seek_error,  "seek")   \
 EM(cachefiles_trace_setxattr_error, "setxattr")  \
 EM(cachefiles_trace_statfs_error, "statfs")  \
 EM(cachefiles_trace_tmpfile_error, "tmpfile")  \
 EM(cachefiles_trace_trunc_error, "trunc")  \
 EM(cachefiles_trace_unlink_error, "unlink")  \
 E_(cachefiles_trace_write_error, "write")


/*
 * Export enum symbols via userspace.
 */

#undef EM
#undef E_
#define EM(a, b) TRACE_DEFINE_ENUM(a);
#define E_(a, b) TRACE_DEFINE_ENUM(a);

cachefiles_obj_kill_traces;
cachefiles_obj_ref_traces;
cachefiles_coherency_traces;
cachefiles_trunc_traces;
cachefiles_prepare_read_traces;
cachefiles_error_traces;

/*
 * Now redefine the EM() and E_() macros to map the enums to the strings that
 * will be printed in the output.
 */

#undef EM
#undef E_
#define EM(a, b) { a, b },
#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 *dir,
       struct dentry *de),

     TP_ARGS(obj, dir, de),

     TP_STRUCT__entry(
      __field(unsigned int,  obj)
      __field(short,   error)
      __field(unsigned long,  dino)
      __field(unsigned long,  ino)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->dino = d_backing_inode(dir)->i_ino;
      __entry->ino = (!IS_ERR(de) && d_backing_inode(de) ?
        d_backing_inode(de)->i_ino : 0);
      __entry->error = IS_ERR(de) ? PTR_ERR(de) : 0;
      ),

     TP_printk("o=%08x dB=%lx B=%lx e=%d",
        __entry->obj, __entry->dino, __entry->ino, __entry->error)
     );

TRACE_EVENT(cachefiles_mkdir,
     TP_PROTO(struct dentry *dir, struct dentry *subdir),

     TP_ARGS(dir, subdir),

     TP_STRUCT__entry(
      __field(unsigned int,   dir)
      __field(unsigned int,   subdir)
        ),

     TP_fast_assign(
      __entry->dir = d_backing_inode(dir)->i_ino;
      __entry->subdir = d_backing_inode(subdir)->i_ino;
      ),

     TP_printk("dB=%x sB=%x",
        __entry->dir,
        __entry->subdir)
     );

TRACE_EVENT(cachefiles_tmpfile,
     TP_PROTO(struct cachefiles_object *obj, struct inode *backer),

     TP_ARGS(obj, backer),

     TP_STRUCT__entry(
      __field(unsigned int,   obj)
      __field(unsigned int,   backer)
        ),

     TP_fast_assign(
      __entry->obj = obj->debug_id;
      __entry->backer = backer->i_ino;
      ),

     TP_printk("o=%08x B=%x",
        __entry->obj,
        __entry->backer)
     );

TRACE_EVENT(cachefiles_link,
     TP_PROTO(struct cachefiles_object *obj, struct inode *backer),

     TP_ARGS(obj, backer),

     TP_STRUCT__entry(
      __field(unsigned int,   obj)
      __field(unsigned int,   backer)
        ),

     TP_fast_assign(
      __entry->obj = obj->debug_id;
      __entry->backer = backer->i_ino;
      ),

     TP_printk("o=%08x B=%x",
        __entry->obj,
        __entry->backer)
     );

TRACE_EVENT(cachefiles_unlink,
     TP_PROTO(struct cachefiles_object *obj,
       ino_t ino,
       enum fscache_why_object_killed why),

     TP_ARGS(obj, ino, why),

     /* Note that obj may be NULL */
     TP_STRUCT__entry(
      __field(unsigned int,  obj)
      __field(unsigned int,  ino)
      __field(enum fscache_why_object_killed, why)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : UINT_MAX;
      __entry->ino = ino;
      __entry->why = why;
      ),

     TP_printk("o=%08x B=%x w=%s",
        __entry->obj, __entry->ino,
        __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
     );

TRACE_EVENT(cachefiles_rename,
     TP_PROTO(struct cachefiles_object *obj,
       ino_t ino,
       enum fscache_why_object_killed why),

     TP_ARGS(obj, ino, why),

     /* Note that obj may be NULL */
     TP_STRUCT__entry(
      __field(unsigned int,  obj)
      __field(unsigned int,  ino)
      __field(enum fscache_why_object_killed, why)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : UINT_MAX;
      __entry->ino = ino;
      __entry->why = why;
      ),

     TP_printk("o=%08x B=%x w=%s",
        __entry->obj, __entry->ino,
        __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
     );

TRACE_EVENT(cachefiles_coherency,
     TP_PROTO(struct cachefiles_object *obj,
       ino_t ino,
       u64 disk_aux,
       enum cachefiles_content content,
       enum cachefiles_coherency_trace why),

     TP_ARGS(obj, ino, disk_aux, content, why),

     /* Note that obj may be NULL */
     TP_STRUCT__entry(
      __field(unsigned int,   obj)
      __field(enum cachefiles_coherency_trace, why)
      __field(enum cachefiles_content,  content)
      __field(u64,    ino)
      __field(u64,    aux)
      __field(u64,    disk_aux)
        ),

     TP_fast_assign(
      __entry->obj = obj->debug_id;
      __entry->why = why;
      __entry->content = content;
      __entry->ino = ino;
      __entry->aux = be64_to_cpup((__be64 *)obj->cookie->inline_aux);
      __entry->disk_aux = disk_aux;
      ),

     TP_printk("o=%08x %s B=%llx c=%u aux=%llx dsk=%llx",
        __entry->obj,
        __print_symbolic(__entry->why, cachefiles_coherency_traces),
        __entry->ino,
        __entry->content,
        __entry->aux,
        __entry->disk_aux)
     );

TRACE_EVENT(cachefiles_vol_coherency,
     TP_PROTO(struct cachefiles_volume *volume,
       ino_t ino,
       enum cachefiles_coherency_trace why),

     TP_ARGS(volume, ino, why),

     /* Note that obj may be NULL */
     TP_STRUCT__entry(
      __field(unsigned int,   vol)
      __field(enum cachefiles_coherency_trace, why)
      __field(u64,    ino)
        ),

     TP_fast_assign(
      __entry->vol = volume->vcookie->debug_id;
      __entry->why = why;
      __entry->ino = ino;
      ),

     TP_printk("V=%08x %s B=%llx",
        __entry->vol,
        __print_symbolic(__entry->why, cachefiles_coherency_traces),
        __entry->ino)
     );

TRACE_EVENT(cachefiles_prep_read,
     TP_PROTO(struct cachefiles_object *obj,
       loff_t start,
       size_t len,
       unsigned short flags,
       enum netfs_io_source source,
       enum cachefiles_prepare_read_trace why,
       ino_t cache_inode, ino_t netfs_inode),

     TP_ARGS(obj, start, len, flags, source, why, cache_inode, netfs_inode),

     TP_STRUCT__entry(
      __field(unsigned int,  obj)
      __field(unsigned short,  flags)
      __field(enum netfs_io_source, source)
      __field(enum cachefiles_prepare_read_trace, why)
      __field(size_t,   len)
      __field(loff_t,   start)
      __field(unsigned int,  netfs_inode)
      __field(unsigned int,  cache_inode)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->flags = flags;
      __entry->source = source;
      __entry->why = why;
      __entry->len = len;
      __entry->start = start;
      __entry->netfs_inode = netfs_inode;
      __entry->cache_inode = cache_inode;
      ),

     TP_printk("o=%08x %s %s f=%02x s=%llx %zx ni=%x B=%x",
        __entry->obj,
        __print_symbolic(__entry->source, netfs_sreq_sources),
        __print_symbolic(__entry->why, cachefiles_prepare_read_traces),
        __entry->flags,
        __entry->start, __entry->len,
        __entry->netfs_inode, __entry->cache_inode)
     );

TRACE_EVENT(cachefiles_read,
     TP_PROTO(struct cachefiles_object *obj,
       struct inode *backer,
       loff_t start,
       size_t len),

     TP_ARGS(obj, backer, start, len),

     TP_STRUCT__entry(
      __field(unsigned int,   obj)
      __field(unsigned int,   backer)
      __field(size_t,    len)
      __field(loff_t,    start)
        ),

     TP_fast_assign(
      __entry->obj = obj->debug_id;
      __entry->backer = backer->i_ino;
      __entry->start = start;
      __entry->len = len;
      ),

     TP_printk("o=%08x B=%x s=%llx l=%zx",
        __entry->obj,
        __entry->backer,
        __entry->start,
        __entry->len)
     );

TRACE_EVENT(cachefiles_write,
     TP_PROTO(struct cachefiles_object *obj,
       struct inode *backer,
       loff_t start,
       size_t len),

     TP_ARGS(obj, backer, start, len),

     TP_STRUCT__entry(
      __field(unsigned int,   obj)
      __field(unsigned int,   backer)
      __field(size_t,    len)
      __field(loff_t,    start)
        ),

     TP_fast_assign(
      __entry->obj = obj->debug_id;
      __entry->backer = backer->i_ino;
      __entry->start = start;
      __entry->len = len;
      ),

     TP_printk("o=%08x B=%x s=%llx l=%zx",
        __entry->obj,
        __entry->backer,
        __entry->start,
        __entry->len)
     );

TRACE_EVENT(cachefiles_trunc,
     TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
       loff_t from, loff_t to, enum cachefiles_trunc_trace why),

     TP_ARGS(obj, backer, from, to, why),

     TP_STRUCT__entry(
      __field(unsigned int,   obj)
      __field(unsigned int,   backer)
      __field(enum cachefiles_trunc_trace, why)
      __field(loff_t,    from)
      __field(loff_t,    to)
        ),

     TP_fast_assign(
      __entry->obj = obj->debug_id;
      __entry->backer = backer->i_ino;
      __entry->from = from;
      __entry->to  = to;
      __entry->why = why;
      ),

     TP_printk("o=%08x B=%x %s l=%llx->%llx",
        __entry->obj,
        __entry->backer,
        __print_symbolic(__entry->why, cachefiles_trunc_traces),
        __entry->from,
        __entry->to)
     );

TRACE_EVENT(cachefiles_mark_active,
     TP_PROTO(struct cachefiles_object *obj,
       struct inode *inode),

     TP_ARGS(obj, inode),

     /* Note that obj may be NULL */
     TP_STRUCT__entry(
      __field(unsigned int,  obj)
      __field(ino_t,   inode)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->inode = inode->i_ino;
      ),

     TP_printk("o=%08x B=%lx",
        __entry->obj, __entry->inode)
     );

TRACE_EVENT(cachefiles_mark_failed,
     TP_PROTO(struct cachefiles_object *obj,
       struct inode *inode),

     TP_ARGS(obj, inode),

     /* Note that obj may be NULL */
     TP_STRUCT__entry(
      __field(unsigned int,  obj)
      __field(ino_t,   inode)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->inode = inode->i_ino;
      ),

     TP_printk("o=%08x B=%lx",
        __entry->obj, __entry->inode)
     );

TRACE_EVENT(cachefiles_mark_inactive,
     TP_PROTO(struct cachefiles_object *obj,
       struct inode *inode),

     TP_ARGS(obj, inode),

     /* Note that obj may be NULL */
     TP_STRUCT__entry(
      __field(unsigned int,  obj)
      __field(ino_t,   inode)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->inode = inode->i_ino;
      ),

     TP_printk("o=%08x B=%lx",
        __entry->obj, __entry->inode)
     );

TRACE_EVENT(cachefiles_vfs_error,
     TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
       int error, enum cachefiles_error_trace where),

     TP_ARGS(obj, backer, error, where),

     TP_STRUCT__entry(
      __field(unsigned int,   obj)
      __field(unsigned int,   backer)
      __field(enum cachefiles_error_trace, where)
      __field(short,    error)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->backer = backer->i_ino;
      __entry->error = error;
      __entry->where = where;
      ),

     TP_printk("o=%08x B=%x %s e=%d",
        __entry->obj,
        __entry->backer,
        __print_symbolic(__entry->where, cachefiles_error_traces),
        __entry->error)
     );

TRACE_EVENT(cachefiles_io_error,
     TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
       int error, enum cachefiles_error_trace where),

     TP_ARGS(obj, backer, error, where),

     TP_STRUCT__entry(
      __field(unsigned int,   obj)
      __field(unsigned int,   backer)
      __field(enum cachefiles_error_trace, where)
      __field(short,    error)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->backer = backer->i_ino;
      __entry->error = error;
      __entry->where = where;
      ),

     TP_printk("o=%08x B=%x %s e=%d",
        __entry->obj,
        __entry->backer,
        __print_symbolic(__entry->where, cachefiles_error_traces),
        __entry->error)
     );

TRACE_EVENT(cachefiles_ondemand_open,
     TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
       struct cachefiles_open *load),

     TP_ARGS(obj, msg, load),

     TP_STRUCT__entry(
      __field(unsigned int, obj)
      __field(unsigned int, msg_id)
      __field(unsigned int, object_id)
      __field(unsigned int, fd)
      __field(unsigned int, flags)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->msg_id = msg->msg_id;
      __entry->object_id = msg->object_id;
      __entry->fd  = load->fd;
      __entry->flags = load->flags;
      ),

     TP_printk("o=%08x mid=%x oid=%x fd=%d f=%x",
        __entry->obj,
        __entry->msg_id,
        __entry->object_id,
        __entry->fd,
        __entry->flags)
     );

TRACE_EVENT(cachefiles_ondemand_copen,
     TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id,
       long len),

     TP_ARGS(obj, msg_id, len),

     TP_STRUCT__entry(
      __field(unsigned int, obj)
      __field(unsigned int, msg_id)
      __field(long,  len)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->msg_id = msg_id;
      __entry->len = len;
      ),

     TP_printk("o=%08x mid=%x l=%lx",
        __entry->obj,
        __entry->msg_id,
        __entry->len)
     );

TRACE_EVENT(cachefiles_ondemand_close,
     TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg),

     TP_ARGS(obj, msg),

     TP_STRUCT__entry(
      __field(unsigned int, obj)
      __field(unsigned int, msg_id)
      __field(unsigned int, object_id)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->msg_id = msg->msg_id;
      __entry->object_id = msg->object_id;
      ),

     TP_printk("o=%08x mid=%x oid=%x",
        __entry->obj,
        __entry->msg_id,
        __entry->object_id)
     );

TRACE_EVENT(cachefiles_ondemand_read,
     TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
       struct cachefiles_read *load),

     TP_ARGS(obj, msg, load),

     TP_STRUCT__entry(
      __field(unsigned int, obj)
      __field(unsigned int, msg_id)
      __field(unsigned int, object_id)
      __field(loff_t,  start)
      __field(size_t,  len)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->msg_id = msg->msg_id;
      __entry->object_id = msg->object_id;
      __entry->start = load->off;
      __entry->len = load->len;
      ),

     TP_printk("o=%08x mid=%x oid=%x s=%llx l=%zx",
        __entry->obj,
        __entry->msg_id,
        __entry->object_id,
        __entry->start,
        __entry->len)
     );

TRACE_EVENT(cachefiles_ondemand_cread,
     TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id),

     TP_ARGS(obj, msg_id),

     TP_STRUCT__entry(
      __field(unsigned int, obj)
      __field(unsigned int, msg_id)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->msg_id = msg_id;
      ),

     TP_printk("o=%08x mid=%x",
        __entry->obj,
        __entry->msg_id)
     );

TRACE_EVENT(cachefiles_ondemand_fd_write,
     TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
       loff_t start, size_t len),

     TP_ARGS(obj, backer, start, len),

     TP_STRUCT__entry(
      __field(unsigned int, obj)
      __field(unsigned int, backer)
      __field(loff_t,  start)
      __field(size_t,  len)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->backer = backer->i_ino;
      __entry->start = start;
      __entry->len = len;
      ),

     TP_printk("o=%08x iB=%x s=%llx l=%zx",
        __entry->obj,
        __entry->backer,
        __entry->start,
        __entry->len)
     );

TRACE_EVENT(cachefiles_ondemand_fd_release,
     TP_PROTO(struct cachefiles_object *obj, int object_id),

     TP_ARGS(obj, object_id),

     TP_STRUCT__entry(
      __field(unsigned int, obj)
      __field(unsigned int, object_id)
        ),

     TP_fast_assign(
      __entry->obj = obj ? obj->debug_id : 0;
      __entry->object_id = object_id;
      ),

     TP_printk("o=%08x oid=%x",
        __entry->obj,
        __entry->object_id)
     );

#endif /* _TRACE_CACHEFILES_H */

/* This part must be outside protection */
#include <trace/define_trace.h>

Messung V0.5
C=96 H=98 G=96

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge