* Author: Yury Umanets <umka@clusterfs.com>
*/
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
#define DEBUG_SUBSYSTEM S_FID
#ifdef __KERNEL__
};
void seq_update_cb(struct lu_env *env, struct thandle *th,
- struct dt_txn_commit_cb *cb, int err)
+ struct dt_txn_commit_cb *cb, int err)
{
- struct seq_update_callback *ccb;
- ccb = container_of0(cb, struct seq_update_callback, suc_cb);
- ccb->suc_seq->lss_need_sync = 0;
- cfs_list_del(&ccb->suc_cb.dcb_linkage);
- OBD_FREE_PTR(ccb);
+ struct seq_update_callback *ccb;
+
+ ccb = container_of0(cb, struct seq_update_callback, suc_cb);
+
+ LASSERT(ccb->suc_seq != NULL);
+
+ ccb->suc_seq->lss_need_sync = 0;
+ OBD_FREE_PTR(ccb);
}
struct thandle *seq_store_trans_create(struct lu_server_seq *seq,
int seq_update_cb_add(struct thandle *th, struct lu_server_seq *seq)
{
- struct seq_update_callback *ccb;
- int rc;
- OBD_ALLOC_PTR(ccb);
- if (ccb == NULL)
- return -ENOMEM;
-
- ccb->suc_cb.dcb_func = seq_update_cb;
- CFS_INIT_LIST_HEAD(&ccb->suc_cb.dcb_linkage);
- ccb->suc_seq = seq;
- seq->lss_need_sync = 1;
- rc = dt_trans_cb_add(th, &ccb->suc_cb);
- if (rc)
- OBD_FREE_PTR(ccb);
- return rc;
+ struct seq_update_callback *ccb;
+ struct dt_txn_commit_cb *dcb;
+ int rc;
+
+ OBD_ALLOC_PTR(ccb);
+ if (ccb == NULL)
+ return -ENOMEM;
+
+ ccb->suc_seq = seq;
+ seq->lss_need_sync = 1;
+
+ dcb = &ccb->suc_cb;
+ dcb->dcb_func = seq_update_cb;
+ CFS_INIT_LIST_HEAD(&dcb->dcb_linkage);
+ strncpy(dcb->dcb_name, "seq_update_cb", MAX_COMMIT_CB_STR_LEN);
+ dcb->dcb_name[MAX_COMMIT_CB_STR_LEN - 1] = '\0';
+
+ rc = dt_trans_cb_add(th, dcb);
+ if (rc)
+ OBD_FREE_PTR(ccb);
+ return rc;
}
int seq_declare_store_write(struct lu_server_seq *seq,
struct dt_device *dt)
{
struct dt_object *dt_obj;
- struct lu_fid fid;
+ struct lu_fid fid;
+ struct lu_attr attr;
+ struct dt_object_format dof;
const char *name;
int rc;
ENTRY;
- name = seq->lss_type == LUSTRE_SEQ_SERVER ?
- LUSTRE_SEQ_SRV_NAME : LUSTRE_SEQ_CTL_NAME;
+ name = seq->lss_type == LUSTRE_SEQ_SERVER ?
+ LUSTRE_SEQ_SRV_NAME : LUSTRE_SEQ_CTL_NAME;
+
+ if (seq->lss_type == LUSTRE_SEQ_SERVER)
+ lu_local_obj_fid(&fid, FID_SEQ_SRV_OID);
+ else
+ lu_local_obj_fid(&fid, FID_SEQ_CTL_OID);
+
+ memset(&attr, 0, sizeof(attr));
+ attr.la_valid = LA_MODE;
+ attr.la_mode = S_IFREG | 0666;
+ dof.dof_type = DFT_REGULAR;
- dt_obj = dt_store_open(env, dt, "", name, &fid);
+ dt_obj = dt_find_or_create(env, dt, &fid, &dof, &attr);
if (!IS_ERR(dt_obj)) {
seq->lss_obj = dt_obj;
rc = 0;