+ seq->private = param;
+out:
+ if (rc != 0) {
+ if (env_init == 1)
+ lu_env_fini(¶m->fsp_env);
+ if (param != NULL)
+ OBD_FREE_PTR(param);
+ LPROCFS_EXIT();
+ }
+ return rc;
+}
+
+static int fldb_seq_release(struct inode *inode, struct file *file)
+{
+ struct seq_file *seq = file->private_data;
+ struct fld_seq_param *param;
+ struct lu_server_fld *fld;
+ struct dt_object *obj;
+ const struct dt_it_ops *iops;
+
+ param = seq->private;
+ if (param == NULL) {
+ lprocfs_seq_release(inode, file);
+ return 0;
+ }
+
+ fld = param->fsp_fld;
+ obj = fld->lsf_obj;
+ LASSERT(obj != NULL);
+ iops = &obj->do_index_ops->dio_it;
+
+ LASSERT(iops != NULL);
+ LASSERT(obj != NULL);
+ LASSERT(param->fsp_it != NULL);
+ iops->fini(¶m->fsp_env, param->fsp_it);
+ lu_env_fini(¶m->fsp_env);
+ OBD_FREE_PTR(param);
+ lprocfs_seq_release(inode, file);
+