Lines Matching defs:newblk

651 SOFTDEP_TYPE(NEWBLK, newblk, "New block or frag allocation dependency");
786 static struct jnewblk *cancel_newblk(struct newblk *, struct worklist *,
862 static void newblk_freefrag(struct newblk*);
863 static void free_newblk(struct newblk *);
893 struct newblk **);
894 static int newblk_lookup(struct mount *, ufs2_daddr_t, int, struct newblk **);
2047 * 3) newblk structures identified by mount point and
2057 * dependency structures. Lookup of newblk structures is needed to
2253 * Structures and routines associated with newblk caching.
2263 struct newblk **newblkpp;
2265 struct newblk *newblk;
2267 LIST_FOREACH(newblk, newblkhd, nb_hash) {
2268 if (newblkno != newblk->nb_newblkno)
2275 if ((flags & DEPALLOC) && newblk->nb_list.wk_type != D_NEWBLK)
2279 if (newblk) {
2280 *newblkpp = newblk;
2288 * Look up a newblk. Return 1 if found, 0 if not found.
2297 struct newblk **newblkpp;
2299 struct newblk *newblk;
2316 newblk = malloc(sizeof(union allblk), M_NEWBLK,
2318 workitem_alloc(&newblk->nb_list, D_NEWBLK, mp);
2321 WORKITEM_FREE(newblk, D_NEWBLK);
2324 newblk->nb_freefrag = NULL;
2325 LIST_INIT(&newblk->nb_indirdeps);
2326 LIST_INIT(&newblk->nb_newdirblk);
2327 LIST_INIT(&newblk->nb_jwork);
2328 newblk->nb_state = ATTACHED;
2329 newblk->nb_newblkno = newblkno;
2330 LIST_INSERT_HEAD(newblkhd, newblk, nb_hash);
2331 *newblkpp = newblk;
3831 struct newblk *newblk;
3846 newblk = WK_NEWBLK(jnewblk->jn_dep);
3847 newblk->nb_jnewblk = NULL;
3848 if ((newblk->nb_state & GOINGAWAY) == 0) {
3849 bmsafemap = newblk->nb_bmsafemap;
3850 newblk->nb_state |= ONDEPLIST;
3851 LIST_INSERT_HEAD(&bmsafemap->sm_newblkhd, newblk,
3854 jwork_insert(&newblk->nb_jwork, jsegdep);
5076 struct newblk *newblk;
5129 if (newblk_lookup(mp, newblkno, DEPALLOC, &newblk) != 0)
5131 newblk->nb_bmsafemap = bmsafemap = bmsafemap_lookup(mp, bp,
5134 jnewblk->jn_dep = (struct worklist *)newblk;
5137 newblk->nb_state |= ONDEPLIST;
5138 LIST_INSERT_HEAD(&bmsafemap->sm_newblkhd, newblk, nb_deps);
5140 newblk->nb_bmsafemap = bmsafemap;
5141 newblk->nb_jnewblk = jnewblk;
5278 struct newblk *newblk;
5318 if (newblk_lookup(mp, newblkno, 0, &newblk) == 0)
5320 KASSERT(newblk->nb_list.wk_type == D_NEWBLK,
5321 ("softdep_setup_allocdirect: newblk already initialized"));
5323 * Convert the newblk to an allocdirect.
5325 WORKITEM_REASSIGN(newblk, D_ALLOCDIRECT);
5326 adp = (struct allocdirect *)newblk;
5327 newblk->nb_freefrag = freefrag;
5336 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
5347 WORKLIST_INSERT(&bp->b_dep, &newblk->nb_list);
5658 struct newblk *newblk;
5675 if (newblk_lookup(mp, newblkno, 0, &newblk) == 0)
5677 KASSERT(newblk->nb_list.wk_type == D_NEWBLK,
5678 ("softdep_setup_allocext: newblk already initialized"));
5680 * Convert the newblk to an allocdirect.
5682 WORKITEM_REASSIGN(newblk, D_ALLOCDIRECT);
5683 adp = (struct allocdirect *)newblk;
5684 newblk->nb_freefrag = freefrag;
5694 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
5705 WORKLIST_INSERT(&bp->b_dep, &newblk->nb_list);
5777 struct newblk *newblk;
5787 if (newblk_lookup(UFSTOVFS(ip->i_ump), newblkno, 0, &newblk) == 0)
5789 KASSERT(newblk->nb_list.wk_type == D_NEWBLK,
5790 ("newallocindir: newblk already initialized"));
5791 WORKITEM_REASSIGN(newblk, D_ALLOCINDIR);
5792 newblk->nb_freefrag = freefrag;
5793 aip = (struct allocindir *)newblk;
5797 if ((jnewblk = newblk->nb_jnewblk) != NULL) {
5915 struct newblk *newblk;
5976 if (newblk_lookup(mp, dbtofsb(fs, bp->b_blkno), 0, &newblk))
5977 LIST_INSERT_HEAD(&newblk->nb_indirdeps, indirdep, ir_next);
6209 struct newblk *newblk;
6272 * live on this newblk.
6275 newblk_lookup(mp, dbtofsb(ip->i_fs, bp->b_blkno), 0, &newblk);
6276 LIST_FOREACH(indirn, &newblk->nb_indirdeps, ir_next)
7179 * truncated portion of the directory and newblk must remain if
7312 struct newblk *newblk;
7316 newblk = (struct newblk *)adp;
7325 if (freework->fw_blkno == newblk->nb_newblkno)
7331 * If a newblk exists at all we still have the journal entry that
7343 freework->fw_jnewblk = cancel_newblk(newblk, &freework->fw_list,
7345 WORKLIST_INSERT(&freeblks->fb_freeworkhd, &newblk->nb_list);
7358 cancel_newblk(newblk, wk, wkhd)
7359 struct newblk *newblk;
7365 CTR1(KTR_SUJ, "cancel_newblk: blkno %jd", newblk->nb_newblkno);
7367 newblk->nb_state |= GOINGAWAY;
7370 * attached to this newblk to cancel them and gather journal
7375 * indirdep_complete() when this newblk is freed.
7377 if (newblk->nb_state & ONDEPLIST) {
7378 newblk->nb_state &= ~ONDEPLIST;
7379 LIST_REMOVE(newblk, nb_deps);
7381 if (newblk->nb_state & ONWORKLIST)
7382 WORKLIST_REMOVE(&newblk->nb_list);
7388 jnewblk = newblk->nb_jnewblk;
7390 newblk->nb_jnewblk = NULL;
7393 if (!LIST_EMPTY(&newblk->nb_jwork))
7394 jwork_move(wkhd, &newblk->nb_jwork);
7399 if ((wk = LIST_FIRST(&newblk->nb_newdirblk)) != NULL)
7401 if (!LIST_EMPTY(&newblk->nb_newdirblk))
7408 * Schedule the freefrag associated with a newblk to be released once
7412 newblk_freefrag(newblk)
7413 struct newblk *newblk;
7417 if (newblk->nb_freefrag == NULL)
7419 freefrag = newblk->nb_freefrag;
7420 newblk->nb_freefrag = NULL;
7427 * Free a newblk. Generate a new freefrag work request if appropriate.
7432 free_newblk(newblk)
7433 struct newblk *newblk;
7438 KASSERT(newblk->nb_jnewblk == NULL,
7439 ("free_newblk: jnewblk %p still attached", newblk->nb_jnewblk));
7440 KASSERT(newblk->nb_list.wk_type != D_NEWBLK,
7441 ("free_newblk: unclaimed newblk"));
7442 LOCK_OWNED(VFSTOUFS(newblk->nb_list.wk_mp));
7443 newblk_freefrag(newblk);
7444 if (newblk->nb_state & ONDEPLIST)
7445 LIST_REMOVE(newblk, nb_deps);
7446 if (newblk->nb_state & ONWORKLIST)
7447 WORKLIST_REMOVE(&newblk->nb_list);
7448 LIST_REMOVE(newblk, nb_hash);
7449 if ((wk = LIST_FIRST(&newblk->nb_newdirblk)) != NULL)
7451 if (!LIST_EMPTY(&newblk->nb_newdirblk))
7453 while ((indirdep = LIST_FIRST(&newblk->nb_indirdeps)) != NULL)
7455 handle_jwork(&newblk->nb_jwork);
7456 WORKITEM_FREE(newblk, D_NEWBLK);
7866 struct newblk *newblk;
7897 newblk = WK_NEWBLK(wk);
7898 if (newblk->nb_jnewblk) {
7899 freework->fw_jnewblk = newblk->nb_jnewblk;
7900 newblk->nb_jnewblk->jn_dep = &freework->fw_list;
7901 newblk->nb_jnewblk = NULL;
7903 free_newblk(newblk);
8257 struct newblk *newblk;
8259 newblk = (struct newblk *)aip;
8265 if (bp && (trunc || newblk->nb_jnewblk)) {
8281 if (trunc && (freefrag = newblk->nb_freefrag) != NULL) {
8282 newblk->nb_freefrag = NULL;
8292 * this by leaving the journal dependency on the newblk to be freed
8295 cancel_newblk(newblk, NULL, &freeblks->fb_jwork);
8296 WORKLIST_INSERT(&freeblks->fb_freeworkhd, &newblk->nb_list);
8314 struct newblk *newblk;
8366 newblk = WK_NEWBLK(wk);
8370 WORKLIST_INSERT(&newblk->nb_newdirblk, &newdirblk->db_list);
8441 struct newblk *newblk;
8577 if (newblk_lookup(mp, dbtofsb(fs, bp->b_blkno), 0, &newblk)
8580 WORKLIST_INSERT(&newblk->nb_newdirblk, &newdirblk->db_list);
9936 struct newblk *newblk;
10014 newblk = WK_NEWBLK(wk);
10015 if (newblk->nb_jnewblk != NULL &&
10016 indirblk_lookup(newblk->nb_list.wk_mp,
10017 newblk->nb_newblkno)) {
10020 jwait(&newblk->nb_jnewblk->jn_list, MNT_WAIT);
10587 ("free_indirdep: %p still on newblk list.", indirdep));
10923 newblk, nb_deps);
11735 struct newblk *newblk;
11807 while ((newblk = LIST_FIRST(&bmsafemap->sm_newblkwr))) {
11808 newblk->nb_state |= DEPCOMPLETE;
11809 newblk->nb_state &= ~ONDEPLIST;
11810 newblk->nb_bmsafemap = NULL;
11811 LIST_REMOVE(newblk, nb_deps);
11812 if (newblk->nb_list.wk_type == D_ALLOCDIRECT)
11814 WK_ALLOCDIRECT(&newblk->nb_list), NULL);
11815 else if (newblk->nb_list.wk_type == D_ALLOCINDIR)
11817 WK_ALLOCINDIR(&newblk->nb_list));
11818 else if (newblk->nb_list.wk_type != D_NEWBLK)
11820 TYPENAME(newblk->nb_list.wk_type));
12536 struct newblk *newblk;
12566 newblk = WK_NEWBLK(wk);
12567 if (newblk->nb_jnewblk != NULL) {
12572 jwait(&newblk->nb_jnewblk->jn_list, waitfor);
12575 if (newblk->nb_state & DEPCOMPLETE ||
12578 nbp = newblk->nb_bmsafemap->sm_buf;
12601 newblk = (struct newblk *)aip;
12602 if (newblk->nb_jnewblk != NULL) {
12603 jwait(&newblk->nb_jnewblk->jn_list,
12607 if (newblk->nb_state & DEPCOMPLETE)
12609 nbp = newblk->nb_bmsafemap->sm_buf;
12748 struct newblk *newblk;
12757 newblk = (struct newblk *)adp;
12758 if (newblk->nb_jnewblk != NULL) {
12759 jwait(&newblk->nb_jnewblk->jn_list, MNT_WAIT);
12762 if (newblk->nb_state & DEPCOMPLETE)
12764 bp = newblk->nb_bmsafemap->sm_buf;
12791 struct newblk *newblk;
12813 if (newblk_lookup(mp, blkno, 0, &newblk) == 0) {
12817 if (newblk->nb_list.wk_type != D_ALLOCDIRECT)
12818 panic("flush_newblk_deps: Bad newblk %p", newblk);
12822 if (newblk->nb_jnewblk != NULL) {
12823 jwait(&newblk->nb_jnewblk->jn_list, MNT_WAIT);
12829 if ((newblk->nb_state & DEPCOMPLETE) == 0) {
12830 bp = newblk->nb_bmsafemap->sm_buf;
13726 struct newblk *newblk;
13834 newblk = WK_NEWBLK(wk);
13835 if (newblk->nb_jnewblk) {