1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Add dm_set_sysfs_dir to libdevmapper to set sysfs location.

Add dm_sysfs_dir to libdevmapper to retrieve sysfs location thas is set.
This commit is contained in:
Peter Rajnoha 2011-09-22 17:17:07 +00:00
parent 047e4cd2f5
commit 07e237d6f4
3 changed files with 38 additions and 8 deletions

View File

@ -1,5 +1,7 @@
Version 1.02.68 -
==================================
Add dm_sysfs_dir to libdevmapper to retrieve sysfs location thas is set.
Add dm_set_sysfs_dir to libdevmapper to set sysfs location.
Add --retry option for dmsetup remove to retry removal if not successful.
Add dm_task_retry_remove fn to use retry logic for device removal.
Remove unused passed parameters for _mirror_emit_segment_line().

View File

@ -255,6 +255,12 @@ void dm_task_update_nodes(void);
int dm_set_dev_dir(const char *dir);
const char *dm_dir(void);
/*
* Configure sysfs directory, /sys by default
*/
int dm_set_sysfs_dir(const char *dir);
const char *dm_sysfs_dir(void);
/*
* Determine whether a major number belongs to device-mapper or not.
*/

View File

@ -58,6 +58,7 @@ union semun
#endif
static char _dm_dir[PATH_MAX] = DEV_DIR DM_DIR;
static char _sysfs_dir[PATH_MAX] = "/sys/";
static int _verbose = 0;
static int _suspended_dev_counter = 0;
@ -1008,32 +1009,53 @@ void update_devs(void)
_pop_node_ops();
}
int dm_set_dev_dir(const char *dev_dir)
static int _canonicalize_and_set_dir(const char *src, const char *suffix, size_t max_len, char *dir)
{
size_t len;
const char *slash;
if (*dev_dir != '/') {
log_debug("Invalid dev_dir value, %s: "
"not an absolute name.", dev_dir);
if (*src != '/') {
log_debug("Invalid directory value, %s: "
"not an absolute name.", src);
return 0;
}
len = strlen(dev_dir);
slash = dev_dir[len-1] == '/' ? "" : "/";
len = strlen(src);
slash = src[len-1] == '/' ? "" : "/";
if (dm_snprintf(_dm_dir, sizeof _dm_dir, "%s%s%s", dev_dir, slash, DM_DIR) < 0) {
log_debug("Invalid dev_dir value, %s: name too long.", dev_dir);
if (dm_snprintf(dir, max_len, "%s%s%s", src, slash, suffix ? suffix : "") < 0) {
log_debug("Invalid directory value, %s: name too long.", src);
return 0;
}
return 1;
}
int dm_set_dev_dir(const char *dev_dir)
{
return _canonicalize_and_set_dir(dev_dir, DM_DIR, sizeof _dm_dir, _dm_dir);
}
const char *dm_dir(void)
{
return _dm_dir;
}
int dm_set_sysfs_dir(const char *sysfs_dir)
{
if (!sysfs_dir || !*sysfs_dir) {
_sysfs_dir[0] = '\0';
return 1;
}
else
return _canonicalize_and_set_dir(sysfs_dir, NULL, sizeof _sysfs_dir, _sysfs_dir);
}
const char *dm_sysfs_dir(void)
{
return _sysfs_dir;
}
int dm_mknodes(const char *name)
{
struct dm_task *dmt;