Merge git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
Pull ceph updates from Sage Weil: "There are some updates and cleanups to the CRUSH placement code, a bug fix with incremental maps, several cleanups and fixes from Josh Durgin in the RBD block device code, a series of cleanups and bug fixes from Alex Elder in the messenger code, and some miscellaneous bounds checking and gfp cleanups/fixes." Fix up trivial conflicts in net/ceph/{messenger.c,osdmap.c} due to the networking people preferring "unsigned int" over just "unsigned". * git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (45 commits) libceph: fix pg_temp updates libceph: avoid unregistering osd request when not registered ceph: add auth buf in prepare_write_connect() ceph: rename prepare_connect_authorizer() ceph: return pointer from prepare_connect_authorizer() ceph: use info returned by get_authorizer ceph: have get_authorizer methods return pointers ceph: ensure auth ops are defined before use ceph: messenger: reduce args to create_authorizer ceph: define ceph_auth_handshake type ceph: messenger: check return from get_authorizer ceph: messenger: rework prepare_connect_authorizer() ceph: messenger: check prepare_write_connect() result ceph: don't set WRITE_PENDING too early ceph: drop msgr argument from prepare_write_connect() ceph: messenger: send banner in process_connect() ceph: messenger: reset connection kvec caller libceph: don't reset kvec in prepare_write_banner() ceph: ignore preferred_osd field ceph: fully initialize new layout ...
This commit is contained in:
commit
af56e0aa35
23 changed files with 373 additions and 450 deletions
|
@ -161,13 +161,6 @@ static struct crush_map *crush_decode(void *pbyval, void *end)
|
|||
c->max_rules = ceph_decode_32(p);
|
||||
c->max_devices = ceph_decode_32(p);
|
||||
|
||||
c->device_parents = kcalloc(c->max_devices, sizeof(u32), GFP_NOFS);
|
||||
if (c->device_parents == NULL)
|
||||
goto badmem;
|
||||
c->bucket_parents = kcalloc(c->max_buckets, sizeof(u32), GFP_NOFS);
|
||||
if (c->bucket_parents == NULL)
|
||||
goto badmem;
|
||||
|
||||
c->buckets = kcalloc(c->max_buckets, sizeof(*c->buckets), GFP_NOFS);
|
||||
if (c->buckets == NULL)
|
||||
goto badmem;
|
||||
|
@ -890,8 +883,12 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
|
|||
pglen = ceph_decode_32(p);
|
||||
|
||||
if (pglen) {
|
||||
/* insert */
|
||||
ceph_decode_need(p, end, pglen*sizeof(u32), bad);
|
||||
|
||||
/* removing existing (if any) */
|
||||
(void) __remove_pg_mapping(&map->pg_temp, pgid);
|
||||
|
||||
/* insert */
|
||||
pg = kmalloc(sizeof(*pg) + sizeof(u32)*pglen, GFP_NOFS);
|
||||
if (!pg) {
|
||||
err = -ENOMEM;
|
||||
|
@ -1000,7 +997,6 @@ int ceph_calc_object_layout(struct ceph_object_layout *ol,
|
|||
{
|
||||
unsigned int num, num_mask;
|
||||
struct ceph_pg pgid;
|
||||
s32 preferred = (s32)le32_to_cpu(fl->fl_pg_preferred);
|
||||
int poolid = le32_to_cpu(fl->fl_pg_pool);
|
||||
struct ceph_pg_pool_info *pool;
|
||||
unsigned int ps;
|
||||
|
@ -1011,23 +1007,13 @@ int ceph_calc_object_layout(struct ceph_object_layout *ol,
|
|||
if (!pool)
|
||||
return -EIO;
|
||||
ps = ceph_str_hash(pool->v.object_hash, oid, strlen(oid));
|
||||
if (preferred >= 0) {
|
||||
ps += preferred;
|
||||
num = le32_to_cpu(pool->v.lpg_num);
|
||||
num_mask = pool->lpg_num_mask;
|
||||
} else {
|
||||
num = le32_to_cpu(pool->v.pg_num);
|
||||
num_mask = pool->pg_num_mask;
|
||||
}
|
||||
num = le32_to_cpu(pool->v.pg_num);
|
||||
num_mask = pool->pg_num_mask;
|
||||
|
||||
pgid.ps = cpu_to_le16(ps);
|
||||
pgid.preferred = cpu_to_le16(preferred);
|
||||
pgid.preferred = cpu_to_le16(-1);
|
||||
pgid.pool = fl->fl_pg_pool;
|
||||
if (preferred >= 0)
|
||||
dout("calc_object_layout '%s' pgid %d.%xp%d\n", oid, poolid, ps,
|
||||
(int)preferred);
|
||||
else
|
||||
dout("calc_object_layout '%s' pgid %d.%x\n", oid, poolid, ps);
|
||||
dout("calc_object_layout '%s' pgid %d.%x\n", oid, poolid, ps);
|
||||
|
||||
ol->ol_pgid = pgid;
|
||||
ol->ol_stripe_unit = fl->fl_object_stripe_unit;
|
||||
|
@ -1045,24 +1031,18 @@ static int *calc_pg_raw(struct ceph_osdmap *osdmap, struct ceph_pg pgid,
|
|||
struct ceph_pg_mapping *pg;
|
||||
struct ceph_pg_pool_info *pool;
|
||||
int ruleno;
|
||||
unsigned int poolid, ps, pps, t;
|
||||
int preferred;
|
||||
unsigned int poolid, ps, pps, t, r;
|
||||
|
||||
poolid = le32_to_cpu(pgid.pool);
|
||||
ps = le16_to_cpu(pgid.ps);
|
||||
preferred = (s16)le16_to_cpu(pgid.preferred);
|
||||
|
||||
pool = __lookup_pg_pool(&osdmap->pg_pools, poolid);
|
||||
if (!pool)
|
||||
return NULL;
|
||||
|
||||
/* pg_temp? */
|
||||
if (preferred >= 0)
|
||||
t = ceph_stable_mod(ps, le32_to_cpu(pool->v.lpg_num),
|
||||
pool->lpgp_num_mask);
|
||||
else
|
||||
t = ceph_stable_mod(ps, le32_to_cpu(pool->v.pg_num),
|
||||
pool->pgp_num_mask);
|
||||
t = ceph_stable_mod(ps, le32_to_cpu(pool->v.pg_num),
|
||||
pool->pgp_num_mask);
|
||||
pgid.ps = cpu_to_le16(t);
|
||||
pg = __lookup_pg_mapping(&osdmap->pg_temp, pgid);
|
||||
if (pg) {
|
||||
|
@ -1080,23 +1060,20 @@ static int *calc_pg_raw(struct ceph_osdmap *osdmap, struct ceph_pg pgid,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* don't forcefeed bad device ids to crush */
|
||||
if (preferred >= osdmap->max_osd ||
|
||||
preferred >= osdmap->crush->max_devices)
|
||||
preferred = -1;
|
||||
|
||||
if (preferred >= 0)
|
||||
pps = ceph_stable_mod(ps,
|
||||
le32_to_cpu(pool->v.lpgp_num),
|
||||
pool->lpgp_num_mask);
|
||||
else
|
||||
pps = ceph_stable_mod(ps,
|
||||
le32_to_cpu(pool->v.pgp_num),
|
||||
pool->pgp_num_mask);
|
||||
pps = ceph_stable_mod(ps,
|
||||
le32_to_cpu(pool->v.pgp_num),
|
||||
pool->pgp_num_mask);
|
||||
pps += poolid;
|
||||
*num = crush_do_rule(osdmap->crush, ruleno, pps, osds,
|
||||
min_t(int, pool->v.size, *num),
|
||||
preferred, osdmap->osd_weight);
|
||||
r = crush_do_rule(osdmap->crush, ruleno, pps, osds,
|
||||
min_t(int, pool->v.size, *num),
|
||||
osdmap->osd_weight);
|
||||
if (r < 0) {
|
||||
pr_err("error %d from crush rule: pool %d ruleset %d type %d"
|
||||
" size %d\n", r, poolid, pool->v.crush_ruleset,
|
||||
pool->v.type, pool->v.size);
|
||||
return NULL;
|
||||
}
|
||||
*num = r;
|
||||
return osds;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue