+static int seq_fid_alloc_prep(struct lu_client_seq *seq,
+ cfs_waitlink_t *link)
+{
+
+ cfs_waitq_add(&seq->lcs_waitq, link);
+ if (seq->lcs_update) {
+ cfs_up(&seq->lcs_sem);
+ cfs_set_current_state(CFS_TASK_UNINT);
+ cfs_waitq_wait(link, CFS_TASK_UNINT);
+ cfs_set_current_state(CFS_TASK_RUNNING);
+ cfs_down(&seq->lcs_sem);
+ return -EAGAIN;
+ }
+ ++seq->lcs_update;
+ cfs_up(&seq->lcs_sem);
+ return 0;
+}
+
+static void seq_fid_alloc_fini(struct lu_client_seq *seq,
+ cfs_waitlink_t *link)
+{
+ LASSERT(seq->lcs_update == 1);
+ cfs_down(&seq->lcs_sem);
+ --seq->lcs_update;
+ cfs_waitq_del(&seq->lcs_waitq, link);
+ cfs_waitq_signal(&seq->lcs_waitq);
+}
+