return rc;
}
-static inline void
-lov_tgt_decref(struct lov_obd *lov, struct lov_tgt_desc *tgt)
+static inline int
+lov_tgt_valid(struct lov_obd *lov, struct lov_tgt_desc *tgt, int gen)
{
- int do_wakeup = 0;
-
+ int rc = 0;
lov_tgts_lock(lov);
- if ((--tgt->ltd_refcount == 0) && (tgt->ltd_flags & LTD_DEL_PENDING)) {
- do_wakeup = 1;
- }
+ if (((gen == 0) || (gen == tgt->ltd_gen)) && (tgt->ltd_exp != NULL)) {
+ tgt->ltd_refcount++;
+ rc = 1;
+ }
lov_tgts_unlock(lov);
- if (do_wakeup)
- wake_up(&lov->lov_tgt_waitq);
+ return rc;
}
static inline void
-lov_tgt_incref(struct lov_obd *lov, struct lov_tgt_desc *tgt)
+lov_tgt_decref(struct lov_obd *lov, struct lov_tgt_desc *tgt)
{
- lov_tgts_lock(lov);
- ++tgt->ltd_refcount;
- lov_tgts_unlock(lov);
-}
+ int do_wakeup = 0;
-static inline int
-lov_tgt_pending(struct lov_obd *lov, struct lov_tgt_desc *tgt, int gen)
-{
- int rc = 0;
lov_tgts_lock(lov);
- if (((gen == 0) || (gen == tgt->ltd_gen)) &&
- (tgt->ltd_flags &(LTD_ACTIVE|LTD_DEL_PENDING)) == LTD_DEL_PENDING) {
- tgt->ltd_refcount++;
- rc = 1;
- }
+ if ((--tgt->ltd_refcount == 0) && (tgt->ltd_flags & LTD_DEL_PENDING)) {
+ do_wakeup = 1;
+ }
lov_tgts_unlock(lov);
- return rc;
+ if (do_wakeup)
+ wake_up(&lov->lov_tgt_waitq);
}
struct lov_async_page {