From: Chakshu Kansal Date: Thu, 24 Apr 2025 12:40:58 +0000 (-0600) Subject: LU-11029 target: centralize size checking X-Git-Tag: 2.16.55~30 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=beeb5c2dc834f0e097df57883a4467097e0a7875;p=fs%2Flustre-release.git LU-11029 target: centralize size checking Consolidate size checking logic inside object_update_param_get() instead of having separate checks at each call site. Test-Parameters: testlist=sanity,sanityn Signed-off-by: Chakshu Kansal Change-Id: I290ce300fb28ee48b2052fcb8263a308d63022f5 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/58888 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Aryan Gupta Reviewed-by: Oleg Drokin --- diff --git a/lustre/include/lustre_update.h b/lustre/include/lustre_update.h index 4a0a22a..798f672 100644 --- a/lustre/include/lustre_update.h +++ b/lustre/include/lustre_update.h @@ -178,10 +178,11 @@ update_ops_get_op(const struct update_ops *ops, unsigned int index, static inline void *object_update_param_get(const struct object_update *update, size_t index, - size_t *size) + size_t *size, const char *name, const char *type) { - const struct object_update_param *param; - size_t i; + const struct object_update_param *param; + size_t i; + int rc = 0; if (index >= update->ou_params_count) return ERR_PTR(-EINVAL); @@ -191,12 +192,20 @@ static inline void param = (struct object_update_param *)((char *)param + object_update_param_size(param)); - if (size != NULL) - *size = param->oup_len; - if (param->oup_len == 0) return ERR_PTR(-ENODATA); + if (size) { + if (unlikely((*size != 0 && *size != param->oup_len) || + (*size == 0 && param->oup_len == 0))) { + rc = -EPROTO; + CERROR("%s: wrong size for %s in RPC %zu != %u: rc = %d\n", + name, type, *size, param->oup_len, rc); + return ERR_PTR(rc); + } + *size = param->oup_len; + } + return (void *)¶m->oup_buf[0]; } diff --git a/lustre/target/out_handler.c b/lustre/target/out_handler.c index 08ab226..f8576cf 100644 --- a/lustre/target/out_handler.c +++ b/lustre/target/out_handler.c @@ -45,32 +45,28 @@ typedef void (*out_reconstruct_t)(const struct lu_env *env, static int out_create(struct tgt_session_info *tsi) { - struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); - struct object_update *update = tti->tti_u.update.tti_update; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - struct dt_object_format *dof = &tti->tti_u.update.tti_update_dof; - struct obdo *lobdo = &tti->tti_u.update.tti_obdo; - struct lu_attr *attr = &tti->tti_attr; - struct lu_fid *fid = NULL; - struct obdo *wobdo; - size_t size; - int rc; + struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); + struct object_update *update = tti->tti_u.update.tti_update; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + struct dt_object_format *dof = &tti->tti_u.update.tti_update_dof; + struct obdo *lobdo = &tti->tti_u.update.tti_obdo; + struct lu_attr *attr = &tti->tti_attr; + struct lu_fid *fid = NULL; + struct obdo *wobdo; + size_t size; + int rc; ENTRY; - wobdo = object_update_param_get(update, 0, &size); + size = sizeof(*wobdo); + wobdo = object_update_param_get(update, 0, &size, + tgt_name(tsi->tsi_tgt), "obdo"); if (IS_ERR(wobdo)) { rc = PTR_ERR(wobdo); CERROR("%s: obdo is NULL, invalid RPC: rc = %d\n", tgt_name(tsi->tsi_tgt), rc); RETURN(rc); } - if (size != sizeof(*wobdo)) { - rc = -EPROTO; - CERROR("%s: wrong size for obdo %zu != %zu, invalid RPC: rc = %d\n", - tgt_name(tsi->tsi_tgt), size, sizeof(*wobdo), rc); - RETURN(rc); - } if (req_capsule_req_need_swab(tsi->tsi_pill)) lustre_swab_obdo(wobdo); @@ -79,19 +75,15 @@ static int out_create(struct tgt_session_info *tsi) dof->dof_type = dt_mode_to_dft(attr->la_mode); if (update->ou_params_count > 1) { - fid = object_update_param_get(update, 1, &size); + size = sizeof(*fid); + fid = object_update_param_get(update, 1, &size, + tgt_name(tsi->tsi_tgt), "lu_fid"); if (IS_ERR(fid)) { rc = PTR_ERR(fid); CERROR("%s: invalid fid: rc = %d\n", tgt_name(tsi->tsi_tgt), rc); RETURN(rc); } - if (size != sizeof(*fid)) { - rc = -EPROTO; - CERROR("%s: wrong size for fid %zu != %zu: rc = %d\n", - tgt_name(tsi->tsi_tgt), size, sizeof(*fid), rc); - RETURN(rc); - } if (req_capsule_req_need_swab(tsi->tsi_pill)) lustre_swab_lu_fid(fid); if (!fid_is_sane(fid)) { @@ -114,30 +106,26 @@ static int out_create(struct tgt_session_info *tsi) static int out_attr_set(struct tgt_session_info *tsi) { - struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); - struct object_update *update = tti->tti_u.update.tti_update; - struct lu_attr *attr = &tti->tti_attr; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - struct obdo *lobdo = &tti->tti_u.update.tti_obdo; - struct obdo *wobdo; - size_t size; - int rc; + struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); + struct object_update *update = tti->tti_u.update.tti_update; + struct lu_attr *attr = &tti->tti_attr; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + struct obdo *lobdo = &tti->tti_u.update.tti_obdo; + struct obdo *wobdo; + size_t size; + int rc; ENTRY; - wobdo = object_update_param_get(update, 0, &size); + size = sizeof(*wobdo); + wobdo = object_update_param_get(update, 0, &size, + tgt_name(tsi->tsi_tgt), "obdo"); if (IS_ERR(wobdo)) { rc = PTR_ERR(wobdo); CERROR("%s: empty obdo in the update: rc = %d\n", tgt_name(tsi->tsi_tgt), rc); RETURN(rc); } - if (size != sizeof(*wobdo)) { - rc = -EPROTO; - CERROR("%s: wrong size for obdo %zu != %zu in the update: rc = %d\n", - tgt_name(tsi->tsi_tgt), size, sizeof(*wobdo), rc); - RETURN(rc); - } attr->la_valid = 0; attr->la_valid = 0; @@ -157,14 +145,14 @@ static int out_attr_set(struct tgt_session_info *tsi) static int out_attr_get(struct tgt_session_info *tsi) { - const struct lu_env *env = tsi->tsi_env; - struct tgt_thread_info *tti = tgt_th_info(env); - struct object_update *update = tti->tti_u.update.tti_update; - struct obdo *obdo = &tti->tti_u.update.tti_obdo; - struct lu_attr *la = &tti->tti_attr; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - int idx = tti->tti_u.update.tti_update_reply_index; - int rc; + const struct lu_env *env = tsi->tsi_env; + struct tgt_thread_info *tti = tgt_th_info(env); + struct object_update *update = tti->tti_u.update.tti_update; + struct obdo *obdo = &tti->tti_u.update.tti_obdo; + struct lu_attr *la = &tti->tti_attr; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + int idx = tti->tti_u.update.tti_update_reply_index; + int rc; ENTRY; @@ -204,16 +192,16 @@ out_unlock: static int out_xattr_get(struct tgt_session_info *tsi) { - const struct lu_env *env = tsi->tsi_env; - struct tgt_thread_info *tti = tgt_th_info(env); - struct object_update *update = tti->tti_u.update.tti_update; - struct lu_buf *lbuf = &tti->tti_buf; + const struct lu_env *env = tsi->tsi_env; + struct tgt_thread_info *tti = tgt_th_info(env); + struct object_update *update = tti->tti_u.update.tti_update; + struct lu_buf *lbuf = &tti->tti_buf; struct object_update_reply *reply = tti->tti_u.update.tti_update_reply; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - char *name; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + char *name; struct object_update_result *update_result; - int idx = tti->tti_u.update.tti_update_reply_index; - int rc; + int idx = tti->tti_u.update.tti_update_reply_index; + int rc; ENTRY; @@ -223,7 +211,7 @@ static int out_xattr_get(struct tgt_session_info *tsi) RETURN(-ENOENT); } - name = object_update_param_get(update, 0, NULL); + name = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(name)) { CERROR("%s: empty name for xattr get: rc = %ld\n", tgt_name(tsi->tsi_tgt), PTR_ERR(name)); @@ -319,12 +307,12 @@ static int out_xattr_list(struct tgt_session_info *tsi) static int out_index_lookup(struct tgt_session_info *tsi) { - const struct lu_env *env = tsi->tsi_env; - struct tgt_thread_info *tti = tgt_th_info(env); - struct object_update *update = tti->tti_u.update.tti_update; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - char *name; - int rc; + const struct lu_env *env = tsi->tsi_env; + struct tgt_thread_info *tti = tgt_th_info(env); + struct object_update *update = tti->tti_u.update.tti_update; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + char *name; + int rc; ENTRY; @@ -334,7 +322,7 @@ static int out_index_lookup(struct tgt_session_info *tsi) if (!lu_object_exists(&obj->do_lu)) RETURN(-ENOENT); - name = object_update_param_get(update, 0, NULL); + name = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(name)) { CERROR("%s: empty name for lookup: rc = %ld\n", tgt_name(tsi->tsi_tgt), PTR_ERR(name)); @@ -373,20 +361,20 @@ out_unlock: static int out_xattr_set(struct tgt_session_info *tsi) { - struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); - struct object_update *update = tti->tti_u.update.tti_update; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - struct lu_buf *lbuf = &tti->tti_buf; - char *name; - char *buf; - __u32 *tmp; - size_t buf_len = 0; - int flag; - size_t size = 0; - int rc; + struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); + struct object_update *update = tti->tti_u.update.tti_update; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + struct lu_buf *lbuf = &tti->tti_buf; + char *name; + char *buf; + __u32 *tmp; + size_t buf_len = 0; + int flag; + size_t size = 0; + int rc; ENTRY; - name = object_update_param_get(update, 0, NULL); + name = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(name)) { CERROR("%s: empty name for xattr set: rc = %ld\n", tgt_name(tsi->tsi_tgt), PTR_ERR(name)); @@ -394,26 +382,23 @@ static int out_xattr_set(struct tgt_session_info *tsi) } /* If buffer == NULL (-ENODATA), then it might mean delete xattr */ - buf = object_update_param_get(update, 1, &buf_len); + buf = object_update_param_get(update, 1, &buf_len, + tgt_name(tsi->tsi_tgt), "char"); if (IS_ERR(buf) && PTR_ERR(buf) != -ENODATA) RETURN(PTR_ERR(buf)); lbuf->lb_buf = buf; lbuf->lb_len = buf_len; - tmp = object_update_param_get(update, 2, &size); + size = sizeof(*tmp); + tmp = object_update_param_get(update, 2, &size, + tgt_name(tsi->tsi_tgt), "__u32"); if (IS_ERR(tmp)) { rc = PTR_ERR(tmp); CERROR("%s: emptry flag: rc = %d\n", tgt_name(tsi->tsi_tgt), rc); RETURN(rc); } - if (size != sizeof(*tmp)) { - rc = -EPROTO; - CERROR("%s: wrong size for flag %zu != %zu: rc = %d\n", - tgt_name(tsi->tsi_tgt), size, sizeof(*tmp), rc); - RETURN(rc); - } if (req_capsule_req_need_swab(tsi->tsi_pill)) __swab32s(tmp); @@ -435,7 +420,7 @@ static int out_xattr_del(struct tgt_session_info *tsi) int rc; ENTRY; - name = object_update_param_get(update, 0, NULL); + name = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(name)) { CERROR("%s: empty name for xattr set: rc = %ld\n", tgt_name(tsi->tsi_tgt), PTR_ERR(name)); @@ -487,37 +472,33 @@ static int out_ref_del(struct tgt_session_info *tsi) static int out_index_insert(struct tgt_session_info *tsi) { - struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); - struct object_update *update = tti->tti_u.update.tti_update; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - struct dt_insert_rec *rec = &tti->tti_rec; - struct lu_fid *fid; - char *name; - __u32 *ptype; - int rc = 0; - size_t size; + struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); + struct object_update *update = tti->tti_u.update.tti_update; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + struct dt_insert_rec *rec = &tti->tti_rec; + struct lu_fid *fid; + char *name; + __u32 *ptype; + int rc = 0; + size_t size; ENTRY; - name = object_update_param_get(update, 0, NULL); + name = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(name)) { CERROR("%s: empty name for index insert: rc = %ld\n", tgt_name(tsi->tsi_tgt), PTR_ERR(name)); RETURN(PTR_ERR(name)); } - fid = object_update_param_get(update, 1, &size); + size = sizeof(*fid); + fid = object_update_param_get(update, 1, &size, + tgt_name(tsi->tsi_tgt), "lu_fid"); if (IS_ERR(fid)) { rc = PTR_ERR(fid); CERROR("%s: invalid fid: rc = %d\n", tgt_name(tsi->tsi_tgt), rc); RETURN(rc); } - if (size != sizeof(*fid)) { - rc = -EPROTO; - CERROR("%s: wrong size for fid %zu != %zu: rc = %d\n", - tgt_name(tsi->tsi_tgt), size, sizeof(*fid), rc); - RETURN(rc); - } if (req_capsule_req_need_swab(tsi->tsi_pill)) lustre_swab_lu_fid(fid); @@ -528,19 +509,15 @@ static int out_index_insert(struct tgt_session_info *tsi) RETURN(-EPROTO); } - ptype = object_update_param_get(update, 2, &size); + size = sizeof(*ptype); + ptype = object_update_param_get(update, 2, &size, + tgt_name(tsi->tsi_tgt), "__u32"); if (IS_ERR(ptype)) { rc = PTR_ERR(ptype); CERROR("%s: invalid type for index insert: rc = %d\n", tgt_name(tsi->tsi_tgt), rc); RETURN(rc); } - if (size != sizeof(*ptype)) { - rc = -EPROTO; - CERROR("%s: wrong size for index insert %zu != %zu: rc = %d\n", - tgt_name(tsi->tsi_tgt), size, sizeof(*ptype), rc); - RETURN(rc); - } if (req_capsule_req_need_swab(tsi->tsi_pill)) __swab32s(ptype); @@ -563,16 +540,16 @@ static int out_index_insert(struct tgt_session_info *tsi) static int out_index_delete(struct tgt_session_info *tsi) { - struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); - struct object_update *update = tti->tti_u.update.tti_update; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - char *name; - int rc = 0; + struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); + struct object_update *update = tti->tti_u.update.tti_update; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + char *name; + int rc = 0; if (!lu_object_exists(&obj->do_lu)) RETURN(-ENOENT); - name = object_update_param_get(update, 0, NULL); + name = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(name)) { CERROR("%s: empty name for index delete: rc = %ld\n", tgt_name(tsi->tsi_tgt), PTR_ERR(name)); @@ -588,11 +565,11 @@ static int out_index_delete(struct tgt_session_info *tsi) static int out_destroy(struct tgt_session_info *tsi) { - struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); - struct object_update *update = tti->tti_u.update.tti_update; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - struct lu_fid *fid; - int rc; + struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); + struct object_update *update = tti->tti_u.update.tti_update; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + struct lu_fid *fid; + int rc; ENTRY; fid = &update->ou_fid; @@ -618,47 +595,38 @@ static int out_destroy(struct tgt_session_info *tsi) static int out_write(struct tgt_session_info *tsi) { - struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); - struct object_update *update = tti->tti_u.update.tti_update; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; - struct lu_buf *lbuf = &tti->tti_buf; - char *buf; - __u64 *tmp; - size_t size = 0; - size_t buf_len = 0; - loff_t pos; - int rc; + struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env); + struct object_update *update = tti->tti_u.update.tti_update; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; + struct lu_buf *lbuf = &tti->tti_buf; + char *buf; + __u64 *tmp; + size_t size = 0; + size_t buf_len = 0; + loff_t pos; + int rc; ENTRY; - buf = object_update_param_get(update, 0, &buf_len); + buf = object_update_param_get(update, 0, &buf_len, + tgt_name(tsi->tsi_tgt), "char"); if (IS_ERR(buf)) { rc = PTR_ERR(buf); CERROR("%s: empty buf for xattr set: rc = %d\n", tgt_name(tsi->tsi_tgt), rc); RETURN(rc); } - if (buf_len == 0) { - rc = -EPROTO; - CERROR("%s: wrong buf_len %zu != 0 for xattr set: rc = %d\n", - tgt_name(tsi->tsi_tgt), buf_len, rc); - RETURN(rc); - } lbuf->lb_buf = buf; lbuf->lb_len = buf_len; - tmp = object_update_param_get(update, 1, &size); + size = sizeof(*tmp); + tmp = object_update_param_get(update, 1, &size, + tgt_name(tsi->tsi_tgt), "__u64"); if (IS_ERR(tmp)) { rc = PTR_ERR(tmp); CERROR("%s: empty pos: rc = %d\n", tgt_name(tsi->tsi_tgt), rc); RETURN(rc); } - if (size != sizeof(*tmp)) { - rc = -EPROTO; - CERROR("%s: wrong size for pos %zu != %zu: rc = %d\n", - tgt_name(tsi->tsi_tgt), size, sizeof(*tmp), rc); - RETURN(rc); - } if (req_capsule_req_need_swab(tsi->tsi_pill)) __swab64s(tmp); @@ -673,15 +641,15 @@ static int out_write(struct tgt_session_info *tsi) static int out_read(struct tgt_session_info *tsi) { - const struct lu_env *env = tsi->tsi_env; - struct tgt_thread_info *tti = tgt_th_info(env); - struct object_update *update = tti->tti_u.update.tti_update; - struct dt_object *obj = tti->tti_u.update.tti_dt_object; + const struct lu_env *env = tsi->tsi_env; + struct tgt_thread_info *tti = tgt_th_info(env); + struct object_update *update = tti->tti_u.update.tti_update; + struct dt_object *obj = tti->tti_u.update.tti_dt_object; struct object_update_reply *reply = tti->tti_u.update.tti_update_reply; int index = tti->tti_u.update.tti_update_reply_index; - struct lu_rdbuf *rdbuf; + struct lu_rdbuf *rdbuf; struct object_update_result *update_result; - struct out_read_reply *orr; + struct out_read_reply *orr; void *tmp; size_t size; size_t total_size = 0; @@ -698,7 +666,7 @@ static int out_read(struct tgt_session_info *tsi) if (!lu_object_exists(&obj->do_lu)) GOTO(out, rc = -ENOENT); - tmp = object_update_param_get(update, 0, NULL); + tmp = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(tmp)) { CERROR("%s: empty size for read: rc = %ld\n", tgt_name(tsi->tsi_tgt), PTR_ERR(tmp)); @@ -706,7 +674,7 @@ static int out_read(struct tgt_session_info *tsi) } size = le64_to_cpu(*(size_t *)(tmp)); - tmp = object_update_param_get(update, 1, NULL); + tmp = object_update_param_get(update, 1, NULL, NULL, NULL); if (IS_ERR(tmp)) { CERROR("%s: empty pos for read: rc = %ld\n", tgt_name(tsi->tsi_tgt), PTR_ERR(tmp)); @@ -886,9 +854,9 @@ static int out_tx_end(const struct lu_env *env, struct thandle_exec_args *ta, int declare_ret) { struct tgt_session_info *tsi = tgt_ses_info(env); - int i; - int rc; - int rc1; + int i; + int rc; + int rc1; ENTRY; if (ta->ta_handle == NULL) @@ -957,26 +925,26 @@ stop: */ int out_handle(struct tgt_session_info *tsi) { - const struct lu_env *env = tsi->tsi_env; - struct tgt_thread_info *tti = tgt_th_info(env); - struct thandle_exec_args *ta = &tti->tti_tea; - struct req_capsule *pill = tsi->tsi_pill; - struct dt_device *dt = tsi->tsi_tgt->lut_bottom; - struct out_update_header *ouh; - struct out_update_buffer *oub = NULL; - struct object_update *update; - struct object_update_reply *reply; - struct ptlrpc_bulk_desc *desc = NULL; + const struct lu_env *env = tsi->tsi_env; + struct tgt_thread_info *tti = tgt_th_info(env); + struct thandle_exec_args *ta = &tti->tti_tea; + struct req_capsule *pill = tsi->tsi_pill; + struct dt_device *dt = tsi->tsi_tgt->lut_bottom; + struct out_update_header *ouh; + struct out_update_buffer *oub = NULL; + struct object_update *update; + struct object_update_reply *reply; + struct ptlrpc_bulk_desc *desc = NULL; struct tg_reply_data *trd = NULL; - void **update_bufs; - int current_batchid = -1; - __u32 update_buf_count; - unsigned int i; - unsigned int reply_index = 0; - int rc = 0; - int rc1 = 0; - int ouh_size, reply_size; - int updates; + void **update_bufs; + int current_batchid = -1; + __u32 update_buf_count; + unsigned int i; + unsigned int reply_index = 0; + int rc = 0; + int rc1 = 0; + int ouh_size, reply_size; + int updates; bool need_reconstruct; ENTRY; @@ -1129,11 +1097,11 @@ int out_handle(struct tgt_session_info *tsi) /* Walk through updates in the request to execute them */ for (i = 0; i < update_buf_count; i++) { - struct tgt_handler *h; - struct dt_object *dt_obj; - int update_count; + struct tgt_handler *h; + struct dt_object *dt_obj; + int update_count; struct object_update_request *our; - int j; + int j; our = update_bufs[i]; update_count = our->ourq_count; diff --git a/lustre/target/out_lib.c b/lustre/target/out_lib.c index 0d8475c..7bfa365 100644 --- a/lustre/target/out_lib.c +++ b/lustre/target/out_lib.c @@ -190,7 +190,7 @@ int out_create_pack(const struct lu_env *env, struct object_update *update, if (rc != 0) RETURN(rc); - obdo = object_update_param_get(update, 0, NULL); + obdo = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(obdo)) RETURN(PTR_ERR(obdo)); @@ -200,7 +200,7 @@ int out_create_pack(const struct lu_env *env, struct object_update *update, if (parent_fid != NULL) { struct lu_fid *tmp; - tmp = object_update_param_get(update, 1, NULL); + tmp = object_update_param_get(update, 1, NULL, NULL, NULL); if (IS_ERR(tmp)) RETURN(PTR_ERR(tmp)); @@ -241,7 +241,7 @@ int out_attr_set_pack(const struct lu_env *env, struct object_update *update, if (rc != 0) RETURN(rc); - obdo = object_update_param_get(update, 0, NULL); + obdo = object_update_param_get(update, 0, NULL, NULL, NULL); if (IS_ERR(obdo)) RETURN(PTR_ERR(obdo));