Skip to content

Commit 1519670

Browse files
lostjefflehsiangkao
authored andcommitted
cachefiles: add tracepoints for on-demand read mode
Add tracepoints for on-demand read mode. Currently following tracepoints are added: OPEN request / COPEN reply CLOSE request READ request / CREAD reply write through anonymous fd release of anonymous fd Signed-off-by: Jeffle Xu <[email protected]> Acked-by: David Howells <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Gao Xiang <[email protected]>
1 parent 4e4f178 commit 1519670

File tree

2 files changed

+181
-0
lines changed

2 files changed

+181
-0
lines changed

fs/cachefiles/ondemand.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ static int cachefiles_ondemand_fd_release(struct inode *inode,
3030
xa_unlock(&cache->reqs);
3131

3232
xa_erase(&cache->ondemand_ids, object_id);
33+
trace_cachefiles_ondemand_fd_release(object, object_id);
3334
cachefiles_put_object(object, cachefiles_obj_put_ondemand_fd);
3435
cachefiles_put_unbind_pincount(cache);
3536
return 0;
@@ -55,6 +56,7 @@ static ssize_t cachefiles_ondemand_fd_write_iter(struct kiocb *kiocb,
5556
if (ret < 0)
5657
return ret;
5758

59+
trace_cachefiles_ondemand_fd_write(object, file_inode(file), pos, len);
5860
ret = __cachefiles_write(object, file, pos, iter, NULL, NULL);
5961
if (!ret)
6062
ret = len;
@@ -93,6 +95,7 @@ static long cachefiles_ondemand_fd_ioctl(struct file *filp, unsigned int ioctl,
9395
if (!req)
9496
return -EINVAL;
9597

98+
trace_cachefiles_ondemand_cread(object, id);
9699
complete(&req->done);
97100
return 0;
98101
}
@@ -166,6 +169,7 @@ int cachefiles_ondemand_copen(struct cachefiles_cache *cache, char *args)
166169
clear_bit(FSCACHE_COOKIE_NO_DATA_TO_READ, &cookie->flags);
167170
else
168171
set_bit(FSCACHE_COOKIE_NO_DATA_TO_READ, &cookie->flags);
172+
trace_cachefiles_ondemand_copen(req->object, id, size);
169173

170174
out:
171175
complete(&req->done);
@@ -213,6 +217,7 @@ static int cachefiles_ondemand_get_fd(struct cachefiles_req *req)
213217
object->ondemand_id = object_id;
214218

215219
cachefiles_get_unbind_pincount(cache);
220+
trace_cachefiles_ondemand_open(object, &req->msg, load);
216221
return 0;
217222

218223
err_put_fd:
@@ -426,6 +431,7 @@ static int cachefiles_ondemand_init_close_req(struct cachefiles_req *req,
426431
return -ENOENT;
427432

428433
req->msg.object_id = object_id;
434+
trace_cachefiles_ondemand_close(object, &req->msg);
429435
return 0;
430436
}
431437

@@ -452,6 +458,7 @@ static int cachefiles_ondemand_init_read_req(struct cachefiles_req *req,
452458
req->msg.object_id = object_id;
453459
load->off = read_ctx->off;
454460
load->len = read_ctx->len;
461+
trace_cachefiles_ondemand_read(object, &req->msg, load);
455462
return 0;
456463
}
457464

include/trace/events/cachefiles.h

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,180 @@ TRACE_EVENT(cachefiles_io_error,
673673
__entry->error)
674674
);
675675

676+
TRACE_EVENT(cachefiles_ondemand_open,
677+
TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
678+
struct cachefiles_open *load),
679+
680+
TP_ARGS(obj, msg, load),
681+
682+
TP_STRUCT__entry(
683+
__field(unsigned int, obj )
684+
__field(unsigned int, msg_id )
685+
__field(unsigned int, object_id )
686+
__field(unsigned int, fd )
687+
__field(unsigned int, flags )
688+
),
689+
690+
TP_fast_assign(
691+
__entry->obj = obj ? obj->debug_id : 0;
692+
__entry->msg_id = msg->msg_id;
693+
__entry->object_id = msg->object_id;
694+
__entry->fd = load->fd;
695+
__entry->flags = load->flags;
696+
),
697+
698+
TP_printk("o=%08x mid=%x oid=%x fd=%d f=%x",
699+
__entry->obj,
700+
__entry->msg_id,
701+
__entry->object_id,
702+
__entry->fd,
703+
__entry->flags)
704+
);
705+
706+
TRACE_EVENT(cachefiles_ondemand_copen,
707+
TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id,
708+
long len),
709+
710+
TP_ARGS(obj, msg_id, len),
711+
712+
TP_STRUCT__entry(
713+
__field(unsigned int, obj )
714+
__field(unsigned int, msg_id )
715+
__field(long, len )
716+
),
717+
718+
TP_fast_assign(
719+
__entry->obj = obj ? obj->debug_id : 0;
720+
__entry->msg_id = msg_id;
721+
__entry->len = len;
722+
),
723+
724+
TP_printk("o=%08x mid=%x l=%lx",
725+
__entry->obj,
726+
__entry->msg_id,
727+
__entry->len)
728+
);
729+
730+
TRACE_EVENT(cachefiles_ondemand_close,
731+
TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg),
732+
733+
TP_ARGS(obj, msg),
734+
735+
TP_STRUCT__entry(
736+
__field(unsigned int, obj )
737+
__field(unsigned int, msg_id )
738+
__field(unsigned int, object_id )
739+
),
740+
741+
TP_fast_assign(
742+
__entry->obj = obj ? obj->debug_id : 0;
743+
__entry->msg_id = msg->msg_id;
744+
__entry->object_id = msg->object_id;
745+
),
746+
747+
TP_printk("o=%08x mid=%x oid=%x",
748+
__entry->obj,
749+
__entry->msg_id,
750+
__entry->object_id)
751+
);
752+
753+
TRACE_EVENT(cachefiles_ondemand_read,
754+
TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
755+
struct cachefiles_read *load),
756+
757+
TP_ARGS(obj, msg, load),
758+
759+
TP_STRUCT__entry(
760+
__field(unsigned int, obj )
761+
__field(unsigned int, msg_id )
762+
__field(unsigned int, object_id )
763+
__field(loff_t, start )
764+
__field(size_t, len )
765+
),
766+
767+
TP_fast_assign(
768+
__entry->obj = obj ? obj->debug_id : 0;
769+
__entry->msg_id = msg->msg_id;
770+
__entry->object_id = msg->object_id;
771+
__entry->start = load->off;
772+
__entry->len = load->len;
773+
),
774+
775+
TP_printk("o=%08x mid=%x oid=%x s=%llx l=%zx",
776+
__entry->obj,
777+
__entry->msg_id,
778+
__entry->object_id,
779+
__entry->start,
780+
__entry->len)
781+
);
782+
783+
TRACE_EVENT(cachefiles_ondemand_cread,
784+
TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id),
785+
786+
TP_ARGS(obj, msg_id),
787+
788+
TP_STRUCT__entry(
789+
__field(unsigned int, obj )
790+
__field(unsigned int, msg_id )
791+
),
792+
793+
TP_fast_assign(
794+
__entry->obj = obj ? obj->debug_id : 0;
795+
__entry->msg_id = msg_id;
796+
),
797+
798+
TP_printk("o=%08x mid=%x",
799+
__entry->obj,
800+
__entry->msg_id)
801+
);
802+
803+
TRACE_EVENT(cachefiles_ondemand_fd_write,
804+
TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
805+
loff_t start, size_t len),
806+
807+
TP_ARGS(obj, backer, start, len),
808+
809+
TP_STRUCT__entry(
810+
__field(unsigned int, obj )
811+
__field(unsigned int, backer )
812+
__field(loff_t, start )
813+
__field(size_t, len )
814+
),
815+
816+
TP_fast_assign(
817+
__entry->obj = obj ? obj->debug_id : 0;
818+
__entry->backer = backer->i_ino;
819+
__entry->start = start;
820+
__entry->len = len;
821+
),
822+
823+
TP_printk("o=%08x iB=%x s=%llx l=%zx",
824+
__entry->obj,
825+
__entry->backer,
826+
__entry->start,
827+
__entry->len)
828+
);
829+
830+
TRACE_EVENT(cachefiles_ondemand_fd_release,
831+
TP_PROTO(struct cachefiles_object *obj, int object_id),
832+
833+
TP_ARGS(obj, object_id),
834+
835+
TP_STRUCT__entry(
836+
__field(unsigned int, obj )
837+
__field(unsigned int, object_id )
838+
),
839+
840+
TP_fast_assign(
841+
__entry->obj = obj ? obj->debug_id : 0;
842+
__entry->object_id = object_id;
843+
),
844+
845+
TP_printk("o=%08x oid=%x",
846+
__entry->obj,
847+
__entry->object_id)
848+
);
849+
676850
#endif /* _TRACE_CACHEFILES_H */
677851

678852
/* This part must be outside protection */

0 commit comments

Comments
 (0)