Lines Matching defs:newblk
612 SOFTDEP_TYPE(NEWBLK, newblk, "New block or frag allocation dependency");
750 static struct jnewblk *cancel_newblk(struct newblk *, struct worklist *,
826 static void newblk_freefrag(struct newblk*);
827 static void free_newblk(struct newblk *);
857 struct newblk **);
858 static int newblk_lookup(struct mount *, ufs2_daddr_t, int, struct newblk **);
2178 * 3) newblk structures identified by mount point and
2188 * dependency structures. Lookup of newblk structures is needed to
2379 * Structures and routines associated with newblk caching.
2388 struct newblk **newblkpp)
2390 struct newblk *newblk;
2392 LIST_FOREACH(newblk, newblkhd, nb_hash) {
2393 if (newblkno != newblk->nb_newblkno)
2400 if ((flags & DEPALLOC) && newblk->nb_list.wk_type != D_NEWBLK)
2404 if (newblk) {
2405 *newblkpp = newblk;
2413 * Look up a newblk. Return 1 if found, 0 if not found.
2421 struct newblk **newblkpp)
2423 struct newblk *newblk;
2440 newblk = malloc(sizeof(union allblk), M_NEWBLK,
2442 workitem_alloc(&newblk->nb_list, D_NEWBLK, mp);
2445 WORKITEM_FREE(newblk, D_NEWBLK);
2448 newblk->nb_freefrag = NULL;
2449 LIST_INIT(&newblk->nb_indirdeps);
2450 LIST_INIT(&newblk->nb_newdirblk);
2451 LIST_INIT(&newblk->nb_jwork);
2452 newblk->nb_state = ATTACHED;
2453 newblk->nb_newblkno = newblkno;
2454 LIST_INSERT_HEAD(newblkhd, newblk, nb_hash);
2455 *newblkpp = newblk;
4111 struct newblk *newblk;
4126 newblk = WK_NEWBLK(jnewblk->jn_dep);
4127 newblk->nb_jnewblk = NULL;
4128 if ((newblk->nb_state & GOINGAWAY) == 0) {
4129 bmsafemap = newblk->nb_bmsafemap;
4130 newblk->nb_state |= ONDEPLIST;
4131 LIST_INSERT_HEAD(&bmsafemap->sm_newblkhd, newblk,
4134 jwork_insert(&newblk->nb_jwork, jsegdep);
5306 struct newblk *newblk;
5359 if (newblk_lookup(mp, newblkno, DEPALLOC, &newblk) != 0)
5361 newblk->nb_bmsafemap = bmsafemap = bmsafemap_lookup(mp, bp,
5364 jnewblk->jn_dep = (struct worklist *)newblk;
5367 newblk->nb_state |= ONDEPLIST;
5368 LIST_INSERT_HEAD(&bmsafemap->sm_newblkhd, newblk, nb_deps);
5370 newblk->nb_bmsafemap = bmsafemap;
5371 newblk->nb_jnewblk = jnewblk;
5507 struct newblk *newblk;
5562 if (newblk_lookup(mp, newblkno, 0, &newblk) == 0)
5564 KASSERT(newblk->nb_list.wk_type == D_NEWBLK,
5565 ("softdep_setup_allocdirect: newblk already initialized"));
5567 * Convert the newblk to an allocdirect.
5569 WORKITEM_REASSIGN(newblk, D_ALLOCDIRECT);
5570 adp = (struct allocdirect *)newblk;
5571 newblk->nb_freefrag = freefrag;
5580 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
5591 WORKLIST_INSERT(&bp->b_dep, &newblk->nb_list);
5902 struct newblk *newblk;
5936 if (newblk_lookup(mp, newblkno, 0, &newblk) == 0)
5938 KASSERT(newblk->nb_list.wk_type == D_NEWBLK,
5939 ("softdep_setup_allocext: newblk already initialized"));
5941 * Convert the newblk to an allocdirect.
5943 WORKITEM_REASSIGN(newblk, D_ALLOCDIRECT);
5944 adp = (struct allocdirect *)newblk;
5945 newblk->nb_freefrag = freefrag;
5955 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
5966 WORKLIST_INSERT(&bp->b_dep, &newblk->nb_list);
6038 struct newblk *newblk;
6049 if (newblk_lookup(ITOVFS(ip), newblkno, 0, &newblk) == 0)
6051 KASSERT(newblk->nb_list.wk_type == D_NEWBLK,
6052 ("newallocindir: newblk already initialized"));
6053 WORKITEM_REASSIGN(newblk, D_ALLOCINDIR);
6054 newblk->nb_freefrag = freefrag;
6055 aip = (struct allocindir *)newblk;
6059 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
6178 struct newblk *newblk;
6239 if (newblk_lookup(mp, dbtofsb(fs, bp->b_blkno), 0, &newblk))
6240 LIST_INSERT_HEAD(&newblk->nb_indirdeps, indirdep, ir_next);
6478 struct newblk *newblk;
6527 * live on this newblk.
6531 &newblk) == 0)
6533 LIST_FOREACH(indirn, &newblk->nb_indirdeps, ir_next)
7456 * truncated portion of the directory and newblk must remain if
7589 struct newblk *newblk;
7593 newblk = (struct newblk *)adp;
7602 if (freework->fw_blkno == newblk->nb_newblkno)
7608 * If a newblk exists at all we still have the journal entry that
7620 freework->fw_jnewblk = cancel_newblk(newblk, &freework->fw_list,
7622 WORKLIST_INSERT(&freeblks->fb_freeworkhd, &newblk->nb_list);
7635 struct newblk *newblk,
7641 CTR1(KTR_SUJ, "cancel_newblk: blkno %jd", newblk->nb_newblkno);
7643 newblk->nb_state |= GOINGAWAY;
7646 * attached to this newblk to cancel them and gather journal
7651 * indirdep_complete() when this newblk is freed.
7653 if (newblk->nb_state & ONDEPLIST) {
7654 newblk->nb_state &= ~ONDEPLIST;
7655 LIST_REMOVE(newblk, nb_deps);
7657 if (newblk->nb_state & ONWORKLIST)
7658 WORKLIST_REMOVE(&newblk->nb_list);
7664 jnewblk = newblk->nb_jnewblk;
7666 newblk->nb_jnewblk = NULL;
7669 if (!LIST_EMPTY(&newblk->nb_jwork))
7670 jwork_move(wkhd, &newblk->nb_jwork);
7675 if ((wk = LIST_FIRST(&newblk->nb_newdirblk)) != NULL)
7677 if (!LIST_EMPTY(&newblk->nb_newdirblk))
7684 * Schedule the freefrag associated with a newblk to be released once
7688 newblk_freefrag(struct newblk *newblk)
7692 if (newblk->nb_freefrag == NULL)
7694 freefrag = newblk->nb_freefrag;
7695 newblk->nb_freefrag = NULL;
7702 * Free a newblk. Generate a new freefrag work request if appropriate.
7707 free_newblk(struct newblk *newblk)
7712 KASSERT(newblk->nb_jnewblk == NULL,
7713 ("free_newblk: jnewblk %p still attached", newblk->nb_jnewblk));
7714 KASSERT(newblk->nb_list.wk_type != D_NEWBLK,
7715 ("free_newblk: unclaimed newblk"));
7716 LOCK_OWNED(VFSTOUFS(newblk->nb_list.wk_mp));
7717 newblk_freefrag(newblk);
7718 if (newblk->nb_state & ONDEPLIST)
7719 LIST_REMOVE(newblk, nb_deps);
7720 if (newblk->nb_state & ONWORKLIST)
7721 WORKLIST_REMOVE(&newblk->nb_list);
7722 LIST_REMOVE(newblk, nb_hash);
7723 if ((wk = LIST_FIRST(&newblk->nb_newdirblk)) != NULL)
7725 if (!LIST_EMPTY(&newblk->nb_newdirblk))
7727 while ((indirdep = LIST_FIRST(&newblk->nb_indirdeps)) != NULL)
7729 handle_jwork(&newblk->nb_jwork);
7730 WORKITEM_FREE(newblk, D_NEWBLK);
8128 struct newblk *newblk;
8161 newblk = WK_NEWBLK(wk);
8162 if (newblk->nb_jnewblk) {
8163 freework->fw_jnewblk = newblk->nb_jnewblk;
8164 newblk->nb_jnewblk->jn_dep = &freework->fw_list;
8165 newblk->nb_jnewblk = NULL;
8167 free_newblk(newblk);
8529 struct newblk *newblk;
8531 newblk = (struct newblk *)aip;
8537 if (bp && (trunc || newblk->nb_jnewblk)) {
8553 if (trunc && (freefrag = newblk->nb_freefrag) != NULL) {
8554 newblk->nb_freefrag = NULL;
8564 * this by leaving the journal dependency on the newblk to be freed
8567 cancel_newblk(newblk, NULL, &freeblks->fb_jwork);
8568 WORKLIST_INSERT(&freeblks->fb_freeworkhd, &newblk->nb_list);
8586 struct newblk *newblk;
8638 newblk = WK_NEWBLK(wk);
8642 WORKLIST_INSERT(&newblk->nb_newdirblk, &newdirblk->db_list);
8713 struct newblk *newblk;
8849 if (newblk_lookup(mp, dbtofsb(fs, bp->b_blkno), 0, &newblk)
8852 WORKLIST_INSERT(&newblk->nb_newdirblk, &newdirblk->db_list);
10227 struct newblk *newblk;
10303 newblk = WK_NEWBLK(wk);
10304 if (newblk->nb_jnewblk != NULL &&
10305 indirblk_lookup(newblk->nb_list.wk_mp,
10306 newblk->nb_newblkno)) {
10309 jwait(&newblk->nb_jnewblk->jn_list, MNT_WAIT);
10882 ("free_indirdep: %p still on newblk list.", indirdep));
11223 newblk, nb_deps);
12141 struct newblk *newblk;
12225 newblk, nb_deps);
12232 while ((newblk = LIST_FIRST(&bmsafemap->sm_newblkwr))) {
12233 newblk->nb_state |= DEPCOMPLETE;
12234 newblk->nb_state &= ~ONDEPLIST;
12235 newblk->nb_bmsafemap = NULL;
12236 LIST_REMOVE(newblk, nb_deps);
12237 if (newblk->nb_list.wk_type == D_ALLOCDIRECT)
12239 WK_ALLOCDIRECT(&newblk->nb_list), NULL);
12240 else if (newblk->nb_list.wk_type == D_ALLOCINDIR)
12242 WK_ALLOCINDIR(&newblk->nb_list));
12243 else if (newblk->nb_list.wk_type != D_NEWBLK)
12245 TYPENAME(newblk->nb_list.wk_type));
12967 struct newblk *newblk;
12996 newblk = WK_NEWBLK(wk);
12997 if (newblk->nb_jnewblk != NULL) {
13002 jwait(&newblk->nb_jnewblk->jn_list, waitfor);
13005 if (newblk->nb_state & DEPCOMPLETE ||
13008 nbp = newblk->nb_bmsafemap->sm_buf;
13031 newblk = (struct newblk *)aip;
13032 if (newblk->nb_jnewblk != NULL) {
13033 jwait(&newblk->nb_jnewblk->jn_list,
13037 if (newblk->nb_state & DEPCOMPLETE)
13039 nbp = newblk->nb_bmsafemap->sm_buf;
13178 struct newblk *newblk;
13187 newblk = (struct newblk *)adp;
13188 if (newblk->nb_jnewblk != NULL) {
13189 jwait(&newblk->nb_jnewblk->jn_list, MNT_WAIT);
13192 if (newblk->nb_state & DEPCOMPLETE)
13194 bp = newblk->nb_bmsafemap->sm_buf;
13221 struct newblk *newblk;
13243 if (newblk_lookup(mp, blkno, 0, &newblk) == 0) {
13247 if (newblk->nb_list.wk_type != D_ALLOCDIRECT)
13248 panic("flush_newblk_dep: Bad newblk %p", newblk);
13252 if (newblk->nb_jnewblk != NULL) {
13253 jwait(&newblk->nb_jnewblk->jn_list, MNT_WAIT);
13259 if ((newblk->nb_state & DEPCOMPLETE) == 0) {
13260 bp = newblk->nb_bmsafemap->sm_buf;
14336 struct newblk *newblk;
14442 newblk = WK_NEWBLK(wk);
14443 if (newblk->nb_jnewblk) {
14840 newblk_print(struct newblk *nbp)