Simplify sysfs helpers.

This commit is contained in:
Milan Broz
2013-06-30 09:04:00 +02:00
parent c3c65ee864
commit 99a2486b09
4 changed files with 15 additions and 21 deletions

View File

@@ -92,8 +92,8 @@ struct device *crypt_data_device(struct crypt_device *cd);
int crypt_confirm(struct crypt_device *cd, const char *msg); int crypt_confirm(struct crypt_device *cd, const char *msg);
char *crypt_lookup_dev(const char *dev_id); char *crypt_lookup_dev(const char *dev_id);
int crypt_sysfs_get_rotational(int major, int minor, int *rotational); int crypt_dev_is_rotational(int major, int minor);
int crypt_sysfs_get_partition(const char *dev_path, int *partition); int crypt_dev_is_partition(const char *dev_path);
ssize_t write_blockwise(int fd, int bsize, void *buf, size_t count); ssize_t write_blockwise(int fd, int bsize, void *buf, size_t count);
ssize_t read_blockwise(int fd, int bsize, void *_buf, size_t count); ssize_t read_blockwise(int fd, int bsize, void *_buf, size_t count);

View File

@@ -565,7 +565,7 @@ int TCRYPT_read_phdr(struct crypt_device *cd,
{ {
struct device *device = crypt_metadata_device(cd); struct device *device = crypt_metadata_device(cd);
ssize_t hdr_size = sizeof(struct tcrypt_phdr); ssize_t hdr_size = sizeof(struct tcrypt_phdr);
int devfd = 0, r, bs, partition; int devfd = 0, r, bs;
assert(sizeof(struct tcrypt_phdr) == 512); assert(sizeof(struct tcrypt_phdr) == 512);
@@ -587,9 +587,7 @@ int TCRYPT_read_phdr(struct crypt_device *cd,
if (lseek(devfd, TCRYPT_HDR_SYSTEM_OFFSET, SEEK_SET) >= 0 && if (lseek(devfd, TCRYPT_HDR_SYSTEM_OFFSET, SEEK_SET) >= 0 &&
read_blockwise(devfd, bs, hdr, hdr_size) == hdr_size) { read_blockwise(devfd, bs, hdr, hdr_size) == hdr_size) {
r = TCRYPT_init_hdr(cd, hdr, params); r = TCRYPT_init_hdr(cd, hdr, params);
if (r == -EPERM && if (r == -EPERM && crypt_dev_is_partition(device_path(device)))
crypt_sysfs_get_partition(device_path(device), &partition) &&
partition)
log_std(cd, _("WARNING: device %s is a partition, for TCRYPT " log_std(cd, _("WARNING: device %s is a partition, for TCRYPT "
"system encryption you usually need to use " "system encryption you usually need to use "
"whole block device path.\n"), device_path(device)); "whole block device path.\n"), device_path(device));

View File

@@ -193,18 +193,17 @@ static int _sysfs_get_uint64(int major, int minor, uint64_t *value, const char *
return 1; return 1;
} }
int crypt_sysfs_get_rotational(int major, int minor, int *rotational) int crypt_dev_is_rotational(int major, int minor)
{ {
uint64_t val; uint64_t val;
if (!_sysfs_get_uint64(major, minor, &val, "queue/rotational")) if (!_sysfs_get_uint64(major, minor, &val, "queue/rotational"))
return 0; return 1; /* if failed, expect rotational disk */
*rotational = val ? 1 : 0; return val ? 1 : 0;
return 1;
} }
int crypt_sysfs_get_partition(const char *dev_path, int *partition) int crypt_dev_is_partition(const char *dev_path)
{ {
uint64_t val; uint64_t val;
struct stat st; struct stat st;
@@ -219,6 +218,5 @@ int crypt_sysfs_get_partition(const char *dev_path, int *partition)
&val, "partition")) &val, "partition"))
return 0; return 0;
*partition = val ? 1 : 0; return val ? 1 : 0;
return 1;
} }

View File

@@ -124,7 +124,7 @@ int crypt_wipe(struct device *device,
{ {
struct stat st; struct stat st;
char *buffer; char *buffer;
int devfd, flags, rotational, bsize; int devfd, flags, bsize;
ssize_t written; ssize_t written;
if (!size || size % SECTOR_SIZE || (size > MAXIMUM_WIPE_BYTES)) { if (!size || size % SECTOR_SIZE || (size > MAXIMUM_WIPE_BYTES)) {
@@ -139,14 +139,12 @@ int crypt_wipe(struct device *device,
} }
if (type == CRYPT_WIPE_DISK && S_ISBLK(st.st_mode)) { if (type == CRYPT_WIPE_DISK && S_ISBLK(st.st_mode)) {
rotational = 0; if (!crypt_dev_is_rotational(major(st.st_rdev),
if (!crypt_sysfs_get_rotational(major(st.st_rdev), minor(st.st_rdev))) {
minor(st.st_rdev),
&rotational))
rotational = 1;
log_dbg("Rotational flag is %d.", rotational);
if (!rotational)
type = CRYPT_WIPE_SSD; type = CRYPT_WIPE_SSD;
log_dbg("Non-rotational device, using SSD wipe mode.");
} else
log_dbg("Rotational device, using normal wipe mode.");
} }
bsize = device_block_size(device); bsize = device_block_size(device);