Lines Matching defs:freefrag
616 SOFTDEP_TYPE(FREEFRAG, freefrag, "Previously used frag for an inode");
841 static struct freefrag *setup_allocindir_phase2(struct buf *, struct inode *,
845 static void handle_workitem_freefrag(struct freefrag *);
846 static struct freefrag *newfreefrag(struct inode *, ufs2_daddr_t, long,
850 static struct freefrag *allocindir_merge(struct allocindir *,
908 static struct jfreefrag *newjfreefrag(struct freefrag *, struct inode *,
4108 struct freefrag *freefrag;
4138 * A newblock being removed by a freefrag when replaced by
4141 freefrag = WK_FREEFRAG(jnewblk->jn_dep);
4142 freefrag->ff_jdep = NULL;
4143 jwork_insert(&freefrag->ff_jwork, jsegdep);
4164 * from the freefrag and mark it DEPCOMPLETE so that it may be added
4170 struct freefrag *freefrag;
4176 freefrag = jfreefrag->fr_freefrag;
4179 freefrag->ff_state |= DEPCOMPLETE;
4180 CTR1(KTR_SUJ, "cancel_jfreefrag: blkno %jd", freefrag->ff_blkno);
4184 * Free a jfreefrag when the parent freefrag is rendered obsolete.
4195 panic("free_jfreefrag: Still attached to a freefrag.");
4201 * freefrag is added to the worklist if this completes its dependencies.
4207 struct freefrag *freefrag;
4212 freefrag = jfreefrag->fr_freefrag;
4213 if (freefrag == NULL)
4214 panic("handle_written_jfreefrag: No freefrag.");
4215 freefrag->ff_state |= DEPCOMPLETE;
4216 freefrag->ff_jdep = NULL;
4217 jwork_insert(&freefrag->ff_jwork, jsegdep);
4218 if ((freefrag->ff_state & ALLCOMPLETE) == ALLCOMPLETE)
4219 add_to_worklist(&freefrag->ff_list, 0);
5484 * will construct a "freefrag" structure to be added to the workitem queue
5503 struct freefrag *freefrag;
5530 freefrag = newfreefrag(ip, oldblkno, oldsize, lbn,
5533 freefrag = NULL;
5571 newblk->nb_freefrag = freefrag;
5585 if (freefrag && freefrag->ff_jdep != NULL &&
5586 freefrag->ff_jdep->wk_type == D_JFREEFRAG)
5587 add_to_journal(freefrag->ff_jdep);
5630 * newblock or freefrag. This handles aggregating journal records for
5700 struct freefrag *freefrag;
5702 freefrag = NULL;
5717 * can immediately post its freefrag and adopt the old freefrag.
5718 * This action is done by swapping the freefrag dependencies.
5719 * The new dependency gains the old one's freefrag, and the
5730 freefrag = newadp->ad_freefrag;
5733 oldadp->ad_freefrag = freefrag;
5747 * We need to move any journal dependencies over to the freefrag
5753 if (freefrag == NULL) {
5766 &freefrag->ff_list, &freefrag->ff_jwork);
5767 freefrag->ff_jdep = jnewblk_merge(freefrag->ff_jdep, wk,
5768 &freefrag->ff_jwork);
5777 newjfreefrag(struct freefrag *freefrag,
5796 jfreefrag->fr_freefrag = freefrag;
5802 * Allocate a new freefrag structure.
5804 static struct freefrag *
5811 struct freefrag *freefrag;
5821 freefrag = malloc(sizeof(struct freefrag),
5823 workitem_alloc(&freefrag->ff_list, D_FREEFRAG, UFSTOVFS(ump));
5824 freefrag->ff_state = ATTACHED;
5825 LIST_INIT(&freefrag->ff_jwork);
5826 freefrag->ff_inum = ip->i_number;
5827 freefrag->ff_vtype = ITOV(ip)->v_type;
5828 freefrag->ff_blkno = blkno;
5829 freefrag->ff_fragsize = size;
5830 freefrag->ff_key = key;
5833 freefrag->ff_jdep = (struct worklist *)
5834 newjfreefrag(freefrag, ip, blkno, size, lbn);
5836 freefrag->ff_state |= DEPCOMPLETE;
5837 freefrag->ff_jdep = NULL;
5840 return (freefrag);
5848 handle_workitem_freefrag(struct freefrag *freefrag)
5850 struct ufsmount *ump = VFSTOUFS(freefrag->ff_list.wk_mp);
5855 freefrag->ff_inum, freefrag->ff_blkno, freefrag->ff_fragsize);
5858 * freefrag after it was schedule to be done so it must be
5863 LIST_SWAP(&freefrag->ff_jwork, &wkhd, worklist, wk_list);
5867 if (freefrag->ff_jdep) {
5868 if (freefrag->ff_jdep->wk_type != D_JNEWBLK)
5870 freefrag->ff_jdep->wk_type);
5871 cancel_jnewblk(WK_JNEWBLK(freefrag->ff_jdep), &wkhd);
5874 ffs_blkfree(ump, ump->um_fs, ump->um_devvp, freefrag->ff_blkno,
5875 freefrag->ff_fragsize, freefrag->ff_inum, freefrag->ff_vtype,
5876 &wkhd, freefrag->ff_key);
5878 WORKITEM_FREE(freefrag, D_FREEFRAG);
5899 struct freefrag *freefrag;
5930 freefrag = newfreefrag(ip, oldblkno, oldsize, lbn,
5933 freefrag = NULL;
5945 newblk->nb_freefrag = freefrag;
5960 if (freefrag && freefrag->ff_jdep != NULL &&
5961 freefrag->ff_jdep->wk_type == D_JFREEFRAG)
5962 add_to_journal(freefrag->ff_jdep);
6040 struct freefrag *freefrag;
6044 freefrag = newfreefrag(ip, oldblkno, ITOFS(ip)->fs_bsize, lbn,
6047 freefrag = NULL;
6054 newblk->nb_freefrag = freefrag;
6064 if (freefrag && freefrag->ff_jdep != NULL &&
6065 freefrag->ff_jdep->wk_type == D_JFREEFRAG)
6066 add_to_journal(freefrag->ff_jdep);
6085 struct freefrag *freefrag;
6112 freefrag = setup_allocindir_phase2(bp, ip, inodedep, aip, lbn);
6114 if (freefrag)
6115 handle_workitem_freefrag(freefrag);
6250 static struct freefrag *
6261 struct freefrag *freefrag;
6282 freefrag = NULL;
6286 freefrag = allocindir_merge(aip, oldaip);
6292 freefrag = allocindir_merge(aip, oldaip);
6299 return (freefrag);
6306 static struct freefrag *
6311 struct freefrag *freefrag;
6317 freefrag = aip->ai_freefrag;
6320 KASSERT(freefrag != NULL, ("setup_allocindir_phase2: No freefrag"));
6332 * We can skip journaling for this freefrag and just complete
6334 * removed after the freefrag completes.
6336 if (freefrag->ff_jdep)
6337 cancel_jfreefrag(WK_JFREEFRAG(freefrag->ff_jdep));
6339 freefrag->ff_jdep = (struct worklist *)cancel_newblk(&oldaip->ai_block,
6340 &freefrag->ff_list, &freefrag->ff_jwork);
6343 return (freefrag);
7199 * any duplicate freefrag structures, then purge the merged list.
7684 * Schedule the freefrag associated with a newblk to be released once
7690 struct freefrag *freefrag;
7694 freefrag = newblk->nb_freefrag;
7696 freefrag->ff_state |= COMPLETE;
7697 if ((freefrag->ff_state & ALLCOMPLETE) == ALLCOMPLETE)
7698 add_to_worklist(&freefrag->ff_list, 0);
7702 * Free a newblk. Generate a new freefrag work request if appropriate.
8528 struct freefrag *freefrag;
8551 * savedbp. Eliminate the freefrag which would dup free.
8553 if (trunc && (freefrag = newblk->nb_freefrag) != NULL) {
8555 if (freefrag->ff_jdep)
8557 WK_JFREEFRAG(freefrag->ff_jdep));
8558 jwork_move(&freeblks->fb_jwork, &freefrag->ff_jwork);
8559 WORKITEM_FREE(freefrag, D_FREEFRAG);
14845 db_printf(" jnewblk %p, bmsafemap %p, freefrag %p\n",