Home | History | Annotate | Download | only in dmover

Lines Matching refs:ds

181 	struct dmio_state *ds;
183 ds = pool_get(&dmio_state_pool, PR_WAITOK | PR_ZERO);
185 getnanotime(&ds->ds_btime);
186 ds->ds_atime = ds->ds_mtime = ds->ds_btime;
188 mutex_init(&ds->ds_lock, MUTEX_DEFAULT, IPL_SOFTCLOCK);
189 cv_init(&ds->ds_complete_cv, "dmvrrd");
190 cv_init(&ds->ds_nreqs_cv, "dmiowr");
191 TAILQ_INIT(&ds->ds_pending);
192 TAILQ_INIT(&ds->ds_complete);
193 selinit(&ds->ds_selq);
195 return ds;
199 dmio_state_put(struct dmio_state *ds)
202 seldestroy(&ds->ds_selq);
203 cv_destroy(&ds->ds_nreqs_cv);
204 cv_destroy(&ds->ds_complete_cv);
205 mutex_destroy(&ds->ds_lock);
207 pool_put(&dmio_state_pool, ds);
219 struct dmio_state *ds = (struct dmio_state *) fp->f_data;
220 struct dmover_session *dses = ds->ds_session;
356 dmio_usrreq_fini(struct dmio_state *ds, struct dmio_usrreq_state *dus)
358 struct dmover_session *dses = ds->ds_session;
397 struct dmio_state *ds = (struct dmio_state *) fp->f_data;
406 if (ds->ds_session == NULL)
409 getnanotime(&ds->ds_atime);
410 mutex_enter(&ds->ds_lock);
415 dus = TAILQ_FIRST(&ds->ds_complete);
421 ds->ds_flags |= DMIO_STATE_READ_WAIT;
422 error = cv_wait_sig(&ds->ds_complete_cv, &ds->ds_lock);
428 TAILQ_REMOVE(&ds->ds_complete, dus, dus_q);
429 ds->ds_nreqs--;
430 if (ds->ds_flags & DMIO_STATE_WRITE_WAIT) {
431 ds->ds_flags &= ~DMIO_STATE_WRITE_WAIT;
432 cv_broadcast(&ds->ds_nreqs_cv);
434 if (ds->ds_flags & DMIO_STATE_SEL) {
435 ds->ds_flags &= ~DMIO_STATE_SEL;
436 selnotify(&ds->ds_selq, POLLIN | POLLRDNORM, 0);
451 dmio_usrreq_fini(ds, dus);
453 mutex_exit(&ds->ds_lock);
463 mutex_enter(&ds->ds_lock);
467 mutex_exit(&ds->ds_lock);
481 struct dmio_state *ds = dreq->dreq_session->dses_cookie;
485 mutex_enter(&ds->ds_lock);
486 TAILQ_REMOVE(&ds->ds_pending, dus, dus_q);
487 if (ds->ds_flags & DMIO_STATE_DEAD) {
488 int nreqs = --ds->ds_nreqs;
489 mutex_exit(&ds->ds_lock);
490 dmio_usrreq_fini(ds, dus);
493 dmio_state_put(ds);
498 TAILQ_INSERT_TAIL(&ds->ds_complete, dus, dus_q);
499 if (ds->ds_flags & DMIO_STATE_READ_WAIT) {
500 ds->ds_flags &= ~DMIO_STATE_READ_WAIT;
501 cv_broadcast(&ds->ds_complete_cv);
503 if (ds->ds_flags & DMIO_STATE_SEL) {
504 ds->ds_flags &= ~DMIO_STATE_SEL;
505 selnotify(&ds->ds_selq, POLLOUT | POLLWRNORM, 0);
507 mutex_exit(&ds->ds_lock);
519 struct dmio_state *ds = (struct dmio_state *) fp->f_data;
528 if (ds->ds_session == NULL)
531 getnanotime(&ds->ds_mtime);
532 mutex_enter(&ds->ds_lock);
536 if (ds->ds_nreqs == DMIO_NREQS_MAX) {
541 ds->ds_flags |= DMIO_STATE_WRITE_WAIT;
542 error = cv_wait_sig(&ds->ds_complete_cv, &ds->ds_lock);
548 ds->ds_nreqs++;
550 mutex_exit(&ds->ds_lock);
556 mutex_enter(&ds->ds_lock);
557 ds->ds_nreqs--;
562 dreq = dmover_request_alloc(ds->ds_session, NULL);
565 ds->ds_nreqs--;
584 mutex_enter(&ds->ds_lock);
586 TAILQ_INSERT_TAIL(&ds->ds_pending, dus, dus_q);
588 mutex_exit(&ds->ds_lock);
592 mutex_enter(&ds->ds_lock);
595 mutex_exit(&ds->ds_lock);
603 struct dmio_state *ds = fp->f_data;
608 st->st_atimespec = ds->ds_atime;
609 st->st_mtimespec = ds->ds_mtime;
610 st->st_ctimespec = st->st_birthtimespec = ds->ds_btime;
625 struct dmio_state *ds = (struct dmio_state *) fp->f_data;
638 mutex_enter(&ds->ds_lock);
640 if (ds->ds_session != NULL ||
641 (ds->ds_flags & DMIO_STATE_LARVAL) != 0) {
642 mutex_exit(&ds->ds_lock);
646 ds->ds_flags |= DMIO_STATE_LARVAL;
648 mutex_exit(&ds->ds_lock);
653 mutex_enter(&ds->ds_lock);
656 dses->dses_cookie = ds;
657 ds->ds_session = dses;
659 ds->ds_flags &= ~DMIO_STATE_LARVAL;
661 mutex_exit(&ds->ds_lock);
680 struct dmio_state *ds = (struct dmio_state *) fp->f_data;
686 mutex_enter(&ds->ds_lock);
688 if (ds->ds_flags & DMIO_STATE_DEAD) {
697 if (TAILQ_EMPTY(&ds->ds_complete) == 0)
705 if (ds->ds_nreqs < DMIO_NREQS_MAX)
709 selrecord(curlwp, &ds->ds_selq);
710 ds->ds_flags |= DMIO_STATE_SEL;
714 mutex_exit(&ds->ds_lock);
727 struct dmio_state *ds = (struct dmio_state *) fp->f_data;
731 mutex_enter(&ds->ds_lock);
733 ds->ds_flags |= DMIO_STATE_DEAD;
736 while ((dus = TAILQ_FIRST(&ds->ds_complete)) != NULL) {
737 TAILQ_REMOVE(&ds->ds_complete, dus, dus_q);
738 ds->ds_nreqs--;
739 mutex_exit(&ds->ds_lock);
741 dmio_usrreq_fini(ds, dus);
742 mutex_enter(&ds->ds_lock);
749 if (ds->ds_nreqs == 0) {
750 dses = ds->ds_session;
751 mutex_exit(&ds->ds_lock);
752 dmio_state_put(ds);
755 mutex_exit(&ds->ds_lock);
787 struct dmio_state *ds;
794 ds = dmio_state_get();
796 return fd_clone(fp, fd, flag, &dmio_fileops, ds);