* return 0 on success
* return negative error on error
*/
-int64_t get_block_device_string_property(const char *devname, const char *property,
+int64_t get_block_device_string_property(const char *devname,
+ const char *property,
char *val, size_t maxlen)
{
- char basename[PATH_MAX], filename[PATH_MAX];
- int64_t r;
-
- r = get_block_device_base(devname, basename, sizeof(basename));
- if (r < 0)
- return r;
-
+ char filename[PATH_MAX];
snprintf(filename, sizeof(filename),
- "%s/sys/block/%s/%s", sandbox_dir, basename, property);
+ "%s/sys/block/%s/%s", sandbox_dir, devname, property);
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
if (r < 0) {
goto out_fail;
}
-
- rotational = block_device_is_rotational(path.c_str());
size = s;
+
+ char partition[1024], devname[1024];
+ r = get_device_by_fd(fd_buffered, partition, devname);
+ if (r < 0) {
+ derr << "unable to get device name for " << path << ": "
+ << cpp_strerror(r) << dendl;
+ goto out_fail;
+ }
+ rotational = block_device_is_rotational(devname);
} else {
size = st.st_size;
//regular file is rotational device