/* Keep a refcount of lov->tgt usage to prevent racing with addition/deletion.
Any function that expects lov_tgts to remain stationary must take a ref. */
-static void lov_getref(struct obd_device *obd)
+void lov_tgts_getref(struct obd_device *obd)
{
struct lov_obd *lov = &obd->u.lov;
static void __lov_del_obd(struct obd_device *obd, struct lov_tgt_desc *tgt);
-static void lov_putref(struct obd_device *obd)
+void lov_tgts_putref(struct obd_device *obd)
{
struct lov_obd *lov = &obd->u.lov;
if (data)
lov->lov_ocd = *data;
- obd_getref(obd);
+ lov_tgts_getref(obd);
for (i = 0; i < lov->desc.ld_tgt_count; i++) {
tgt = lov->lov_tgts[i];
obd->obd_name, rc);
}
}
- obd_putref(obd);
- RETURN(0);
+ lov_tgts_putref(obd);
+
+ RETURN(0);
}
static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
}
/* hold another ref so lov_del_obd() doesn't spin in putref each time */
- obd_getref(obd);
+ lov_tgts_getref(obd);
for (index = 0; index < lov->desc.ld_tgt_count; index++) {
if (lov->lov_tgts[index] && lov->lov_tgts[index]->ltd_exp) {
lov->lov_tgts[index]->ltd_gen);
}
}
- obd_putref(obd);
+ lov_tgts_putref(obd);
out:
rc = class_disconnect(exp); /* bz 9811 */
CDEBUG(D_INFO, "Searching in lov %p for uuid %s event(%d)\n",
lov, uuid->uuid, ev);
- obd_getref(obd);
+ lov_tgts_getref(obd);
for (index = 0; index < lov->desc.ld_tgt_count; index++) {
tgt = lov->lov_tgts[index];
if (!tgt)
}
out:
- obd_putref(obd);
+ lov_tgts_putref(obd);
RETURN(index);
}
RETURN(0);
}
- obd_getref(obd);
+ lov_tgts_getref(obd);
rc = lov_connect_obd(obd, index, active, &lov->lov_ocd);
if (rc)
obd->obd_name, obd_uuid2str(&tgt->ltd_uuid), rc);
lov_del_target(obd, index, NULL, 0);
}
- obd_putref(obd);
+ lov_tgts_putref(obd);
RETURN(rc);
}
/* to make sure there's no ongoing lov_notify() now */
down_write(&lov->lov_notify_lock);
- obd_getref(obd);
+ lov_tgts_getref(obd);
if (!lov->lov_tgts[index]) {
CERROR("LOV target at index %d is not setup.\n", index);
lov->lov_tgts[index]->ltd_reap = 1;
lov->lov_death_row++;
- /* we really delete it from obd_putref */
+ /* we really delete it from lov_tgts_putref() */
out:
- obd_putref(obd);
+ lov_tgts_putref(obd);
up_write(&lov->lov_notify_lock);
- RETURN(rc);
+ RETURN(rc);
}
static void __lov_del_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
lprocfs_obd_cleanup(obd);
if (lov->lov_tgts) {
int i;
- obd_getref(obd);
+ lov_tgts_getref(obd);
for (i = 0; i < lov->desc.ld_tgt_count; i++) {
if (!lov->lov_tgts[i])
continue;
atomic_read(&lov->lov_refcount));
lov_del_target(obd, i, NULL, 0);
}
- obd_putref(obd);
+ lov_tgts_putref(obd);
OBD_FREE(lov->lov_tgts, sizeof(*lov->lov_tgts) *
lov->lov_tgt_size);
lov->lov_tgt_size = 0;
if (vallen == NULL || val == NULL)
RETURN(-EFAULT);
- obd_getref(obddev);
+ lov_tgts_getref(obddev);
if (KEY_IS(KEY_MAX_EASIZE)) {
u32 max_stripe_count = min_t(u32, ld->ld_active_tgt_count,
rc = -EINVAL;
}
- obd_putref(obddev);
+ lov_tgts_putref(obddev);
RETURN(rc);
}
RETURN(-ENOMEM);
}
- obd_getref(obddev);
+ lov_tgts_getref(obddev);
if (KEY_IS(KEY_CHECKSUM)) {
do_inactive = true;
rc = err;
}
- obd_putref(obddev);
+ lov_tgts_putref(obddev);
if (no_set) {
err = ptlrpc_set_wait(set);
if (rc == 0)
}
/* for lov tgt */
- obd_getref(obd);
+ lov_tgts_getref(obd);
for (i = 0; i < lov->desc.ld_tgt_count; i++) {
int err;
bhardlimit += oqctl->qc_dqblk.dqb_bhardlimit;
}
}
- obd_putref(obd);
+ lov_tgts_putref(obd);
if (oqctl->qc_cmd == Q_GETOQUOTA) {
oqctl->qc_dqblk.dqb_curspace = curspace;
.o_pool_rem = lov_pool_remove,
.o_pool_add = lov_pool_add,
.o_pool_del = lov_pool_del,
- .o_getref = lov_getref,
- .o_putref = lov_putref,
.o_quotactl = lov_quotactl,
};
LPROCFS_OBD_OP_INIT(num_private_stats, stats, quotactl);
LPROCFS_OBD_OP_INIT(num_private_stats, stats, ping);
LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_new);
- LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_rem);
- LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_add);
LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_del);
- LPROCFS_OBD_OP_INIT(num_private_stats, stats, getref);
- LPROCFS_OBD_OP_INIT(num_private_stats, stats, putref);
+ LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_add);
+ LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_rem);
- CLASSERT(NUM_OBD_STATS == OBD_COUNTER_OFFSET(putref) + 1);
+ CLASSERT(NUM_OBD_STATS == OBD_COUNTER_OFFSET(pool_rem) + 1);
}
EXPORT_SYMBOL(lprocfs_init_ops_stats);