[Ocfs2-tools-devel] [PATCH 3/3] debugfs: Code cleanup

Tao Ma tao.ma at oracle.com
Thu May 8 23:46:01 PDT 2008


Signed-off-by: Tao Ma <tao.ma at oracle.com>

Sunil Mushran wrote:
> Consolidated code dealing with the debugfs fs to utils.c.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
> ---
>  debugfs.ocfs2/dump_dlm_locks.c |   74 ++-------------------------------------
>  debugfs.ocfs2/dump_fs_locks.c  |   74 ++-------------------------------------
>  debugfs.ocfs2/include/utils.h  |    7 +++-
>  debugfs.ocfs2/utils.c          |   70 ++++++++++++++++++++++++++++++++++++-
>  4 files changed, 81 insertions(+), 144 deletions(-)
> 
> diff --git a/debugfs.ocfs2/dump_dlm_locks.c b/debugfs.ocfs2/dump_dlm_locks.c
> index c7b964a..9b6e620 100644
> --- a/debugfs.ocfs2/dump_dlm_locks.c
> +++ b/debugfs.ocfs2/dump_dlm_locks.c
> @@ -416,91 +416,25 @@ static int get_next_dlm_lockname(FILE *file, char *name, int len)
>  	return 0;
>  }
>  
> -#define DEBUGFS_MAGIC   0x64626720
> -static errcode_t try_debugfs_path(const char *path)
> -{
> -	errcode_t ret;
> -	struct stat64 stat_buf;
> -	struct statfs64 statfs_buf;
> -
> -	ret = stat64(path, &stat_buf);
> -	if (ret || !S_ISDIR(stat_buf.st_mode))
> -		return O2CB_ET_SERVICE_UNAVAILABLE;
> -	ret = statfs64(path, &statfs_buf);
> -	if (ret || (statfs_buf.f_type != DEBUGFS_MAGIC))
> -		return O2CB_ET_SERVICE_UNAVAILABLE;
> -
> -	return 0;
> -}
> -
> -#define DLM_LOCKING_STATE_FORMAT_PATH "%s/o2dlm/%s/locking_state"
> -static errcode_t open_dlm_locking_state(const char *debugfs_path,
> -					const char *uuid_str,
> -					FILE **state_file)
> -{
> -	errcode_t ret = 0;
> -	char path[PATH_MAX];
> -
> -	ret = snprintf(path, PATH_MAX - 1, DLM_LOCKING_STATE_FORMAT_PATH,
> -		       debugfs_path, uuid_str);
> -	if ((ret <= 0) || (ret == (PATH_MAX - 1)))
> -		return O2CB_ET_INTERNAL_FAILURE;
> -
> -	*state_file = fopen(path, "r");
> -	if (!*state_file) {
> -		switch (errno) {
> -			default:
> -				ret = O2CB_ET_INTERNAL_FAILURE;
> -				break;
> -
> -			case ENOTDIR:
> -			case ENOENT:
> -			case EISDIR:
> -				ret = O2CB_ET_SERVICE_UNAVAILABLE;
> -				break;
> -
> -			case EACCES:
> -			case EPERM:
> -			case EROFS:
> -				ret = O2CB_ET_PERMISSION_DENIED;
> -				break;
> -		}
> -		goto out;
> -	}
> -
> -	ret = 0;
> -out:
> -	return ret;
> -}
> -
> -#define SYSFS_BASE		"/sys/kernel/"
> -#define DEBUGFS_PATH		SYSFS_BASE "debug"
> -#define DEBUGFS_ALTERNATE_PATH	"/debug"
> -
>  void dump_dlm_locks(char *uuid, FILE *out, int dump_lvbs,
>  		    struct list_head *locklist)
>  {
>  	errcode_t ret;
> -	int err;
> -	const char *debugfs_path = DEBUGFS_PATH;
> -	struct stat64 stat_buf;
> +	char debugfs_path[PATH_MAX];
>  	FILE *file;
>  	char name[OCFS2_LOCK_ID_MAX_LEN];
>  	struct lockres res;
>  	int show_all_locks = 0;
>  
> -	err = stat64(SYSFS_BASE, &stat_buf);
> -	if (err)
> -		debugfs_path = DEBUGFS_ALTERNATE_PATH;
> -
> -	ret = try_debugfs_path(debugfs_path);
> +	ret = get_debugfs_path(debugfs_path, sizeof(debugfs_path));
>  	if (ret) {
>  		fprintf(stderr, "Could not locate debugfs file system. "
>  			"Perhaps it is not mounted?\n");
>  		return;
>  	}
>  
> -	ret = open_dlm_locking_state(debugfs_path, uuid, &file);
> +	ret = open_debugfs_file(debugfs_path, "o2dlm", uuid, "locking_state",
> +				&file);
>  	if (ret) {
>  		fprintf(stderr, "Could not open debug state for \"%s\".\n"
>  			"Perhaps that OCFS2 file system is not mounted?\n",
> diff --git a/debugfs.ocfs2/dump_fs_locks.c b/debugfs.ocfs2/dump_fs_locks.c
> index c9f5a74..d03bb31 100644
> --- a/debugfs.ocfs2/dump_fs_locks.c
> +++ b/debugfs.ocfs2/dump_fs_locks.c
> @@ -349,87 +349,21 @@ static int dump_one_lockres(FILE *file, FILE *out, int lvbs, int only_busy)
>  	return ret;
>  }
>  
> -#define DEBUGFS_MAGIC   0x64626720
> -static errcode_t try_debugfs_path(const char *path)
> -{
> -	errcode_t ret;
> -	struct stat64 stat_buf;
> -	struct statfs64 statfs_buf;
> -
> -	ret = stat64(path, &stat_buf);
> -	if (ret || !S_ISDIR(stat_buf.st_mode))
> -		return O2CB_ET_SERVICE_UNAVAILABLE;
> -	ret = statfs64(path, &statfs_buf);
> -	if (ret || (statfs_buf.f_type != DEBUGFS_MAGIC))
> -		return O2CB_ET_SERVICE_UNAVAILABLE;
> -
> -	return 0;
> -}
> -
> -#define LOCKING_STATE_FORMAT_PATH "%s/ocfs2/%s/locking_state"
> -static errcode_t open_locking_state(const char *debugfs_path,
> -				    const char *uuid_str,
> -				    FILE **state_file)
> -{
> -	errcode_t ret = 0;
> -	char path[PATH_MAX];
> -
> -	ret = snprintf(path, PATH_MAX - 1, LOCKING_STATE_FORMAT_PATH,
> -		       debugfs_path, uuid_str);
> -	if ((ret <= 0) || (ret == (PATH_MAX - 1)))
> -		return O2CB_ET_INTERNAL_FAILURE;
> -
> -	*state_file = fopen(path, "r");
> -	if (!*state_file) {
> -		switch (errno) {
> -			default:
> -				ret = O2CB_ET_INTERNAL_FAILURE;
> -				break;
> -
> -			case ENOTDIR:
> -			case ENOENT:
> -			case EISDIR:
> -				ret = O2CB_ET_SERVICE_UNAVAILABLE;
> -				break;
> -
> -			case EACCES:
> -			case EPERM:
> -			case EROFS:
> -				ret = O2CB_ET_PERMISSION_DENIED;
> -				break;
> -		}
> -		goto out;
> -	}
> -
> -	ret = 0;
> -out:
> -	return ret;
> -}
> -
> -#define SYSFS_BASE		"/sys/kernel/"
> -#define DEBUGFS_PATH		SYSFS_BASE "debug"
> -#define DEBUGFS_ALTERNATE_PATH	"/debug"
> -
>  void dump_fs_locks(char *uuid_str, FILE *out, int dump_lvbs, int only_busy)
>  {
>  	errcode_t ret;
> -	int err;
> -	const char *debugfs_path = DEBUGFS_PATH;
> -	struct stat64 stat_buf;
> +	char debugfs_path[PATH_MAX];
>  	FILE *file;
>  
> -	err = stat64(SYSFS_BASE, &stat_buf);
> -	if (err)
> -		debugfs_path = DEBUGFS_ALTERNATE_PATH;
> -
> -	ret = try_debugfs_path(debugfs_path);
> +	ret = get_debugfs_path(debugfs_path, sizeof(debugfs_path));
>  	if (ret) {
>  		fprintf(stderr, "Could not locate debugfs file system. "
>  			"Perhaps it is not mounted?\n");
>  		return;
>  	}
>  
> -	ret = open_locking_state(debugfs_path, uuid_str, &file);
> +	ret = open_debugfs_file(debugfs_path, "ocfs2", uuid_str,
> +				"locking_state", &file);
>  	if (ret) {
>  		fprintf(stderr, "Could not open debug state for \"%s\".\n"
>  			"Perhaps that OCFS2 file system is not mounted?\n",
> diff --git a/debugfs.ocfs2/include/utils.h b/debugfs.ocfs2/include/utils.h
> index b5f0c0c..1d71c11 100644
> --- a/debugfs.ocfs2/include/utils.h
> +++ b/debugfs.ocfs2/include/utils.h
> @@ -3,7 +3,7 @@
>   *
>   * Function prototypes, macros, etc. for related 'C' files
>   *
> - * Copyright (C) 2004 Oracle.  All rights reserved.
> + * Copyright (C) 2004, 2008 Oracle.  All rights reserved.
>   *
>   * This program is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU General Public
> @@ -20,7 +20,6 @@
>   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
>   * Boston, MA 021110-1307, USA.
>   *
> - * Authors: Sunil Mushran
>   */
>  
>  #ifndef __UTILS_H__
> @@ -57,4 +56,8 @@ errcode_t rdump_inode(ocfs2_filesys *fs, uint64_t blkno, const char *name,
>  void crunch_strsplit(char **args);
>  void find_max_contig_free_bits(struct ocfs2_group_desc *gd, int *max_contig_free_bits);
>  
> +errcode_t get_debugfs_path(char *debugfs_path, int len);
> +errcode_t open_debugfs_file(const char *debugfs_path, const char *dirname,
> +			    const char *uuid, const char *filename, FILE **fd);
> +
>  #endif		/* __UTILS_H__ */
> diff --git a/debugfs.ocfs2/utils.c b/debugfs.ocfs2/utils.c
> index a980362..21d32f0 100644
> --- a/debugfs.ocfs2/utils.c
> +++ b/debugfs.ocfs2/utils.c
> @@ -3,7 +3,7 @@
>   *
>   * utility functions
>   *
> - * Copyright (C) 2004 Oracle.  All rights reserved.
> + * Copyright (C) 2004, 2008 Oracle.  All rights reserved.
>   *
>   * This program is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU General Public
> @@ -20,7 +20,6 @@
>   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
>   * Boston, MA 021110-1307, USA.
>   *
> - * Authors: Sunil Mushran
>   */
>  
>  #include "main.h"
> @@ -850,3 +849,70 @@ void find_max_contig_free_bits(struct ocfs2_group_desc *gd, int *max_contig_free
>  			*max_contig_free_bits = free_bits;
>  	}
>  }
> +
> +#define SYSFS_BASE		"/sys/kernel/"
> +#define DEBUGFS_PATH		SYSFS_BASE "debug"
> +#define DEBUGFS_ALTERNATE_PATH	"/debug"
> +#define DEBUGFS_MAGIC		0x64626720
> +errcode_t get_debugfs_path(char *debugfs_path, int len)
> +{
> +	errcode_t ret;
> +	int err;
> +	struct stat64 stat_buf;
> +	struct statfs64 statfs_buf;
> +	char *path = DEBUGFS_PATH;
> +
> +	err = stat64(SYSFS_BASE, &stat_buf);
> +	if (err)
> +		path = DEBUGFS_ALTERNATE_PATH;
> +
> +	ret = stat64(path, &stat_buf);
> +	if (ret || !S_ISDIR(stat_buf.st_mode))
> +		return O2CB_ET_SERVICE_UNAVAILABLE;
> +
> +	ret = statfs64(path, &statfs_buf);
> +	if (ret || (statfs_buf.f_type != DEBUGFS_MAGIC))
> +		return O2CB_ET_SERVICE_UNAVAILABLE;
> +
> +	strncpy(debugfs_path, path, len);
> +
> +	return 0;
> +}
> +
> +errcode_t open_debugfs_file(const char *debugfs_path, const char *dirname,
> +			    const char *uuid, const char *filename, FILE **fd)
> +{
> +	errcode_t ret = 0;
> +	char path[PATH_MAX];
> +
> +	ret = snprintf(path, PATH_MAX - 1, "%s/%s/%s/%s",
> +		       debugfs_path, dirname, uuid, filename);
> +	if ((ret <= 0) || (ret == (PATH_MAX - 1)))
> +		return O2CB_ET_INTERNAL_FAILURE;
> +
> +	*fd = fopen(path, "r");
> +	if (!*fd) {
> +		switch (errno) {
> +			default:
> +				ret = O2CB_ET_INTERNAL_FAILURE;
> +				break;
> +
> +			case ENOTDIR:
> +			case ENOENT:
> +			case EISDIR:
> +				ret = O2CB_ET_SERVICE_UNAVAILABLE;
> +				break;
> +
> +			case EACCES:
> +			case EPERM:
> +			case EROFS:
> +				ret = O2CB_ET_PERMISSION_DENIED;
> +				break;
> +		}
> +		goto out;
> +	}
> +
> +	ret = 0;
> +out:
> +	return ret;
> +}



More information about the Ocfs2-tools-devel mailing list