Whamcloud - gitweb
b=21871 Just cleanup export nid_stat while exp_refcount == 0.
[fs/lustre-release.git] / lustre / obdfilter / filter.c
index a731840..3570a30 100644 (file)
@@ -290,7 +290,6 @@ static int filter_export_stats_init(struct obd_device *obd,
 
         RETURN(0);
  clean:
-        lprocfs_exp_cleanup(exp);
         return rc;
 }
 
@@ -881,9 +880,7 @@ static int filter_init_server_data(struct obd_device *obd, struct file * filp)
                 exp->exp_connecting = 0;
                 exp->exp_in_recovery = 0;
                 cfs_spin_unlock(&exp->exp_lock);
-                cfs_spin_lock_bh(&obd->obd_processing_task_lock);
                 obd->obd_max_recoverable_clients++;
-                cfs_spin_unlock_bh(&obd->obd_processing_task_lock);
                 class_export_put(exp);
 
                 if (last_rcvd > le64_to_cpu(lsd->lsd_last_transno))
@@ -1487,8 +1484,8 @@ struct dentry *filter_fid2dentry(struct obd_device *obd,
         if (dir_dentry == NULL)
                 filter_parent_unlock(dparent);
         if (IS_ERR(dchild)) {
-                CERROR("%s: child lookup error %ld\n", obd->obd_name,
-                       PTR_ERR(dchild));
+                CERROR("%s: object "LPU64":"LPU64" lookup error: rc %ld\n",
+                       obd->obd_name, id, group, PTR_ERR(dchild));
                 RETURN(dchild);
         }
 
@@ -2042,6 +2039,7 @@ int filter_common_setup(struct obd_device *obd, struct lustre_cfg* lcfg,
         CFS_INIT_LIST_HEAD(&filter->fo_export_list);
         cfs_sema_init(&filter->fo_alloc_lock, 1);
         init_brw_stats(&filter->fo_filter_stats);
+        cfs_spin_lock_init(&filter->fo_flags_lock);
         filter->fo_read_cache = 1; /* enable read-only cache by default */
         filter->fo_writethrough_cache = 1; /* enable writethrough cache */
         filter->fo_readcache_max_filesize = FILTER_MAX_CACHE_SIZE;
@@ -2511,9 +2509,9 @@ static int filter_llog_connect(struct obd_export *exp,
               obd->obd_name, body->lgdc_logid.lgl_oid,
               body->lgdc_logid.lgl_oseq, body->lgdc_logid.lgl_ogen);
 
-        cfs_spin_lock_bh(&obd->obd_processing_task_lock);
+        cfs_spin_lock(&obd->u.filter.fo_flags_lock);
         obd->u.filter.fo_mds_ost_sync = 1;
-        cfs_spin_unlock_bh(&obd->obd_processing_task_lock);
+        cfs_spin_unlock(&obd->u.filter.fo_flags_lock);
         rc = llog_connect(ctxt, &body->lgdc_logid,
                           &body->lgdc_gen, NULL);
         llog_ctxt_put(ctxt);
@@ -2809,7 +2807,6 @@ static int filter_connect(const struct lu_env *env,
 cleanup:
         if (rc) {
                 class_disconnect(lexp);
-                lprocfs_exp_cleanup(lexp);
                 *exp = NULL;
         } else {
                 *exp = lexp;
@@ -3542,7 +3539,14 @@ static int filter_destroy_precreated(struct obd_export *exp, struct obdo *oa,
                 filter_set_last_id(filter, id, doa.o_seq);
                 rc = filter_update_last_objid(exp->exp_obd, doa.o_seq, 1);
         } else {
-                /* don't reuse orphan object, return last used objid */
+                /*
+                 * We have destroyed orphan objects, but don't want to reuse
+                 * them. Therefore we don't reset last_id to the last created
+                 * objects. Instead, we report back to the MDS the object id
+                 * of the last orphan, so that the MDS can restart allocating
+                 * objects from this id + 1 and thus skip the whole orphan
+                 * object id range
+                 */
                 oa->o_id = last;
                 rc = 0;
         }