Using ceph_pagelist_encode_string() instead of combination of ceph_pagelist_encode_32() and ceph_pagelist_append() when encoding string. Meanwhile add return code check for ceph_pagelist_encode_string(). Signed-off-by: Chengguang Xu <cgxu519@xxxxxxx> --- v2: - Add return code check for ceph_pagelist_encode_string(). fs/ceph/acl.c | 18 ++++++++++++------ net/ceph/osd_client.c | 16 +++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c index 5da752751a2b..6f0210984456 100644 --- a/fs/ceph/acl.c +++ b/fs/ceph/acl.c @@ -222,14 +222,17 @@ int ceph_pre_init_acls(struct inode *dir, umode_t *mode, err = ceph_pagelist_reserve(pagelist, len + val_size1 + 8); if (err) goto out_err; - ceph_pagelist_encode_string(pagelist, XATTR_NAME_POSIX_ACL_ACCESS, - len); + err = ceph_pagelist_encode_string(pagelist, + XATTR_NAME_POSIX_ACL_ACCESS, len); + if (err) + goto out_err; err = posix_acl_to_xattr(&init_user_ns, acl, tmp_buf, val_size1); if (err < 0) goto out_err; - ceph_pagelist_encode_32(pagelist, val_size1); - ceph_pagelist_append(pagelist, tmp_buf, val_size1); + err = ceph_pagelist_encode_string(pagelist, tmp_buf, val_size1); + if (err) + goto out_err; } if (default_acl) { size_t len = strlen(XATTR_NAME_POSIX_ACL_DEFAULT); @@ -238,12 +241,15 @@ int ceph_pre_init_acls(struct inode *dir, umode_t *mode, goto out_err; err = ceph_pagelist_encode_string(pagelist, XATTR_NAME_POSIX_ACL_DEFAULT, len); + if (err) + goto out_err; err = posix_acl_to_xattr(&init_user_ns, default_acl, tmp_buf, val_size2); if (err < 0) goto out_err; - ceph_pagelist_encode_32(pagelist, val_size2); - ceph_pagelist_append(pagelist, tmp_buf, val_size2); + err = ceph_pagelist_encode_string(pagelist, tmp_buf, val_size2); + if (err) + goto out_err; } kfree(tmp_buf); diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index f2584fe1246f..720ac564d392 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c @@ -4607,14 +4607,15 @@ static int osd_req_op_notify_ack_init(struct ceph_osd_request *req, int which, ceph_pagelist_init(pl); ret = ceph_pagelist_encode_64(pl, notify_id); ret |= ceph_pagelist_encode_64(pl, cookie); - if (payload) { - ret |= ceph_pagelist_encode_32(pl, payload_len); - ret |= ceph_pagelist_append(pl, payload, payload_len); - } else { + if (payload) + ret |= ceph_pagelist_encode_string(pl, payload, payload_len); + else ret |= ceph_pagelist_encode_32(pl, 0); - } + if (ret) { ceph_pagelist_release(pl); + if (ret & -ERANGE) + return -ERANGE; return -ENOMEM; } @@ -4678,10 +4679,11 @@ static int osd_req_op_notify_init(struct ceph_osd_request *req, int which, ceph_pagelist_init(pl); ret = ceph_pagelist_encode_32(pl, 1); /* prot_ver */ ret |= ceph_pagelist_encode_32(pl, timeout); - ret |= ceph_pagelist_encode_32(pl, payload_len); - ret |= ceph_pagelist_append(pl, payload, payload_len); + ret |= ceph_pagelist_encode_string(pl, payload, payload_len); if (ret) { ceph_pagelist_release(pl); + if (ret & -ERANGE) + return -ERANGE; return -ENOMEM; } -- 2.17.1 -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html