(root)/
strace-6.5/
src/
cachestat.c
       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  }