diff --git a/drivers/staging/lustre/lustre/include/lprocfs_status.h b/drivers/staging/lustre/lustre/include/lprocfs_status.h index 2c6e5dc..c9b145f 100644 --- a/drivers/staging/lustre/lustre/include/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/lprocfs_status.h @@ -596,9 +596,6 @@ extern void lprocfs_remove(proc_dir_entry_t **root); extern void lprocfs_remove_proc_entry(const char *name, struct proc_dir_entry *parent); -extern proc_dir_entry_t *lprocfs_srch(proc_dir_entry_t *root, - const char *name); - extern int lprocfs_obd_setup(struct obd_device *obd, struct lprocfs_vars *list); extern int lprocfs_obd_cleanup(struct obd_device *obd); @@ -924,9 +921,6 @@ static inline void lprocfs_remove(proc_dir_entry_t **root) static inline void lprocfs_remove_proc_entry(const char *name, struct proc_dir_entry *parent) { return; } -static inline proc_dir_entry_t *lprocfs_srch(proc_dir_entry_t *head, - const char *name) -{ return 0; } static inline int lprocfs_obd_setup(struct obd_device *dev, struct lprocfs_vars *list) { return 0; } diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h index f6eaed8..317f928 100644 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h @@ -545,6 +545,9 @@ struct ldlm_namespace { /** Client side original connect flags supported by server. */ __u64 ns_orig_connect_flags; + /* namespace proc dir entry */ + struct proc_dir_entry *ns_proc_dir_entry; + /** * Position in global namespace list linking all namespaces on * the node. diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h index dade2fd..98fdb32 100644 --- a/drivers/staging/lustre/lustre/include/obd.h +++ b/drivers/staging/lustre/lustre/include/obd.h @@ -1060,6 +1060,7 @@ struct obd_device { struct lprocfs_stats *md_stats; proc_dir_entry_t *obd_proc_entry; + void *obd_proc_private; /* type private PDEs */ proc_dir_entry_t *obd_proc_exports_entry; proc_dir_entry_t *obd_svc_procroot; struct lprocfs_stats *obd_svc_stats; diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 8b575d2..99fd4d2 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -730,8 +730,7 @@ static int ldlm_pool_proc_init(struct ldlm_pool *pl) if (!var_name) RETURN(-ENOMEM); - parent_ns_proc = lprocfs_srch(ldlm_ns_proc_dir, - ldlm_ns_name(ns)); + parent_ns_proc = ns->ns_proc_dir_entry; if (parent_ns_proc == NULL) { CERROR("%s: proc entry is not initialized\n", ldlm_ns_name(ns)); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index 3bc7b25..8a89d64 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -301,15 +301,11 @@ LPROC_SEQ_FOPS(lprocfs_elc); void ldlm_namespace_proc_unregister(struct ldlm_namespace *ns) { - struct proc_dir_entry *dir; - - dir = lprocfs_srch(ldlm_ns_proc_dir, ldlm_ns_name(ns)); - if (dir == NULL) { + if (ns->ns_proc_dir_entry == NULL) CERROR("dlm namespace %s has no procfs dir?\n", ldlm_ns_name(ns)); - } else { - lprocfs_remove(&dir); - } + else + lprocfs_remove(&ns->ns_proc_dir_entry); if (ns->ns_stats != NULL) lprocfs_free_stats(&ns->ns_stats); @@ -319,10 +315,20 @@ int ldlm_namespace_proc_register(struct ldlm_namespace *ns) { struct lprocfs_vars lock_vars[2]; char lock_name[MAX_STRING_SIZE + 1]; + proc_dir_entry_t *ns_pde; LASSERT(ns != NULL); LASSERT(ns->ns_rs_hash != NULL); + if (ns->ns_proc_dir_entry != NULL) { + ns_pde = ns->ns_proc_dir_entry; + } else { + ns_pde = proc_mkdir(ldlm_ns_name(ns), ldlm_ns_proc_dir); + if (ns_pde == NULL) + return -ENOMEM; + ns->ns_proc_dir_entry = ns_pde; + } + ns->ns_stats = lprocfs_alloc_stats(LDLM_NSS_LAST, 0); if (ns->ns_stats == NULL) return -ENOMEM; @@ -335,78 +341,66 @@ int ldlm_namespace_proc_register(struct ldlm_namespace *ns) memset(lock_vars, 0, sizeof(lock_vars)); lock_vars[0].name = lock_name; - snprintf(lock_name, MAX_STRING_SIZE, "%s/resource_count", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "resource_count"); lock_vars[0].data = ns; lock_vars[0].fops = &lprocfs_ns_resources_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_count", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "lock_count"); lock_vars[0].data = ns; lock_vars[0].fops = &lprocfs_ns_locks_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); if (ns_is_client(ns)) { - snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_unused_count", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "lock_unused_count"); lock_vars[0].data = &ns->ns_nr_unused; lock_vars[0].fops = &ldlm_uint_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_size", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "lru_size"); lock_vars[0].data = ns; lock_vars[0].fops = &lprocfs_lru_size_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_max_age", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "lru_max_age"); lock_vars[0].data = &ns->ns_max_age; lock_vars[0].fops = &ldlm_rw_uint_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/early_lock_cancel", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "early_lock_cancel"); lock_vars[0].data = ns; lock_vars[0].fops = &lprocfs_elc_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); } else { - snprintf(lock_name, MAX_STRING_SIZE, "%s/ctime_age_limit", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "ctime_age_limit"); lock_vars[0].data = &ns->ns_ctime_age_limit; lock_vars[0].fops = &ldlm_rw_uint_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_timeouts", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "lock_timeouts"); lock_vars[0].data = &ns->ns_timeouts; lock_vars[0].fops = &ldlm_uint_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/max_nolock_bytes", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "max_nolock_bytes"); lock_vars[0].data = &ns->ns_max_nolock_size; lock_vars[0].fops = &ldlm_rw_uint_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/contention_seconds", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "contention_seconds"); lock_vars[0].data = &ns->ns_contention_time; lock_vars[0].fops = &ldlm_rw_uint_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/contended_locks", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "contended_locks"); lock_vars[0].data = &ns->ns_contended_locks; lock_vars[0].fops = &ldlm_rw_uint_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); - snprintf(lock_name, MAX_STRING_SIZE, "%s/max_parallel_ast", - ldlm_ns_name(ns)); + snprintf(lock_name, MAX_STRING_SIZE, "max_parallel_ast"); lock_vars[0].data = &ns->ns_max_parallel_ast; lock_vars[0].fops = &ldlm_rw_uint_fops; - lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); + lprocfs_add_vars(ns_pde, lock_vars, 0); } return 0; } diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c b/drivers/staging/lustre/lustre/llite/lproc_llite.c index f4b8774..aca863e 100644 --- a/drivers/staging/lustre/lustre/llite/lproc_llite.c +++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c @@ -870,6 +870,7 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, struct lustre_sb_info *lsi = s2lsi(sb); struct ll_sb_info *sbi = ll_s2sbi(sb); struct obd_device *obd; + proc_dir_entry_t *dir; char name[MAX_STRING_SIZE + 1], *ptr; int err, id, len, rc; ENTRY; @@ -969,16 +970,19 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC); LASSERT(obd->obd_type->typ_name != NULL); - snprintf(name, MAX_STRING_SIZE, "%s/common_name", - obd->obd_type->typ_name); + dir = proc_mkdir(obd->obd_type->typ_name, sbi->ll_proc_root); + if (dir == NULL) + GOTO(out, err = -ENOMEM); + + snprintf(name, MAX_STRING_SIZE, "common_name"); lvars[0].fops = &llite_name_fops; - err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd); + err = lprocfs_add_vars(dir, lvars, obd); if (err) GOTO(out, err); - snprintf(name, MAX_STRING_SIZE, "%s/uuid", obd->obd_type->typ_name); + snprintf(name, MAX_STRING_SIZE, "uuid"); lvars[0].fops = &llite_uuid_fops; - err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd); + err = lprocfs_add_vars(dir, lvars, obd); if (err) GOTO(out, err); @@ -989,16 +993,19 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC); LASSERT(obd->obd_type->typ_name != NULL); - snprintf(name, MAX_STRING_SIZE, "%s/common_name", - obd->obd_type->typ_name); + dir = proc_mkdir(obd->obd_type->typ_name, sbi->ll_proc_root); + if (dir == NULL) + GOTO(out, err = -ENOMEM); + + snprintf(name, MAX_STRING_SIZE, "common_name"); lvars[0].fops = &llite_name_fops; - err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd); + err = lprocfs_add_vars(dir, lvars, obd); if (err) GOTO(out, err); - snprintf(name, MAX_STRING_SIZE, "%s/uuid", obd->obd_type->typ_name); + snprintf(name, MAX_STRING_SIZE, "uuid"); lvars[0].fops = &llite_uuid_fops; - err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd); + err = lprocfs_add_vars(dir, lvars, obd); out: if (err) { lprocfs_remove(&sbi->ll_proc_root); diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c index 41d0bb4..fbe9eed 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c @@ -230,12 +230,19 @@ static int lmv_connect(const struct lu_env *env, if (data) lmv->conn_data = *data; - lmv_proc_dir = lprocfs_register("target_obds", obd->obd_proc_entry, - NULL, NULL); - if (IS_ERR(lmv_proc_dir)) { - CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.", - obd->obd_type->typ_name, obd->obd_name); - lmv_proc_dir = NULL; + LASSERT(obd->obd_proc_private = NULL); + + if (obd->obd_proc_private != NULL) { + lmv_proc_dir = obd->obd_proc_private; + } else { + lmv_proc_dir = lprocfs_register("target_obds", obd->obd_proc_entry, + NULL, NULL); + if (IS_ERR(lmv_proc_dir)) { + CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.", + obd->obd_type->typ_name, obd->obd_name); + lmv_proc_dir = NULL; + } + obd->obd_proc_private = lmv_proc_dir; } /* @@ -247,9 +254,9 @@ static int lmv_connect(const struct lu_env *env, if (data->ocd_connect_flags & OBD_CONNECT_REAL) rc = lmv_check_connect(obd); - if (rc) { - if (lmv_proc_dir) + if (rc && lmv_proc_dir) { lprocfs_remove(&lmv_proc_dir); + obd->obd_proc_private = NULL; } RETURN(rc); @@ -408,7 +415,7 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt) mdc_obd->obd_name, mdc_obd->obd_uuid.uuid, atomic_read(&obd->obd_refcount)); - lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds"); + lmv_proc_dir = obd->obd_proc_private; if (lmv_proc_dir) { struct proc_dir_entry *mdc_symlink; @@ -425,7 +432,7 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt) obd->obd_type->typ_name, obd->obd_name, mdc_obd->obd_name); lprocfs_remove(&lmv_proc_dir); - lmv_proc_dir = NULL; + obd->obd_proc_private = NULL; } } RETURN(0); @@ -626,19 +633,10 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt) mdc_obd->obd_no_recov = obd->obd_no_recov; } - lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds"); - if (lmv_proc_dir) { - struct proc_dir_entry *mdc_symlink; + lmv_proc_dir = obd->obd_proc_private; + if (lmv_proc_dir) + lprocfs_remove_proc_entry(mdc_obd->obd_name, lmv_proc_dir); - mdc_symlink = lprocfs_srch(lmv_proc_dir, mdc_obd->obd_name); - if (mdc_symlink) { - lprocfs_remove(&mdc_symlink); - } else { - CERROR("/proc/fs/lustre/%s/%s/target_obds/%s missing\n", - obd->obd_type->typ_name, obd->obd_name, - mdc_obd->obd_name); - } - } rc = obd_fid_fini(tgt->ltd_exp->exp_obd); if (rc) CERROR("Can't finanize fids factory\n"); @@ -664,7 +662,6 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt) static int lmv_disconnect(struct obd_export *exp) { struct obd_device *obd = class_exp2obd(exp); - struct proc_dir_entry *lmv_proc_dir; struct lmv_obd *lmv = &obd->u.lmv; int rc; int i; @@ -687,13 +684,11 @@ static int lmv_disconnect(struct obd_export *exp) lmv_disconnect_mdc(obd, lmv->tgts[i]); } - lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds"); - if (lmv_proc_dir) { - lprocfs_remove(&lmv_proc_dir); - } else { + if (obd->obd_proc_private) + lprocfs_remove((proc_dir_entry_t **)&obd->obd_proc_private); + else CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n", obd->obd_type->typ_name, obd->obd_name); - } out_local: /* diff --git a/drivers/staging/lustre/lustre/lov/lov_obd.c b/drivers/staging/lustre/lustre/lov/lov_obd.c index 8089f03..5c7ab42 100644 --- a/drivers/staging/lustre/lustre/lov/lov_obd.c +++ b/drivers/staging/lustre/lustre/lov/lov_obd.c @@ -191,7 +191,7 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate, CDEBUG(D_CONFIG, "Connected tgt idx %d %s (%s) %sactive\n", index, obd_uuid2str(tgt_uuid), tgt_obd->obd_name, activate ? "":"in"); - lov_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds"); + lov_proc_dir = obd->obd_proc_private; if (lov_proc_dir) { struct obd_device *osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd; proc_dir_entry_t *osc_symlink; @@ -211,6 +211,7 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate, obd->obd_type->typ_name, obd->obd_name, osc_obd->obd_name); lprocfs_remove(&lov_proc_dir); + obd->obd_proc_private = NULL; } } @@ -290,19 +291,9 @@ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt) tgt->ltd_exp->exp_obd->obd_inactive = 1; } - lov_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds"); - if (lov_proc_dir) { - proc_dir_entry_t *osc_symlink; - - osc_symlink = lprocfs_srch(lov_proc_dir, osc_obd->obd_name); - if (osc_symlink) { - lprocfs_remove(&osc_symlink); - } else { - CERROR("/proc/fs/lustre/%s/%s/target_obds/%s missing.", - obd->obd_type->typ_name, obd->obd_name, - osc_obd->obd_name); - } - } + lov_proc_dir = obd->obd_proc_private; + if (lov_proc_dir) + lprocfs_remove_proc_entry(osc_obd->obd_name, lov_proc_dir); if (osc_obd) { /* Pass it on to our clients. diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 3893ded..5e43f4a 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -66,16 +66,6 @@ int lprocfs_seq_release(struct inode *inode, struct file *file) } EXPORT_SYMBOL(lprocfs_seq_release); -struct proc_dir_entry *lprocfs_srch(struct proc_dir_entry *head, - const char *name) -{ - if (head == NULL) - return NULL; - - return proc_lookup_child_pde(head, name, strlen(name)); -} -EXPORT_SYMBOL(lprocfs_srch); - /* lprocfs API calls */ proc_dir_entry_t *lprocfs_add_simple(struct proc_dir_entry *root, @@ -125,15 +115,7 @@ struct proc_dir_entry *lprocfs_add_symlink(const char *name, } EXPORT_SYMBOL(lprocfs_add_symlink); -static int lprocfs_generic_open(struct inode *inode, struct file *file) -{ - return -EIO; -} - -static struct file_operations lprocfs_generic_fops = { - .owner = THIS_MODULE, - .open = lprocfs_generic_open, -}; +static struct file_operations lprocfs_generic_fops = { }; /** * Add /proc entries. @@ -149,76 +131,36 @@ static struct file_operations lprocfs_generic_fops = { int lprocfs_add_vars(struct proc_dir_entry *root, struct lprocfs_vars *list, void *data) { - int rc = 0; - if (root == NULL || list == NULL) return -EINVAL; while (list->name != NULL) { - struct proc_dir_entry *cur_root, *proc; - char *pathcopy, *cur, *next, pathbuf[64]; - int pathsize = strlen(list->name) + 1; - - proc = NULL; - cur_root = root; - - /* need copy of path for strsep */ - if (strlen(list->name) > sizeof(pathbuf) - 1) { - OBD_ALLOC(pathcopy, pathsize); - if (pathcopy == NULL) - GOTO(out, rc = -ENOMEM); - } else { - pathcopy = pathbuf; + struct proc_dir_entry *proc; + mode_t mode = 0; + + if (list->proc_mode != 0000) { + mode = list->proc_mode; + } else if (list->fops) { + if (list->fops->read) + mode = 0444; + if (list->fops->write) + mode |= 0200; } - - next = pathcopy; - strcpy(pathcopy, list->name); - - while (cur_root != NULL && (cur = strsep(&next, "/"))) { - if (*cur =='\0') /* skip double/trailing "/" */ - continue; - - proc = proc_lookup_child_pde(cur_root, cur, strlen(cur)); - CDEBUG(D_OTHER, "cur=%s, next=%s, (%s)\n", - cur, next, (proc ? "exists" : "new")); - if (next != NULL) { - cur_root = (proc ? proc : - proc_mkdir(cur, cur_root)); - } else if (proc == NULL) { - mode_t mode = 0; - if (list->proc_mode != 0000) { - mode = list->proc_mode; - } else if (list->fops) { - if (list->fops->read) - mode = 0444; - if (list->fops->write) - mode |= 0200; - } - proc = proc_create_data(cur, mode, cur_root, + proc = proc_create_data(list->name, mode, root, list->fops ?: &lprocfs_generic_fops, list->data ?: data); - } - } - - if (pathcopy != pathbuf) - OBD_FREE(pathcopy, pathsize); - - if (cur_root == NULL || proc == NULL) { - CERROR("LprocFS: No memory to create /proc entry %s", - list->name); - GOTO(out, rc = -ENOMEM); - } - + if (proc == NULL) + return -ENOMEM; list++; } -out: - return rc; + return 0; } EXPORT_SYMBOL(lprocfs_add_vars); void lprocfs_remove(struct proc_dir_entry **rooth) { proc_remove(*rooth); + *rooth = NULL; } EXPORT_SYMBOL(lprocfs_remove); @@ -235,13 +177,6 @@ struct proc_dir_entry *lprocfs_register(const char *name, { struct proc_dir_entry *newchild; - newchild = lprocfs_srch(parent, name); - if (newchild != NULL) { - CERROR(" Lproc: Attempting to register %s more than once \n", - name); - return ERR_PTR(-EALREADY); - } - newchild = proc_mkdir(name, parent); if (newchild != NULL && list != NULL) { int rc = lprocfs_add_vars(newchild, list, data);