sys/ufs/ffs/ffs_softdep.c
2497
struct jseg *jseg;
sys/ufs/ffs/ffs_softdep.c
2502
jseg = TAILQ_LAST(&jblocks->jb_segs, jseglst);
sys/ufs/ffs/ffs_softdep.c
2503
if (jseg == NULL)
sys/ufs/ffs/ffs_softdep.c
2506
LIST_INSERT_HEAD(&jseg->js_indirs, freework, fw_segs);
sys/ufs/ffs/ffs_softdep.c
3380
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3386
rec->jsr_seq = jseg->js_seq;
sys/ufs/ffs/ffs_softdep.c
3387
rec->jsr_oldest = jseg->js_oldseq;
sys/ufs/ffs/ffs_softdep.c
3388
rec->jsr_cnt = jseg->js_cnt;
sys/ufs/ffs/ffs_softdep.c
3389
rec->jsr_blocks = jseg->js_size / ump->um_devvp->v_bufobj.bo_bsize;
sys/ufs/ffs/ffs_softdep.c
3396
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3400
inoref->if_jsegdep->jd_seg = jseg;
sys/ufs/ffs/ffs_softdep.c
3410
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3417
inoref_write(&jaddref->ja_ref, jseg, rec);
sys/ufs/ffs/ffs_softdep.c
3422
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3429
inoref_write(&jremref->jr_ref, jseg, rec);
sys/ufs/ffs/ffs_softdep.c
3434
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3449
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3454
jnewblk->jn_jsegdep->jd_seg = jseg;
sys/ufs/ffs/ffs_softdep.c
3466
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3471
jfreeblk->jf_dep.jb_jsegdep->jd_seg = jseg;
sys/ufs/ffs/ffs_softdep.c
3483
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3488
jfreefrag->fr_jsegdep->jd_seg = jseg;
sys/ufs/ffs/ffs_softdep.c
3500
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3505
jtrunc->jt_dep.jb_jsegdep->jd_seg = jseg;
sys/ufs/ffs/ffs_softdep.c
3515
struct jseg *jseg,
sys/ufs/ffs/ffs_softdep.c
3551
struct jseg *oldest;
sys/ufs/ffs/ffs_softdep.c
3552
struct jseg *jseg;
sys/ufs/ffs/ffs_softdep.c
3559
jseg = bp->bio_caller1;
sys/ufs/ffs/ffs_softdep.c
3560
if (jseg == NULL) {
sys/ufs/ffs/ffs_softdep.c
3564
ump = VFSTOUFS(jseg->js_list.wk_mp);
sys/ufs/ffs/ffs_softdep.c
3571
while (jseg != NULL && (jseg->js_state & COMPLETE) == 0) {
sys/ufs/ffs/ffs_softdep.c
3572
jseg->js_state |= COMPLETE;
sys/ufs/ffs/ffs_softdep.c
3573
oldest = jseg;
sys/ufs/ffs/ffs_softdep.c
3574
jseg = TAILQ_PREV(jseg, jseglst, js_next);
sys/ufs/ffs/ffs_softdep.c
3620
struct jseg *jseg;
sys/ufs/ffs/ffs_softdep.c
3640
jseg = NULL;
sys/ufs/ffs/ffs_softdep.c
3686
jseg = malloc(sizeof(*jseg), M_JSEG, M_SOFTDEP_FLAGS);
sys/ufs/ffs/ffs_softdep.c
3687
workitem_alloc(&jseg->js_list, D_JSEG, mp);
sys/ufs/ffs/ffs_softdep.c
3688
LIST_INIT(&jseg->js_entries);
sys/ufs/ffs/ffs_softdep.c
3689
LIST_INIT(&jseg->js_indirs);
sys/ufs/ffs/ffs_softdep.c
3690
jseg->js_state = ATTACHED;
sys/ufs/ffs/ffs_softdep.c
3692
jseg->js_state |= COMPLETE;
sys/ufs/ffs/ffs_softdep.c
3695
jseg->js_jblocks = jblocks;
sys/ufs/ffs/ffs_softdep.c
3708
WORKITEM_FREE(jseg, D_JSEG);
sys/ufs/ffs/ffs_softdep.c
3740
jseg->js_buf = bp;
sys/ufs/ffs/ffs_softdep.c
3741
jseg->js_cnt = cnt;
sys/ufs/ffs/ffs_softdep.c
3742
jseg->js_refs = cnt + 1; /* Self ref. */
sys/ufs/ffs/ffs_softdep.c
3743
jseg->js_size = size;
sys/ufs/ffs/ffs_softdep.c
3744
jseg->js_seq = jblocks->jb_nextseq++;
sys/ufs/ffs/ffs_softdep.c
3746
jblocks->jb_oldestseg = jseg;
sys/ufs/ffs/ffs_softdep.c
3747
jseg->js_oldseq = jblocks->jb_oldestseg->js_seq;
sys/ufs/ffs/ffs_softdep.c
3748
TAILQ_INSERT_TAIL(&jblocks->jb_segs, jseg, js_next);
sys/ufs/ffs/ffs_softdep.c
3750
jblocks->jb_writeseg = jseg;
sys/ufs/ffs/ffs_softdep.c
3762
jseg_write(ump, jseg, data);
sys/ufs/ffs/ffs_softdep.c
3780
jseg_write(ump, jseg, data);
sys/ufs/ffs/ffs_softdep.c
3788
WORKLIST_INSERT(&jseg->js_entries, wk);
sys/ufs/ffs/ffs_softdep.c
3791
jaddref_write(WK_JADDREF(wk), jseg, data);
sys/ufs/ffs/ffs_softdep.c
3794
jremref_write(WK_JREMREF(wk), jseg, data);
sys/ufs/ffs/ffs_softdep.c
3797
jmvref_write(WK_JMVREF(wk), jseg, data);
sys/ufs/ffs/ffs_softdep.c
3800
jnewblk_write(WK_JNEWBLK(wk), jseg, data);
sys/ufs/ffs/ffs_softdep.c
3803
jfreeblk_write(WK_JFREEBLK(wk), jseg, data);
sys/ufs/ffs/ffs_softdep.c
3806
jfreefrag_write(WK_JFREEFRAG(wk), jseg, data);
sys/ufs/ffs/ffs_softdep.c
3809
jtrunc_write(WK_JTRUNC(wk), jseg, data);
sys/ufs/ffs/ffs_softdep.c
3812
jfsync_write(WK_JFSYNC(wk), jseg, data);
sys/ufs/ffs/ffs_softdep.c
3833
WORKLIST_INSERT(&bp->b_dep, &jseg->js_list);
sys/ufs/ffs/ffs_softdep.c
3882
complete_jseg(struct jseg *jseg)
sys/ufs/ffs/ffs_softdep.c
3890
while ((wk = LIST_FIRST(&jseg->js_entries)) != NULL) {
sys/ufs/ffs/ffs_softdep.c
3894
KASSERT(i++ < jseg->js_cnt,
sys/ufs/ffs/ffs_softdep.c
3896
i - 1, jseg->js_cnt));
sys/ufs/ffs/ffs_softdep.c
3905
rele_jseg(jseg); /* No jsegdep. */
sys/ufs/ffs/ffs_softdep.c
3922
rele_jseg(jseg); /* No jsegdep. */
sys/ufs/ffs/ffs_softdep.c
3935
rele_jseg(jseg);
sys/ufs/ffs/ffs_softdep.c
3944
complete_jsegs(struct jseg *jseg)
sys/ufs/ffs/ffs_softdep.c
3947
struct jseg *jsegn;
sys/ufs/ffs/ffs_softdep.c
3949
jblocks = jseg->js_jblocks;
sys/ufs/ffs/ffs_softdep.c
3954
if (jseg != jblocks->jb_writeseg)
sys/ufs/ffs/ffs_softdep.c
3957
while (jseg && (jseg->js_state & ALLCOMPLETE) == ALLCOMPLETE) {
sys/ufs/ffs/ffs_softdep.c
3958
jblocks->jb_oldestwrseq = jseg->js_oldseq;
sys/ufs/ffs/ffs_softdep.c
3959
jsegn = TAILQ_NEXT(jseg, js_next);
sys/ufs/ffs/ffs_softdep.c
3960
complete_jseg(jseg);
sys/ufs/ffs/ffs_softdep.c
3961
jseg = jsegn;
sys/ufs/ffs/ffs_softdep.c
3963
jblocks->jb_writeseg = jseg;
sys/ufs/ffs/ffs_softdep.c
3975
handle_written_jseg(struct jseg *jseg, struct buf *bp)
sys/ufs/ffs/ffs_softdep.c
3978
if (jseg->js_refs == 0)
sys/ufs/ffs/ffs_softdep.c
3979
panic("handle_written_jseg: No self-reference on %p", jseg);
sys/ufs/ffs/ffs_softdep.c
3980
jseg->js_state |= DEPCOMPLETE;
sys/ufs/ffs/ffs_softdep.c
3987
complete_jsegs(jseg);
sys/ufs/ffs/ffs_softdep.c
4744
free_jseg(struct jseg *jseg, struct jblocks *jblocks)
sys/ufs/ffs/ffs_softdep.c
4752
while ((freework = LIST_FIRST(&jseg->js_indirs)) != NULL)
sys/ufs/ffs/ffs_softdep.c
4754
if (jblocks->jb_oldestseg == jseg)
sys/ufs/ffs/ffs_softdep.c
4755
jblocks->jb_oldestseg = TAILQ_NEXT(jseg, js_next);
sys/ufs/ffs/ffs_softdep.c
4756
TAILQ_REMOVE(&jblocks->jb_segs, jseg, js_next);
sys/ufs/ffs/ffs_softdep.c
4757
jblocks_free(jblocks, jseg->js_list.wk_mp, jseg->js_size);
sys/ufs/ffs/ffs_softdep.c
4758
KASSERT(LIST_EMPTY(&jseg->js_entries),
sys/ufs/ffs/ffs_softdep.c
4760
WORKITEM_FREE(jseg, D_JSEG);
sys/ufs/ffs/ffs_softdep.c
4770
struct jseg *jseg;
sys/ufs/ffs/ffs_softdep.c
4776
while ((jseg = TAILQ_FIRST(&jblocks->jb_segs)) != NULL) {
sys/ufs/ffs/ffs_softdep.c
4782
if (jseg->js_refs != 0) {
sys/ufs/ffs/ffs_softdep.c
4783
jblocks->jb_oldestseg = jseg;
sys/ufs/ffs/ffs_softdep.c
4786
if ((jseg->js_state & ALLCOMPLETE) != ALLCOMPLETE)
sys/ufs/ffs/ffs_softdep.c
4788
if (jseg->js_seq > jblocks->jb_oldestwrseq)
sys/ufs/ffs/ffs_softdep.c
4794
if (jseg->js_seq == jblocks->jb_oldestwrseq &&
sys/ufs/ffs/ffs_softdep.c
4795
jseg->js_cnt != 0)
sys/ufs/ffs/ffs_softdep.c
4797
free_jseg(jseg, jblocks);
sys/ufs/ffs/ffs_softdep.c
4803
if (jseg)
sys/ufs/ffs/ffs_softdep.c
4804
for (jseg = jblocks->jb_oldestseg; jseg != NULL;
sys/ufs/ffs/ffs_softdep.c
4805
jseg = TAILQ_NEXT(jseg, js_next))
sys/ufs/ffs/ffs_softdep.c
4806
if (jseg->js_refs != 0)
sys/ufs/ffs/ffs_softdep.c
4808
jblocks->jb_oldestseg = jseg;
sys/ufs/ffs/ffs_softdep.c
4823
rele_jseg(struct jseg *jseg)
sys/ufs/ffs/ffs_softdep.c
4826
KASSERT(jseg->js_refs > 0,
sys/ufs/ffs/ffs_softdep.c
4827
("free_jseg: Invalid refcnt %d", jseg->js_refs));
sys/ufs/ffs/ffs_softdep.c
4828
if (--jseg->js_refs != 0)
sys/ufs/ffs/ffs_softdep.c
4830
free_jsegs(jseg->js_jblocks);
sys/ufs/ffs/ffs_softdep.c
631
SOFTDEP_TYPE(JSEG, jseg, "Journal segment");
sys/ufs/ffs/ffs_softdep.c
731
static void handle_written_jseg(struct jseg *, struct buf *);
sys/ufs/ffs/ffs_softdep.c
735
static void complete_jseg(struct jseg *);
sys/ufs/ffs/ffs_softdep.c
736
static void complete_jsegs(struct jseg *);
sys/ufs/ffs/ffs_softdep.c
737
static void jseg_write(struct ufsmount *ump, struct jseg *, uint8_t *);
sys/ufs/ffs/ffs_softdep.c
738
static void jaddref_write(struct jaddref *, struct jseg *, uint8_t *);
sys/ufs/ffs/ffs_softdep.c
739
static void jremref_write(struct jremref *, struct jseg *, uint8_t *);
sys/ufs/ffs/ffs_softdep.c
740
static void jmvref_write(struct jmvref *, struct jseg *, uint8_t *);
sys/ufs/ffs/ffs_softdep.c
741
static void jtrunc_write(struct jtrunc *, struct jseg *, uint8_t *);
sys/ufs/ffs/ffs_softdep.c
742
static void jfsync_write(struct jfsync *, struct jseg *, uint8_t *data);
sys/ufs/ffs/ffs_softdep.c
743
static void jnewblk_write(struct jnewblk *, struct jseg *, uint8_t *);
sys/ufs/ffs/ffs_softdep.c
744
static void jfreeblk_write(struct jfreeblk *, struct jseg *, uint8_t *);
sys/ufs/ffs/ffs_softdep.c
745
static void jfreefrag_write(struct jfreefrag *, struct jseg *, uint8_t *);
sys/ufs/ffs/ffs_softdep.c
746
static inline void inoref_write(struct inoref *, struct jseg *,
sys/ufs/ffs/ffs_softdep.c
799
static void rele_jseg(struct jseg *);
sys/ufs/ffs/ffs_softdep.c
800
static void free_jseg(struct jseg *, struct jblocks *);
sys/ufs/ffs/softdep.h
1005
struct jseg *jb_writeseg; /* Next write to complete. */
sys/ufs/ffs/softdep.h
1006
struct jseg *jb_oldestseg; /* Oldest segment with valid entries. */
sys/ufs/ffs/softdep.h
239
#define WK_JSEG(wk) ((struct jseg *)(wk))
sys/ufs/ffs/softdep.h
266
TAILQ_HEAD(jseglst, jseg);
sys/ufs/ffs/softdep.h
959
struct jseg *jd_seg; /* Our journal record. */
sys/ufs/ffs/softdep.h
976
TAILQ_ENTRY(jseg) js_next; /* List of all unfinished segments. */