Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: ceph: ensure prealloc_blob is in place when removing xattr rbd: initialize snap_rwsem in rbd_add() ceph: enable/disable dentry complete flags via mount option vfs: export symbol d_find_any_alias() ceph: always initialize the dentry in open_root_dentry() libceph: remove useless return value for osd_client __send_request() ceph: avoid iput() while holding spinlock in ceph_dir_fsync ceph: avoid useless dget/dput in encode_fh ceph: dereference pointer after checking for NULL crush: fix force for non-root TAKE ceph: remove unnecessary d_fsdata conditional checks ceph: Use kmemdup rather than duplicating its implementation Fix up conflicts in fs/ceph/super.c (d_alloc_root() failure handling vs always initialize the dentry in open_root_dentry)
这个提交包含在:
@@ -510,10 +510,15 @@ int crush_do_rule(struct crush_map *map,
|
||||
switch (rule->steps[step].op) {
|
||||
case CRUSH_RULE_TAKE:
|
||||
w[0] = rule->steps[step].arg1;
|
||||
if (force_pos >= 0) {
|
||||
BUG_ON(force_context[force_pos] != w[0]);
|
||||
|
||||
/* find position in force_context/hierarchy */
|
||||
while (force_pos >= 0 &&
|
||||
force_context[force_pos] != w[0])
|
||||
force_pos--;
|
||||
}
|
||||
/* and move past it */
|
||||
if (force_pos >= 0)
|
||||
force_pos--;
|
||||
|
||||
wsize = 1;
|
||||
break;
|
||||
|
||||
|
@@ -15,10 +15,9 @@ int ceph_crypto_key_clone(struct ceph_crypto_key *dst,
|
||||
const struct ceph_crypto_key *src)
|
||||
{
|
||||
memcpy(dst, src, sizeof(struct ceph_crypto_key));
|
||||
dst->key = kmalloc(src->len, GFP_NOFS);
|
||||
dst->key = kmemdup(src->key, src->len, GFP_NOFS);
|
||||
if (!dst->key)
|
||||
return -ENOMEM;
|
||||
memcpy(dst->key, src->key, src->len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -29,8 +29,8 @@ static void __register_request(struct ceph_osd_client *osdc,
|
||||
struct ceph_osd_request *req);
|
||||
static void __unregister_linger_request(struct ceph_osd_client *osdc,
|
||||
struct ceph_osd_request *req);
|
||||
static int __send_request(struct ceph_osd_client *osdc,
|
||||
struct ceph_osd_request *req);
|
||||
static void __send_request(struct ceph_osd_client *osdc,
|
||||
struct ceph_osd_request *req);
|
||||
|
||||
static int op_needs_trail(int op)
|
||||
{
|
||||
@@ -1022,8 +1022,8 @@ out:
|
||||
/*
|
||||
* caller should hold map_sem (for read) and request_mutex
|
||||
*/
|
||||
static int __send_request(struct ceph_osd_client *osdc,
|
||||
struct ceph_osd_request *req)
|
||||
static void __send_request(struct ceph_osd_client *osdc,
|
||||
struct ceph_osd_request *req)
|
||||
{
|
||||
struct ceph_osd_request_head *reqhead;
|
||||
|
||||
@@ -1041,7 +1041,6 @@ static int __send_request(struct ceph_osd_client *osdc,
|
||||
ceph_msg_get(req->r_request); /* send consumes a ref */
|
||||
ceph_con_send(&req->r_osd->o_con, req->r_request);
|
||||
req->r_sent = req->r_osd->o_incarnation;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1726,17 +1725,9 @@ int ceph_osdc_start_request(struct ceph_osd_client *osdc,
|
||||
dout("send_request %p no up osds in pg\n", req);
|
||||
ceph_monc_request_next_osdmap(&osdc->client->monc);
|
||||
} else {
|
||||
rc = __send_request(osdc, req);
|
||||
if (rc) {
|
||||
if (nofail) {
|
||||
dout("osdc_start_request failed send, "
|
||||
" will retry %lld\n", req->r_tid);
|
||||
rc = 0;
|
||||
} else {
|
||||
__unregister_request(osdc, req);
|
||||
}
|
||||
}
|
||||
__send_request(osdc, req);
|
||||
}
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
out_unlock:
|
||||
|
在新工单中引用
屏蔽一个用户