Lines Matching defs:jseg

670 SOFTDEP_TYPE(JSEG, jseg, "Journal segment");
767 static void handle_written_jseg(struct jseg *, struct buf *);
771 static void complete_jseg(struct jseg *);
772 static void complete_jsegs(struct jseg *);
773 static void jseg_write(struct ufsmount *ump, struct jseg *, uint8_t *);
774 static void jaddref_write(struct jaddref *, struct jseg *, uint8_t *);
775 static void jremref_write(struct jremref *, struct jseg *, uint8_t *);
776 static void jmvref_write(struct jmvref *, struct jseg *, uint8_t *);
777 static void jtrunc_write(struct jtrunc *, struct jseg *, uint8_t *);
778 static void jfsync_write(struct jfsync *, struct jseg *, uint8_t *data);
779 static void jnewblk_write(struct jnewblk *, struct jseg *, uint8_t *);
780 static void jfreeblk_write(struct jfreeblk *, struct jseg *, uint8_t *);
781 static void jfreefrag_write(struct jfreefrag *, struct jseg *, uint8_t *);
782 static inline void inoref_write(struct inoref *, struct jseg *,
835 static void rele_jseg(struct jseg *);
836 static void free_jseg(struct jseg *, struct jblocks *);
2378 struct jseg *jseg;
2383 jseg = TAILQ_LAST(&jblocks->jb_segs, jseglst);
2384 if (jseg == NULL)
2387 LIST_INSERT_HEAD(&jseg->js_indirs, freework, fw_segs);
3083 jseg_write(ump, jseg, data)
3085 struct jseg *jseg;
3091 rec->jsr_seq = jseg->js_seq;
3092 rec->jsr_oldest = jseg->js_oldseq;
3093 rec->jsr_cnt = jseg->js_cnt;
3094 rec->jsr_blocks = jseg->js_size / ump->um_devvp->v_bufobj.bo_bsize;
3100 inoref_write(inoref, jseg, rec)
3102 struct jseg *jseg;
3106 inoref->if_jsegdep->jd_seg = jseg;
3115 jaddref_write(jaddref, jseg, data)
3117 struct jseg *jseg;
3124 inoref_write(&jaddref->ja_ref, jseg, rec);
3128 jremref_write(jremref, jseg, data)
3130 struct jseg *jseg;
3137 inoref_write(&jremref->jr_ref, jseg, rec);
3141 jmvref_write(jmvref, jseg, data)
3143 struct jseg *jseg;
3157 jnewblk_write(jnewblk, jseg, data)
3159 struct jseg *jseg;
3164 jnewblk->jn_jsegdep->jd_seg = jseg;
3175 jfreeblk_write(jfreeblk, jseg, data)
3177 struct jseg *jseg;
3182 jfreeblk->jf_dep.jb_jsegdep->jd_seg = jseg;
3193 jfreefrag_write(jfreefrag, jseg, data)
3195 struct jseg *jseg;
3200 jfreefrag->fr_jsegdep->jd_seg = jseg;
3211 jtrunc_write(jtrunc, jseg, data)
3213 struct jseg *jseg;
3218 jtrunc->jt_dep.jb_jsegdep->jd_seg = jseg;
3227 jfsync_write(jfsync, jseg, data)
3229 struct jseg *jseg;
3267 struct jseg *oldest;
3268 struct jseg *jseg;
3275 jseg = bp->bio_caller1;
3276 if (jseg == NULL) {
3280 ump = VFSTOUFS(jseg->js_list.wk_mp);
3287 while (jseg != NULL && (jseg->js_state & COMPLETE) == 0) {
3288 jseg->js_state |= COMPLETE;
3289 oldest = jseg;
3290 jseg = TAILQ_PREV(jseg, jseglst, js_next);
3294 * completed jseg.
3339 struct jseg *jseg;
3357 jseg = NULL;
3402 jseg = malloc(sizeof(*jseg), M_JSEG, M_SOFTDEP_FLAGS);
3403 workitem_alloc(&jseg->js_list, D_JSEG, mp);
3404 LIST_INIT(&jseg->js_entries);
3405 LIST_INIT(&jseg->js_indirs);
3406 jseg->js_state = ATTACHED;
3408 jseg->js_state |= COMPLETE;
3411 jseg->js_jblocks = jblocks;
3416 * and jseg the entry we care about was likely written.
3424 WORKITEM_FREE(jseg, D_JSEG);
3452 * Initialize our jseg with cnt records. Assign the next
3456 jseg->js_buf = bp;
3457 jseg->js_cnt = cnt;
3458 jseg->js_refs = cnt + 1; /* Self ref. */
3459 jseg->js_size = size;
3460 jseg->js_seq = jblocks->jb_nextseq++;
3462 jblocks->jb_oldestseg = jseg;
3463 jseg->js_oldseq = jblocks->jb_oldestseg->js_seq;
3464 TAILQ_INSERT_TAIL(&jblocks->jb_segs, jseg, js_next);
3466 jblocks->jb_writeseg = jseg;
3478 jseg_write(ump, jseg, data);
3496 jseg_write(ump, jseg, data);
3504 WORKLIST_INSERT(&jseg->js_entries, wk);
3507 jaddref_write(WK_JADDREF(wk), jseg, data);
3510 jremref_write(WK_JREMREF(wk), jseg, data);
3513 jmvref_write(WK_JMVREF(wk), jseg, data);
3516 jnewblk_write(WK_JNEWBLK(wk), jseg, data);
3519 jfreeblk_write(WK_JFREEBLK(wk), jseg, data);
3522 jfreefrag_write(WK_JFREEFRAG(wk), jseg, data);
3525 jtrunc_write(WK_JTRUNC(wk), jseg, data);
3528 jfsync_write(WK_JFSYNC(wk), jseg, data);
3549 WORKLIST_INSERT(&bp->b_dep, &jseg->js_list);
3589 * Complete a jseg, allowing all dependencies awaiting journal writes
3594 complete_jseg(jseg)
3595 struct jseg *jseg;
3603 while ((wk = LIST_FIRST(&jseg->js_entries)) != NULL) {
3607 KASSERT(i++ < jseg->js_cnt,
3609 i - 1, jseg->js_cnt));
3618 rele_jseg(jseg); /* No jsegdep. */
3635 rele_jseg(jseg); /* No jsegdep. */
3648 rele_jseg(jseg);
3657 complete_jsegs(jseg)
3658 struct jseg *jseg;
3661 struct jseg *jsegn;
3663 jblocks = jseg->js_jblocks;
3668 if (jseg != jblocks->jb_writeseg)
3671 while (jseg && (jseg->js_state & ALLCOMPLETE) == ALLCOMPLETE) {
3672 jblocks->jb_oldestwrseq = jseg->js_oldseq;
3673 jsegn = TAILQ_NEXT(jseg, js_next);
3674 complete_jseg(jseg);
3675 jseg = jsegn;
3677 jblocks->jb_writeseg = jseg;
3685 * Mark a jseg as DEPCOMPLETE and throw away the buffer. Attempt to handle
3689 handle_written_jseg(jseg, bp)
3690 struct jseg *jseg;
3694 if (jseg->js_refs == 0)
3695 panic("handle_written_jseg: No self-reference on %p", jseg);
3696 jseg->js_state |= DEPCOMPLETE;
3703 complete_jsegs(jseg);
4471 * Free a single jseg once it is no longer referenced in memory or on
4476 free_jseg(jseg, jblocks)
4477 struct jseg *jseg;
4486 while ((freework = LIST_FIRST(&jseg->js_indirs)) != NULL)
4488 if (jblocks->jb_oldestseg == jseg)
4489 jblocks->jb_oldestseg = TAILQ_NEXT(jseg, js_next);
4490 TAILQ_REMOVE(&jblocks->jb_segs, jseg, js_next);
4491 jblocks_free(jblocks, jseg->js_list.wk_mp, jseg->js_size);
4492 KASSERT(LIST_EMPTY(&jseg->js_entries),
4493 ("free_jseg: Freed jseg has valid entries."));
4494 WORKITEM_FREE(jseg, D_JSEG);
4505 struct jseg *jseg;
4511 while ((jseg = TAILQ_FIRST(&jblocks->jb_segs)) != NULL) {
4517 if (jseg->js_refs != 0) {
4518 jblocks->jb_oldestseg = jseg;
4521 if ((jseg->js_state & ALLCOMPLETE) != ALLCOMPLETE)
4523 if (jseg->js_seq > jblocks->jb_oldestwrseq)
4529 if (jseg->js_seq == jblocks->jb_oldestwrseq &&
4530 jseg->js_cnt != 0)
4532 free_jseg(jseg, jblocks);
4538 if (jseg)
4539 for (jseg = jblocks->jb_oldestseg; jseg != NULL;
4540 jseg = TAILQ_NEXT(jseg, js_next))
4541 if (jseg->js_refs != 0)
4543 jblocks->jb_oldestseg = jseg;
4554 * Release one reference to a jseg and free it if the count reaches 0. This
4558 rele_jseg(jseg)
4559 struct jseg *jseg;
4562 KASSERT(jseg->js_refs > 0,
4563 ("free_jseg: Invalid refcnt %d", jseg->js_refs));
4564 if (--jseg->js_refs != 0)
4566 free_jsegs(jseg->js_jblocks);
4570 * Release a jsegdep and decrement the jseg count.