Lines Matching defs:jnewblk

628 SOFTDEP_TYPE(JNEWBLK, jnewblk, "Journal new block");
726 static int jnewblk_rollforward(struct jnewblk *, struct fs *, struct cg *,
732 static void handle_written_jnewblk(struct jnewblk *);
743 static void jnewblk_write(struct jnewblk *, struct jseg *, uint8_t *);
750 static struct jnewblk *cancel_newblk(struct newblk *, struct worklist *,
760 static int jnewblk_rollback(struct jnewblk *, struct fs *, struct cg *,
801 static void free_jnewblk(struct jnewblk *);
807 static void cancel_jnewblk(struct jnewblk *, struct workhead *);
3448 jnewblk_write(struct jnewblk *jnewblk,
3454 jnewblk->jn_jsegdep->jd_seg = jseg;
3457 rec->jb_ino = jnewblk->jn_ino;
3458 rec->jb_blkno = jnewblk->jn_blkno;
3459 rec->jb_lbn = jnewblk->jn_lbn;
3460 rec->jb_frags = jnewblk->jn_frags;
3461 rec->jb_oldfrags = jnewblk->jn_oldfrags;
4098 * Called once a jnewblk journal is written. The allocdirect or allocindir
4105 handle_written_jnewblk(struct jnewblk *jnewblk)
4114 jsegdep = jnewblk->jn_jsegdep;
4115 jnewblk->jn_jsegdep = NULL;
4116 if (jnewblk->jn_dep == NULL)
4118 switch (jnewblk->jn_dep->wk_type) {
4126 newblk = WK_NEWBLK(jnewblk->jn_dep);
4141 freefrag = WK_FREEFRAG(jnewblk->jn_dep);
4149 freework = WK_FREEWORK(jnewblk->jn_dep);
4155 jnewblk->jn_dep->wk_type);
4157 jnewblk->jn_dep = NULL;
4158 free_jnewblk(jnewblk);
4684 * Free a jnewblk structure.
4687 free_jnewblk(struct jnewblk *jnewblk)
4690 if ((jnewblk->jn_state & ALLCOMPLETE) != ALLCOMPLETE)
4692 LIST_REMOVE(jnewblk, jn_deps);
4693 if (jnewblk->jn_dep != NULL)
4695 WORKITEM_FREE(jnewblk, D_JNEWBLK);
4699 * Cancel a jnewblk which has been been made redundant by frag extension.
4702 cancel_jnewblk(struct jnewblk *jnewblk, struct workhead *wkhd)
4706 CTR1(KTR_SUJ, "cancel_jnewblk: blkno %jd", jnewblk->jn_blkno);
4707 jsegdep = jnewblk->jn_jsegdep;
4708 if (jnewblk->jn_jsegdep == NULL || jnewblk->jn_dep == NULL)
4710 jnewblk->jn_jsegdep = NULL;
4711 jnewblk->jn_dep = NULL;
4712 jnewblk->jn_state |= GOINGAWAY;
4713 if (jnewblk->jn_state & INPROGRESS) {
4714 jnewblk->jn_state &= ~INPROGRESS;
4715 WORKLIST_REMOVE(&jnewblk->jn_list);
4719 remove_from_journal(&jnewblk->jn_list);
4721 wake_worklist(&jnewblk->jn_list);
4722 WORKLIST_INSERT(wkhd, &jnewblk->jn_list);
5308 struct jnewblk *jnewblk;
5316 jnewblk = NULL;
5323 jnewblk = malloc(sizeof(*jnewblk), M_JNEWBLK, M_SOFTDEP_FLAGS);
5324 workitem_alloc(&jnewblk->jn_list, D_JNEWBLK, mp);
5325 jnewblk->jn_jsegdep = newjsegdep(&jnewblk->jn_list);
5326 jnewblk->jn_state = ATTACHED;
5327 jnewblk->jn_blkno = newblkno;
5328 jnewblk->jn_frags = frags;
5329 jnewblk->jn_oldfrags = oldfrags;
5339 bno = dtogd(fs, jnewblk->jn_blkno);
5340 for (i = jnewblk->jn_oldfrags; i < jnewblk->jn_frags;
5346 jnewblk->jn_oldfrags,
5347 jnewblk->jn_frags,
5348 jnewblk->jn_state,
5349 jnewblk->jn_dep);
5363 if (jnewblk) {
5364 jnewblk->jn_dep = (struct worklist *)newblk;
5365 LIST_INSERT_HEAD(&bmsafemap->sm_jnewblkhd, jnewblk, jn_deps);
5371 newblk->nb_jnewblk = jnewblk;
5506 struct jnewblk *jnewblk;
5580 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
5581 jnewblk->jn_ino = ip->i_number;
5582 jnewblk->jn_lbn = lbn;
5583 add_to_journal(&jnewblk->jn_list);
5641 struct jnewblk *njnewblk;
5642 struct jnewblk *jnewblk;
5649 /* Replace a jfreefrag with a jnewblk. */
5661 * Handle merging of two jnewblk records that describe
5664 jnewblk = WK_JNEWBLK(old);
5666 if (jnewblk->jn_blkno != njnewblk->jn_blkno)
5671 if (jnewblk->jn_state & UNDONE) {
5672 jnewblk->jn_state &= ~UNDONE;
5682 jnewblk->jn_state |= ATTACHED | COMPLETE;
5683 njnewblk->jn_oldfrags = jnewblk->jn_oldfrags;
5684 cancel_jnewblk(jnewblk, wkhd);
5685 WORKLIST_REMOVE(&jnewblk->jn_list);
5686 free_jnewblk(jnewblk);
5757 newadp->ad_block.nb_jnewblk = (struct jnewblk *)
5901 struct jnewblk *jnewblk;
5955 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
5956 jnewblk->jn_ino = ip->i_number;
5957 jnewblk->jn_lbn = lbn;
5958 add_to_journal(&jnewblk->jn_list);
6041 struct jnewblk *jnewblk;
6059 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
6060 jnewblk->jn_ino = ip->i_number;
6061 jnewblk->jn_lbn = lbn;
6062 add_to_journal(&jnewblk->jn_list);
7613 * If the journal hasn't been written the jnewblk must be passed
7633 static struct jnewblk *
7639 struct jnewblk *jnewblk;
7664 jnewblk = newblk->nb_jnewblk;
7665 if (jnewblk != NULL && wk != NULL) {
7667 jnewblk->jn_dep = wk;
7680 return (jnewblk);
7713 ("free_newblk: jnewblk %p still attached", newblk->nb_jnewblk));
7963 * the disk. This routine may be freeing a jnewblk which never made it to
7971 struct jnewblk *jnewblk;
8005 * If we are canceling an existing jnewblk pass it to the free
8010 jnewblk = freework->fw_jnewblk;
8011 if (jnewblk != NULL) {
8012 cancel_jnewblk(jnewblk, &wkhd);
8028 * The jnewblk will be discarded and the bits in the map never
8562 * If the journal hasn't been written the jnewblk must be passed
10297 * We have to wait for the jnewblk to be journaled
10992 struct jnewblk *jnewblk;
11032 jnewblk = WK_JNEWBLK(wk);
11033 KASSERT(jnewblk->jn_state & GOINGAWAY,
11034 ("softdep_setup_blkfree: jnewblk not canceled."));
11039 * bitmap before we discard the jnewblk.
11043 bno = dtogd(fs, jnewblk->jn_blkno);
11044 for (i = jnewblk->jn_oldfrags;
11045 i < jnewblk->jn_frags; i++) {
11050 (uintmax_t)jnewblk->jn_blkno);
11059 free_jnewblk(jnewblk);
11071 LIST_FOREACH(jnewblk, &bmsafemap->sm_jnewblkhd, jn_deps) {
11076 if ((jnewblk->jn_state & (ATTACHED | COMPLETE | DEPCOMPLETE)) ==
11079 jstart = jnewblk->jn_blkno + jnewblk->jn_oldfrags;
11080 jend = jnewblk->jn_blkno + jnewblk->jn_frags;
11084 jnewblk->jn_state, jnewblk->jn_blkno,
11085 jnewblk->jn_oldfrags, jnewblk->jn_frags,
11086 jnewblk->jn_dep);
11102 struct jnewblk *jnewblk,
11113 cgbno = dtogd(fs, jnewblk->jn_blkno);
11118 for (i = jnewblk->jn_oldfrags; i < jnewblk->jn_frags; i++)
11133 cgbno += jnewblk->jn_oldfrags;
11154 jnewblk->jn_state &= ~ATTACHED;
11155 jnewblk->jn_state |= UNDONE;
11166 struct jnewblk *jnewblk;
11209 LIST_FOREACH(jnewblk, &bmsafemap->sm_jnewblkhd, jn_deps) {
11210 if (jnewblk_rollback(jnewblk, fs, cgp, blksfree))
11213 "marked free", jnewblk->jn_blkno);
12079 struct jnewblk *jnewblk,
12091 cgbno = dtogd(fs, jnewblk->jn_blkno);
12092 for (i = jnewblk->jn_oldfrags; i < jnewblk->jn_frags; i++) {
12104 cgbno += jnewblk->jn_oldfrags;
12144 struct jnewblk *jnewblk, *jntmp;
12205 LIST_FOREACH_SAFE(jnewblk, &bmsafemap->sm_jnewblkhd, jn_deps,
12207 if ((jnewblk->jn_state & UNDONE) == 0)
12211 jnewblk_rollforward(jnewblk, fs, cgp, blksfree))
12213 jnewblk->jn_state &= ~(UNDONE | NEWBLOCK);
12214 jnewblk->jn_state |= ATTACHED;
12215 free_jnewblk(jnewblk);
14845 db_printf(" jnewblk %p, bmsafemap %p, freefrag %p\n",