Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5907838a authored by John L. Hammond's avatar John L. Hammond Committed by Greg Kroah-Hartman
Browse files

staging/lustre/procfs: return -ENOMEM from lprocfs_register()

In lprocfs_register(), if proc_mkdir() fails then return
ERR_PTR(-ENOMEM) rather than NULL and hold _lprocfs_mutex for the
whole function.  In lprocfs_remove_nolock() return early if the entry
is an error pointer. Improve error handling around lprocfs_register()
in a few spots.

Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2650
Lustre-change: http://review.whamcloud.com/5161


Signed-off-by: default avatarJohn L. Hammond <john.hammond@intel.com>
Reviewed-by: default avatarEmoly Liu <emoly.liu@intel.com>
Reviewed-by: default avatarKeith Mannthey <keith.mannthey@intel.com>
Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Signed-off-by: default avatarPeng Tao <tao.peng@emc.com>
Signed-off-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e62e5d92
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -750,6 +750,7 @@ static int ldlm_pool_proc_init(struct ldlm_pool *pl)
	if (IS_ERR(pl->pl_proc_dir)) {
		CERROR("LProcFS failed in ldlm-pool-init\n");
		rc = PTR_ERR(pl->pl_proc_dir);
		pl->pl_proc_dir = NULL;
		GOTO(out_free_name, rc);
	}

+1 −1
Original line number Diff line number Diff line
@@ -214,7 +214,7 @@ static void __exit exit_lustre_lite(void)
	ll_remote_perm_cachep = NULL;

	kmem_cache_destroy(ll_file_data_slab);
	if (proc_lustre_fs_root)
	if (proc_lustre_fs_root && !IS_ERR(proc_lustre_fs_root))
		lprocfs_remove(&proc_lustre_fs_root);
}

+3 −3
Original line number Diff line number Diff line
@@ -836,11 +836,11 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
	lprocfs_obd_setup(obd, lvars.obd_vars);
#ifdef LPROCFS
	{
		int rc;
		int rc1;

		rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
		rc1 = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
					0444, &lov_proc_target_fops, obd);
		if (rc)
		if (rc1)
			CWARN("Error adding the target_obd file\n");
	}
#endif
+8 −1
Original line number Diff line number Diff line
@@ -385,14 +385,21 @@ struct file_operations obd_device_list_fops = {

int class_procfs_init(void)
{
	int rc;
	int rc = 0;
	ENTRY;

	obd_sysctl_init();
	proc_lustre_root = lprocfs_register("fs/lustre", NULL,
					    lprocfs_base, NULL);
	if (IS_ERR(proc_lustre_root)) {
		rc = PTR_ERR(proc_lustre_root);
		proc_lustre_root = NULL;
		goto out;
	}

	rc = lprocfs_seq_create(proc_lustre_root, "devices", 0444,
				&obd_device_list_fops, NULL);
out:
	if (rc)
		CERROR("error adding /proc/fs/lustre/devices file\n");
	RETURN(0);
+17 −11
Original line number Diff line number Diff line
@@ -179,17 +179,21 @@ struct proc_dir_entry *lprocfs_register(const char *name,
					struct proc_dir_entry *parent,
					struct lprocfs_vars *list, void *data)
{
	struct proc_dir_entry *newchild;
	struct proc_dir_entry *entry;

	entry = proc_mkdir(name, parent);
	if (entry == NULL)
		GOTO(out, entry = ERR_PTR(-ENOMEM));

	newchild = proc_mkdir(name, parent);
	if (newchild != NULL && list != NULL) {
		int rc = lprocfs_add_vars(newchild, list, data);
		if (rc) {
			lprocfs_remove(&newchild);
			return ERR_PTR(rc);
	if (list != NULL) {
		int rc = lprocfs_add_vars(entry, list, data);
		if (rc != 0) {
			lprocfs_remove(&entry);
			entry = ERR_PTR(rc);
		}
	}
	return newchild;
out:
	return entry;
}
EXPORT_SYMBOL(lprocfs_register);

@@ -1596,10 +1600,12 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid)
					      NULL, NULL);
	OBD_FREE(buffer, LNET_NIDSTR_SIZE);

	if (new_stat->nid_proc == NULL) {
	if (IS_ERR(new_stat->nid_proc)) {
		CERROR("Error making export directory for nid %s\n",
		       libcfs_nid2str(*nid));
		GOTO(destroy_new_ns, rc = -ENOMEM);
		rc = PTR_ERR(new_stat->nid_proc);
		new_stat->nid_proc = NULL;
		GOTO(destroy_new_ns, rc);
	}

	entry = lprocfs_add_simple(new_stat->nid_proc, "uuid",
Loading