1 /*
2 * Copyright (c) 2023 Dmitry V. Levin <ldv@strace.io>
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6 */
7
8 #include "defs.h"
9 #include "cachestat.h"
10
11 SYS_FUNC(cachestat)
12 {
13 const int fd = tcp->u_arg[0];
14 const kernel_ulong_t range_addr = tcp->u_arg[1];
15 const kernel_ulong_t stat_addr = tcp->u_arg[2];
16 const unsigned int flags = tcp->u_arg[3];
17
18 if (entering(tcp)) {
19 printfd(tcp, fd);
20 tprint_arg_next();
21
22 struct cachestat_range crange;
23 if (!umove_or_printaddr(tcp, range_addr, &crange)) {
24 tprint_struct_begin();
25 PRINT_FIELD_X(crange, off);
26 tprint_struct_next();
27 PRINT_FIELD_U(crange, len);
28 tprint_struct_end();
29 }
30 tprint_arg_next();
31 } else {
32 struct cachestat cstat;
33 if (!umove_or_printaddr(tcp, stat_addr, &cstat)) {
34 tprint_struct_begin();
35 PRINT_FIELD_U(cstat, nr_cache);
36 tprint_struct_next();
37 PRINT_FIELD_U(cstat, nr_dirty);
38 tprint_struct_next();
39 PRINT_FIELD_U(cstat, nr_writeback);
40 tprint_struct_next();
41 PRINT_FIELD_U(cstat, nr_evicted);
42 tprint_struct_next();
43 PRINT_FIELD_U(cstat, nr_recently_evicted);
44 tprint_struct_end();
45 }
46 tprint_arg_next();
47
48 PRINT_VAL_X(flags);
49 }
50
51 return 0;
52 }