Add some simple lock/invalidation tracing

Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
Zach Brown
2017-02-15 15:40:45 -08:00
parent 955d940c64
commit 392ed81c43
2 changed files with 60 additions and 0 deletions

View File

@@ -99,6 +99,8 @@ static int invalidate_caches(struct super_block *sb, int mode,
{
int ret;
trace_scoutfs_lock_invalidate_sb(sb, mode, start, end);
ret = scoutfs_item_writeback(sb, start, end);
if (ret)
return ret;
@@ -176,6 +178,8 @@ int scoutfs_lock_range(struct super_block *sb, int mode,
lck->end = end;
lck->mode = mode;
trace_scoutfs_lock_range(sb, lck);
ret = wait_event_interruptible(held->waitq, lock_added(held, lck));
if (ret == 0) {
ret = invalidate_others(sb, mode, start, end);
@@ -191,6 +195,8 @@ void scoutfs_unlock_range(struct super_block *sb, struct scoutfs_lock *lck)
DECLARE_LOCK_INFO(sb, linf);
struct held_locks *held = linf->held;
trace_scoutfs_unlock_range(sb, lck);
unlock(held, lck);
}

View File

@@ -28,6 +28,7 @@
#include "key.h"
#include "format.h"
#include "kvec.h"
#include "lock.h"
struct scoutfs_sb_info;
@@ -231,6 +232,59 @@ TRACE_EVENT(scoutfs_item_insert_batch,
TP_printk("start %s end %s", __get_str(start), __get_str(end))
);
#define lock_mode(mode) \
__print_symbolic(mode, \
{ SCOUTFS_LOCK_MODE_READ, "READ" }, \
{ SCOUTFS_LOCK_MODE_WRITE, "WRITE" })
DECLARE_EVENT_CLASS(scoutfs_lock_class,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck),
TP_STRUCT__entry(
__field(int, mode)
__dynamic_array(char, start, scoutfs_key_str(NULL, lck->start))
__dynamic_array(char, end, scoutfs_key_str(NULL, lck->end))
),
TP_fast_assign(
__entry->mode = lck->mode;
scoutfs_key_str(__get_dynamic_array(start), lck->start);
scoutfs_key_str(__get_dynamic_array(end), lck->end);
),
TP_printk("mode %s start %s end %s",
lock_mode(__entry->mode), __get_str(start), __get_str(end))
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_range,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_unlock_range,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
TRACE_EVENT(scoutfs_lock_invalidate_sb,
TP_PROTO(struct super_block *sb, int mode,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, mode, start, end),
TP_STRUCT__entry(
__field(void *, sb)
__field(int, mode)
__dynamic_array(char, start, scoutfs_key_str(NULL, start))
__dynamic_array(char, end, scoutfs_key_str(NULL, end))
),
TP_fast_assign(
__entry->sb = sb;
__entry->mode = mode;
scoutfs_key_str(__get_dynamic_array(start), start);
scoutfs_key_str(__get_dynamic_array(end), end);
),
TP_printk("sb %p mode %s start %s end %s",
__entry->sb, lock_mode(__entry->mode),
__get_str(start), __get_str(end))
);
#endif /* _TRACE_SCOUTFS_H */
/* This part must be outside protection */