From 11be34757be278c7a6f9790a1be49b570f638be3 Mon Sep 17 00:00:00 2001 From: wangdi Date: Thu, 18 Aug 2005 07:54:27 +0000 Subject: [PATCH] Branch: HEAD serval fix about ost add/del, after landing, which will fix some memory leak --- lustre/lov/lov_internal.h | 8 -------- lustre/lov/lov_obd.c | 25 +++++++++++++++---------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/lustre/lov/lov_internal.h b/lustre/lov/lov_internal.h index 1b1211b..5aec901 100644 --- a/lustre/lov/lov_internal.h +++ b/lustre/lov/lov_internal.h @@ -142,14 +142,6 @@ lov_tgt_decref(struct lov_obd *lov, struct lov_tgt_desc *tgt) wake_up(&lov->lov_tgt_waitq); } -static inline void -lov_tgt_incref(struct lov_obd *lov, struct lov_tgt_desc *tgt) -{ - lov_tgts_lock(lov); - ++tgt->ltd_refcount; - lov_tgts_unlock(lov); -} - static inline int lov_tgt_pending(struct lov_obd *lov, struct lov_tgt_desc *tgt, int gen) { diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c index a986ea6..ca4524ea 100644 --- a/lustre/lov/lov_obd.c +++ b/lustre/lov/lov_obd.c @@ -1506,8 +1506,9 @@ static int lov_queue_async_io(struct obd_export *exp, loi = &lsm->lsm_oinfo[lap->lap_stripe]; tgt = lov->tgts + loi->loi_ost_idx; - if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen)) - RETURN(-EIO); + if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen) && + !lov_tgt_pending(lov, tgt, loi->loi_ost_gen)) + RETURN(-EIO); rc = obd_queue_async_io(tgt->ltd_exp, lsm, loi, lap->lap_sub_cookie, cmd, off, count, brw_flags, async_flags); @@ -1535,9 +1536,10 @@ static int lov_set_async_flags(struct obd_export *exp, loi = &lsm->lsm_oinfo[lap->lap_stripe]; tgt = lov->tgts + loi->loi_ost_idx; - if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen)) - RETURN(-EIO); - + if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen) && + !lov_tgt_pending(lov, tgt, loi->loi_ost_gen)) + RETURN(-EIO); + rc = obd_set_async_flags(tgt->ltd_exp, lsm, loi, lap->lap_sub_cookie, async_flags); @@ -1566,8 +1568,9 @@ static int lov_queue_group_io(struct obd_export *exp, loi = &lsm->lsm_oinfo[lap->lap_stripe]; tgt = lov->tgts + loi->loi_ost_idx; - if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen)) - RETURN(-EIO); + if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen) && + !lov_tgt_pending(lov, tgt, loi->loi_ost_gen)) + RETURN(-EIO); rc = obd_queue_group_io(tgt->ltd_exp, lsm, loi, oig, lap->lap_sub_cookie, cmd, off, count, @@ -1636,8 +1639,6 @@ static int lov_teardown_async_page(struct obd_export *exp, !lov_tgt_pending(lov, tgt, loi->loi_ost_gen)) RETURN(-EIO); - lov_tgt_incref(lov,tgt); - rc = obd_teardown_async_page(tgt->ltd_exp, lsm, loi, lap->lap_sub_cookie); lov_tgt_decref(lov, tgt); @@ -1769,7 +1770,11 @@ static int lov_change_cbdata(struct obd_export *exp, struct lov_tgt_desc *tgt = lov->tgts + loi->loi_ost_idx; struct lov_stripe_md submd; - lov_tgt_incref(lov, tgt); + if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen) && + !lov_tgt_pending(lov, tgt, loi->loi_ost_gen)) { + continue; + } + submd.lsm_object_id = loi->loi_id; submd.lsm_object_gr = lsm->lsm_object_gr; submd.lsm_stripe_count = 0; -- 1.8.3.1