File indexing completed on 2025-05-11 08:24:14
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 #ifdef HAVE_CONFIG_H
0037 #include "config.h"
0038 #endif
0039
0040 #include <rtems/blkdev.h>
0041
0042 #include <sys/stat.h>
0043 #include <fcntl.h>
0044 #include <unistd.h>
0045 #include <errno.h>
0046 #include <string.h>
0047
0048 void rtems_blkstats(const rtems_printer* printer, const char *device, bool reset)
0049 {
0050 int fd = open(device, O_RDONLY);
0051
0052 if (fd >= 0) {
0053 struct stat st;
0054 int rv;
0055
0056 rv = fstat(fd, &st);
0057 if (rv == 0) {
0058 if (S_ISBLK(st.st_mode)) {
0059 if (reset) {
0060 rv = rtems_disk_fd_reset_device_stats(fd);
0061 if (rv != 0) {
0062 rtems_printf(printer, "error: reset stats: %s\n", strerror(errno));
0063 }
0064 } else {
0065 uint32_t media_block_size = 0;
0066 uint32_t media_block_count = 0;
0067 uint32_t block_size = 0;
0068 rtems_blkdev_stats stats;
0069
0070 rtems_disk_fd_get_media_block_size(fd, &media_block_size);
0071 rtems_disk_fd_get_block_count(fd, &media_block_count);
0072 rtems_disk_fd_get_block_size(fd, &block_size);
0073
0074 rv = rtems_disk_fd_get_device_stats(fd, &stats);
0075 if (rv == 0) {
0076 rtems_blkdev_print_stats(
0077 &stats,
0078 media_block_size,
0079 media_block_count,
0080 block_size,
0081 printer
0082 );
0083 } else {
0084 rtems_printf(printer, "error: get stats: %s\n", strerror(errno));
0085 }
0086 }
0087 } else {
0088 rtems_printf(printer, "error: not a block device\n");
0089 }
0090 } else {
0091 rtems_printf(printer, "error: get file stats: %s\n", strerror(errno));
0092 }
0093
0094 rv = close(fd);
0095 if (rv != 0) {
0096 rtems_printf(printer, "error: close device: %s\n", strerror(errno));
0097 }
0098 } else {
0099 rtems_printf(printer, "error: open device: %s\n", strerror(errno));
0100 }
0101 }