[lvm-devel] [PATCH 4/7][retry remove] Add new "dm_device_has_holders" fn to libdm

Zdenek Kabelac zkabelac at redhat.com
Tue Sep 20 13:10:10 UTC 2011


Dne 20.9.2011 14:57, Peter Rajnoha napsal(a):
> This is a helper function used both in libdevmapper and in LVM
> to test whether there are any devices that make use of certain
> device given as parameter (this will partially replace "open_count"
> check, see the following patch...).
> 
> Peter
> ---
>  libdm/libdevmapper.h |    6 ++++++
>  libdm/libdm-common.c |   36 ++++++++++++++++++++++++++++++++++++
>  2 files changed, 42 insertions(+), 0 deletions(-)
> 
> diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
> index ae39262..9df34bb 100644
> --- a/libdm/libdevmapper.h
> +++ b/libdm/libdevmapper.h
> @@ -267,6 +267,12 @@ const char *dm_sysfs_dir(void);
>  int dm_is_dm_major(uint32_t major);
>  
>  /*
> + * Determine whether a device has holders.
> + * (this requires sysfs directory to be configured via dm_set_sysfs_dir)
> + */
> +int dm_device_has_holders(uint32_t major, uint32_t minor);
> +
> +/*
>   * Release library resources
>   */
>  void dm_lib_release(void);
> diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c
> index 7517fb1..7ea78af 100644
> --- a/libdm/libdm-common.c
> +++ b/libdm/libdm-common.c
> @@ -1051,6 +1051,42 @@ const char *dm_sysfs_dir(void)
>  	return _sysfs_dir;
>  }
>  
> +static int _is_empty_dir(const char *dir)
> +{
> +	struct dirent *dirent;
> +	DIR *d;
> +
> +	if (!(d = opendir(dir))) {
> +		log_sys_error("opendir", dir);
> +		return 0;
> +	}
> +
> +	while ((dirent = readdir(d)))
> +		if (strcmp(dirent->d_name, ".") && strcmp(dirent->d_name, ".."))
> +			break;

Hmm since  readdir() may return -1 - this looks like error check is missing
here. And since it's copy from  lvm-file.c  - maybe generic  dm_is_empty_dir
with all log_error code inside might be useful.

Zdenek




More information about the lvm-devel mailing list