From: adilger Date: Sat, 3 Apr 2004 19:28:33 +0000 (+0000) Subject: NULL the filter arrays as they are freed to avoid potential problems on cleanup. X-Git-Tag: v1_8_0_110~486^6~24 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=4b02d1122b648b5b3756dd55c223876db601a548;p=fs%2Flustre-release.git NULL the filter arrays as they are freed to avoid potential problems on cleanup. r=phil --- diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c index 3aba19a..34bc865 100644 --- a/lustre/obdfilter/filter.c +++ b/lustre/obdfilter/filter.c @@ -520,48 +520,51 @@ err_fsd: static int filter_cleanup_groups(struct obd_device *obd) { struct filter_obd *filter = &obd->u.filter; + struct file *filp; + struct dentry *dentry; int i; ENTRY; - if (filter->fo_dentry_O_groups != NULL && - filter->fo_last_objids != NULL && - filter->fo_last_objid_files != NULL) { + if (filter->fo_dentry_O_groups != NULL) { for (i = 0; i < FILTER_GROUPS; i++) { - struct dentry *dentry = filter->fo_dentry_O_groups[i]; - struct file *filp = filter->fo_last_objid_files[i]; - if (dentry != NULL) { + dentry = filter->fo_dentry_O_groups[i]; + if (dentry != NULL) f_dput(dentry); - filter->fo_dentry_O_groups[i] = NULL; - } - if (filp != NULL) { + } + OBD_FREE(filter->fo_dentry_O_groups, + FILTER_GROUPS * sizeof(struct dentry *)); + filter->fo_dentry_O_groups = NULL; + } + if (filter->fo_last_objid_files != NULL) { + for (i = 0; i < FILTER_GROUPS; i++) { + filp = filter->fo_last_objid_files[i]; + if (filp != NULL) filp_close(filp, 0); - filter->fo_last_objid_files[i] = NULL; - } } + OBD_FREE(filter->fo_last_objid_files, + FILTER_GROUPS * sizeof(struct file *)); + filter->fo_last_objid_files = NULL; } if (filter->fo_dentry_O_sub != NULL && filter->fo_subdir_count) { for (i = 0; i < filter->fo_subdir_count; i++) { - struct dentry *dentry = filter->fo_dentry_O_sub[i]; - if (dentry != NULL) { + dentry = filter->fo_dentry_O_sub[i]; + if (dentry != NULL) f_dput(dentry); - filter->fo_dentry_O_sub[i] = NULL; - } } OBD_FREE(filter->fo_dentry_O_sub, filter->fo_subdir_count * sizeof(*filter->fo_dentry_O_sub)); + filter->fo_dentry_O_sub = NULL; } - if (filter->fo_dentry_O_groups != NULL) - OBD_FREE(filter->fo_dentry_O_groups, - FILTER_GROUPS * sizeof(struct dentry *)); - if (filter->fo_last_objids != NULL) + if (filter->fo_last_objids != NULL) { OBD_FREE(filter->fo_last_objids, FILTER_GROUPS * sizeof(__u64)); - if (filter->fo_last_objid_files != NULL) - OBD_FREE(filter->fo_last_objid_files, - FILTER_GROUPS * sizeof(struct file *)); - if (filter->fo_dentry_O != NULL) + filter->fo_last_objids = NULL; + } + if (filter->fo_dentry_O != NULL) { f_dput(filter->fo_dentry_O); + filter->fo_dentry_O = NULL; + } RETURN(0); }