libceph: switch to the new "osd blocklist add" command
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
0b98acd618
commit
1b05fae7f2
|
@ -896,8 +896,9 @@ bad:
|
|||
ceph_msg_dump(msg);
|
||||
}
|
||||
|
||||
int ceph_monc_blocklist_add(struct ceph_mon_client *monc,
|
||||
struct ceph_entity_addr *client_addr)
|
||||
static __printf(2, 0)
|
||||
int do_mon_command_vargs(struct ceph_mon_client *monc, const char *fmt,
|
||||
va_list ap)
|
||||
{
|
||||
struct ceph_mon_generic_request *req;
|
||||
struct ceph_mon_command *h;
|
||||
|
@ -925,28 +926,64 @@ int ceph_monc_blocklist_add(struct ceph_mon_client *monc,
|
|||
h->monhdr.session_mon_tid = 0;
|
||||
h->fsid = monc->monmap->fsid;
|
||||
h->num_strs = cpu_to_le32(1);
|
||||
len = sprintf(h->str, "{ \"prefix\": \"osd blacklist\", \
|
||||
\"blacklistop\": \"add\", \
|
||||
\"addr\": \"%pISpc/%u\" }",
|
||||
&client_addr->in_addr, le32_to_cpu(client_addr->nonce));
|
||||
len = vsprintf(h->str, fmt, ap);
|
||||
h->str_len = cpu_to_le32(len);
|
||||
send_generic_request(monc, req);
|
||||
mutex_unlock(&monc->mutex);
|
||||
|
||||
ret = wait_generic_request(req);
|
||||
if (!ret)
|
||||
/*
|
||||
* Make sure we have the osdmap that includes the blocklist
|
||||
* entry. This is needed to ensure that the OSDs pick up the
|
||||
* new blocklist before processing any future requests from
|
||||
* this client.
|
||||
*/
|
||||
ret = ceph_wait_for_latest_osdmap(monc->client, 0);
|
||||
|
||||
out:
|
||||
put_generic_request(req);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static __printf(2, 3)
|
||||
int do_mon_command(struct ceph_mon_client *monc, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
va_start(ap, fmt);
|
||||
ret = do_mon_command_vargs(monc, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ceph_monc_blocklist_add(struct ceph_mon_client *monc,
|
||||
struct ceph_entity_addr *client_addr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = do_mon_command(monc,
|
||||
"{ \"prefix\": \"osd blocklist\", \
|
||||
\"blocklistop\": \"add\", \
|
||||
\"addr\": \"%pISpc/%u\" }",
|
||||
&client_addr->in_addr,
|
||||
le32_to_cpu(client_addr->nonce));
|
||||
if (ret == -EINVAL) {
|
||||
/*
|
||||
* The monitor returns EINVAL on an unrecognized command.
|
||||
* Try the legacy command -- it is exactly the same except
|
||||
* for the name.
|
||||
*/
|
||||
ret = do_mon_command(monc,
|
||||
"{ \"prefix\": \"osd blacklist\", \
|
||||
\"blacklistop\": \"add\", \
|
||||
\"addr\": \"%pISpc/%u\" }",
|
||||
&client_addr->in_addr,
|
||||
le32_to_cpu(client_addr->nonce));
|
||||
}
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Make sure we have the osdmap that includes the blocklist
|
||||
* entry. This is needed to ensure that the OSDs pick up the
|
||||
* new blocklist before processing any future requests from
|
||||
* this client.
|
||||
*/
|
||||
return ceph_wait_for_latest_osdmap(monc->client, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(ceph_monc_blocklist_add);
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue