Whamcloud - gitweb
LU-6147 lfsck: NOT purge object by OI scrub
[fs/lustre-release.git] / lustre / obdclass / lu_object.c
index 20c4393..3e17c05 100644 (file)
@@ -151,7 +151,8 @@ void lu_object_put(const struct lu_env *env, struct lu_object *o)
                         o->lo_ops->loo_object_release(env, o);
         }
 
-        if (!lu_object_is_dying(top)) {
+       if (!lu_object_is_dying(top) &&
+           (lu_object_exists(orig) || lu_object_is_cl(orig))) {
                LASSERT(list_empty(&top->loh_lru));
                list_add_tail(&top->loh_lru, &bkt->lsb_lru);
                 cfs_hash_bd_unlock(site->ls_obj_hash, &bd, 1);
@@ -615,31 +616,6 @@ static struct lu_object *htable_lookup(struct lu_site *s,
        return ERR_PTR(-EAGAIN);
 }
 
-static struct lu_object *htable_lookup_nowait(struct lu_site *s,
-                                             cfs_hash_bd_t *bd,
-                                             const struct lu_fid *f)
-{
-       struct hlist_node       *hnode;
-       struct lu_object_header *h;
-
-       /* cfs_hash_bd_peek_locked is a somehow "internal" function
-        * of cfs_hash, it doesn't add refcount on object. */
-       hnode = cfs_hash_bd_peek_locked(s->ls_obj_hash, bd, (void *)f);
-       if (hnode == NULL) {
-               lprocfs_counter_incr(s->ls_stats, LU_SS_CACHE_MISS);
-               return ERR_PTR(-ENOENT);
-       }
-
-       h = container_of0(hnode, struct lu_object_header, loh_hash);
-       if (unlikely(lu_object_is_dying(h)))
-               return ERR_PTR(-ENOENT);
-
-       cfs_hash_get(s->ls_obj_hash, hnode);
-       lprocfs_counter_incr(s->ls_stats, LU_SS_CACHE_HIT);
-       list_del_init(&h->loh_lru);
-       return lu_object_top(h);
-}
-
 /**
  * Search cache for an object with the fid \a f. If such object is found,
  * return it. Otherwise, create new object, insert it into cache and return
@@ -815,30 +791,6 @@ struct lu_object *lu_object_find_at(const struct lu_env *env,
 EXPORT_SYMBOL(lu_object_find_at);
 
 /**
- * Try to find the object in cache without waiting for the dead object
- * to be released nor allocating object if no cached one was found.
- *
- * The found object will be set as LU_OBJECT_HEARD_BANSHEE for purging.
- */
-void lu_object_purge(const struct lu_env *env, struct lu_device *dev,
-                    const struct lu_fid *f)
-{
-       struct lu_site          *s  = dev->ld_site;
-       cfs_hash_t              *hs = s->ls_obj_hash;
-       cfs_hash_bd_t            bd;
-       struct lu_object        *o;
-
-       cfs_hash_bd_get_and_lock(hs, f, &bd, 1);
-       o = htable_lookup_nowait(s, &bd, f);
-       cfs_hash_bd_unlock(hs, &bd, 1);
-       if (!IS_ERR(o)) {
-               set_bit(LU_OBJECT_HEARD_BANSHEE, &o->lo_header->loh_flags);
-               lu_object_put(env, o);
-       }
-}
-EXPORT_SYMBOL(lu_object_purge);
-
-/**
  * Find object with given fid, and return its slice belonging to given device.
  */
 struct lu_object *lu_object_find_slice(const struct lu_env *env,
@@ -2172,7 +2124,7 @@ void lu_global_fini(void)
 
 static __u32 ls_stats_read(struct lprocfs_stats *stats, int idx)
 {
-#ifdef LPROCFS
+#ifdef CONFIG_PROC_FS
         struct lprocfs_counter ret;
 
         lprocfs_stats_collect(stats, idx, &ret);