File: disk.c

package info (click to toggle)
diskscan 0.20-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 1,664 kB
  • ctags: 1,342
  • sloc: ansic: 11,136; python: 338; xml: 138; sh: 41; makefile: 34
file content (42 lines) | stat: -rw-r--r-- 1,103 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "disk.h"

#include "libscsicmd/include/ata.h"

int disk_smart_trip(disk_dev_t *dev)
{
	int cdb_len;
	unsigned char cdb[32];
	unsigned char buf[512];
	unsigned char sense[128];
	unsigned buf_read = 0;
	unsigned sense_read = 0;
	io_result_t io_res;
	bool smart_ok;

	cdb_len = cdb_ata_smart_return_status(cdb);
	disk_dev_cdb_in(dev, cdb, cdb_len, buf, sizeof(buf), &buf_read, sense, sizeof(sense), &sense_read, &io_res);
	if (!ata_smart_return_status_result(sense, sense_read, &smart_ok))
		return -1;

	return smart_ok ? 0 : 1;
}

int disk_smart_attributes(disk_dev_t *dev, ata_smart_attr_t *attrs, int max_attrs)
{
	int cdb_len;
	unsigned char cdb[32];
	unsigned char buf[512];
	unsigned char sense[128];
	unsigned buf_read = 0;
	unsigned sense_read = 0;
	io_result_t io_res;

	cdb_len = cdb_ata_smart_read_data(cdb);
	disk_dev_cdb_in(dev, cdb, cdb_len, buf, sizeof(buf), &buf_read, sense, sizeof(sense), &sense_read, &io_res);

	// TODO: Need to report about the SMART failure, once.
	if (io_res.data != DATA_FULL)
		return -1;

	return ata_parse_ata_smart_read_data(buf, attrs, max_attrs);
}