+ tmp = mdc_link_pack(msg, 0, op_data);
+ OBD_FREE(op_data, sizeof(*op_data));
+ mkpi->mpi_total_size = tmp - (void *)msg;
+ rc = mkpi->mpi_total_size + sizeof(*mkpi) + sizeof(int);
+
+ RETURN(rc);
+}
+
+static int mds_rec_setxattr_pack(char *buffer, struct dentry *dentry,
+ struct inode *dir, void *data1, void *data2)
+{
+ struct kml_buffer *kbuf = (struct kml_buffer *)data2;
+ struct mds_rec_setattr *rec = NULL;
+ struct mds_kml_pack_info *mkpi;
+ struct lustre_msg *msg = NULL;
+ struct mdc_op_data *op_data;
+ char *name = (char *)data1;
+ void *tmp = NULL;
+ int rc = 0;
+ ENTRY;
+
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ return -ENOMEM;
+
+ smfs_prepare_mdc_data(op_data, dir, NULL, NULL, 0, 0);
+ mds_rec_get_id(dir, &op_data->id1);
+
+ PACK_KML_REC_INIT(buffer, MDS_REINT);
+ mkpi = (struct mds_kml_pack_info *)buffer;
+
+ mkpi->mpi_bufcount = 3;
+ mkpi->mpi_size[0] = sizeof(struct mds_rec_setattr);
+ mkpi->mpi_size[1] = strlen(name);
+ mkpi->mpi_size[2] = kbuf->buf_size;
+
+ msg = (struct lustre_msg *)(buffer + sizeof(*mkpi));
+ lustre_init_msg(msg, mkpi->mpi_bufcount, mkpi->mpi_size, NULL);
+
+ LASSERT(kbuf && name);
+
+ tmp = mdc_setattr_pack(msg, 0, op_data, NULL, name, strlen(name),
+ kbuf->buf, kbuf->buf_size, NULL, 0);
+ OBD_FREE(op_data, sizeof(*op_data));
+
+ rec = (struct mds_rec_setattr *)lustre_msg_buf(msg, 0, 0);
+ rec->sa_valid = ATTR_EA_CMOBD;
+