The only place the lrq_alloc spinlock is used in lmv is in
lmv_locate_tgt_rr(). The purpose here is presumably to protect
lmv_qos_rr_index from concurrent updates. This is a field that is
only tangentially related the the structure that holds the spinlock.
lmv_qos_rr_index is directly in 'struct lmv_obd' while lqr_alloc
is in struct lu_qos_rr which is in struct lu_qos, which is in lmv_obd.
As there is a spinlock in 'struct lmv_obd' (lmv_lock) it makes more
sense to use that to protect lmv_qos_rr_index. Then the entire
lu_qos_rr structure will be unused on the client and can be made
server-only.
Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I926e6d31ca0ee1cbfff9905192428e28485ed448
Reviewed-on: https://review.whamcloud.com/41949
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
ENTRY;
- spin_lock(&lmv->lmv_qos.lq_rr.lqr_alloc);
+ spin_lock(&lmv->lmv_lock);
for (i = 0; i < lmv->lmv_mdt_descs.ltd_tgts_size; i++) {
index = (i + lmv->lmv_qos_rr_index) %
lmv->lmv_mdt_descs.ltd_tgts_size;
*mdt = tgt->ltd_index;
lmv->lmv_qos_rr_index = (*mdt + 1) %
lmv->lmv_mdt_descs.ltd_tgts_size;
- spin_unlock(&lmv->lmv_qos.lq_rr.lqr_alloc);
+ spin_unlock(&lmv->lmv_lock);
RETURN(tgt);
}
- spin_unlock(&lmv->lmv_qos.lq_rr.lqr_alloc);
+ spin_unlock(&lmv->lmv_lock);
RETURN(ERR_PTR(-ENODEV));
}