freefrag
struct freefrag *freefrag;
freefrag = WK_FREEFRAG(jnewblk->jn_dep);
freefrag->ff_jdep = NULL;
jwork_insert(&freefrag->ff_jwork, jsegdep);
struct freefrag *freefrag;
freefrag = jfreefrag->fr_freefrag;
freefrag->ff_state |= DEPCOMPLETE;
CTR1(KTR_SUJ, "cancel_jfreefrag: blkno %jd", freefrag->ff_blkno);
struct freefrag *freefrag;
freefrag = jfreefrag->fr_freefrag;
if (freefrag == NULL)
freefrag->ff_state |= DEPCOMPLETE;
freefrag->ff_jdep = NULL;
jwork_insert(&freefrag->ff_jwork, jsegdep);
if ((freefrag->ff_state & ALLCOMPLETE) == ALLCOMPLETE)
add_to_worklist(&freefrag->ff_list, 0);
struct freefrag *freefrag;
freefrag = newfreefrag(ip, oldblkno, oldsize, lbn,
freefrag = NULL;
newblk->nb_freefrag = freefrag;
if (freefrag && freefrag->ff_jdep != NULL &&
freefrag->ff_jdep->wk_type == D_JFREEFRAG)
add_to_journal(freefrag->ff_jdep);
struct freefrag *freefrag;
freefrag = NULL;
freefrag = newadp->ad_freefrag;
oldadp->ad_freefrag = freefrag;
if (freefrag == NULL) {
&freefrag->ff_list, &freefrag->ff_jwork);
freefrag->ff_jdep = jnewblk_merge(freefrag->ff_jdep, wk,
&freefrag->ff_jwork);
newjfreefrag(struct freefrag *freefrag,
jfreefrag->fr_freefrag = freefrag;
static struct freefrag *
struct freefrag *freefrag;
freefrag = malloc(sizeof(struct freefrag),
workitem_alloc(&freefrag->ff_list, D_FREEFRAG, UFSTOVFS(ump));
freefrag->ff_state = ATTACHED;
LIST_INIT(&freefrag->ff_jwork);
freefrag->ff_inum = ip->i_number;
freefrag->ff_vtype = ITOV(ip)->v_type;
freefrag->ff_blkno = blkno;
freefrag->ff_fragsize = size;
freefrag->ff_key = key;
freefrag->ff_jdep = (struct worklist *)
newjfreefrag(freefrag, ip, blkno, size, lbn);
freefrag->ff_state |= DEPCOMPLETE;
freefrag->ff_jdep = NULL;
return (freefrag);
handle_workitem_freefrag(struct freefrag *freefrag)
struct ufsmount *ump = VFSTOUFS(freefrag->ff_list.wk_mp);
freefrag->ff_inum, freefrag->ff_blkno, freefrag->ff_fragsize);
LIST_SWAP(&freefrag->ff_jwork, &wkhd, worklist, wk_list);
if (freefrag->ff_jdep) {
if (freefrag->ff_jdep->wk_type != D_JNEWBLK)
freefrag->ff_jdep->wk_type);
cancel_jnewblk(WK_JNEWBLK(freefrag->ff_jdep), &wkhd);
ffs_blkfree(ump, ump->um_fs, ump->um_devvp, freefrag->ff_blkno,
freefrag->ff_fragsize, freefrag->ff_inum, freefrag->ff_vtype,
&wkhd, freefrag->ff_key);
WORKITEM_FREE(freefrag, D_FREEFRAG);
struct freefrag *freefrag;
freefrag = newfreefrag(ip, oldblkno, oldsize, lbn,
freefrag = NULL;
newblk->nb_freefrag = freefrag;
if (freefrag && freefrag->ff_jdep != NULL &&
freefrag->ff_jdep->wk_type == D_JFREEFRAG)
add_to_journal(freefrag->ff_jdep);
struct freefrag *freefrag;
freefrag = newfreefrag(ip, oldblkno, ITOFS(ip)->fs_bsize, lbn,
freefrag = NULL;
newblk->nb_freefrag = freefrag;
if (freefrag && freefrag->ff_jdep != NULL &&
freefrag->ff_jdep->wk_type == D_JFREEFRAG)
add_to_journal(freefrag->ff_jdep);
struct freefrag *freefrag;
freefrag = setup_allocindir_phase2(bp, ip, inodedep, aip, lbn);
if (freefrag)
handle_workitem_freefrag(freefrag);
SOFTDEP_TYPE(FREEFRAG, freefrag, "Previously used frag for an inode");
static struct freefrag *
struct freefrag *freefrag;
freefrag = NULL;
freefrag = allocindir_merge(aip, oldaip);
freefrag = allocindir_merge(aip, oldaip);
return (freefrag);
static struct freefrag *
struct freefrag *freefrag;
freefrag = aip->ai_freefrag;
KASSERT(freefrag != NULL, ("setup_allocindir_phase2: No freefrag"));
if (freefrag->ff_jdep)
cancel_jfreefrag(WK_JFREEFRAG(freefrag->ff_jdep));
freefrag->ff_jdep = (struct worklist *)cancel_newblk(&oldaip->ai_block,
&freefrag->ff_list, &freefrag->ff_jwork);
return (freefrag);
struct freefrag *freefrag;
freefrag = newblk->nb_freefrag;
freefrag->ff_state |= COMPLETE;
if ((freefrag->ff_state & ALLCOMPLETE) == ALLCOMPLETE)
add_to_worklist(&freefrag->ff_list, 0);
static struct freefrag *setup_allocindir_phase2(struct buf *, struct inode *,
static void handle_workitem_freefrag(struct freefrag *);
static struct freefrag *newfreefrag(struct inode *, ufs2_daddr_t, long,
static struct freefrag *allocindir_merge(struct allocindir *,
struct freefrag *freefrag;
if (trunc && (freefrag = newblk->nb_freefrag) != NULL) {
if (freefrag->ff_jdep)
WK_JFREEFRAG(freefrag->ff_jdep));
jwork_move(&freeblks->fb_jwork, &freefrag->ff_jwork);
WORKITEM_FREE(freefrag, D_FREEFRAG);
static struct jfreefrag *newjfreefrag(struct freefrag *, struct inode *,
#define WK_FREEFRAG(wk) ((struct freefrag *)(wk))
struct freefrag *nb_freefrag; /* Fragment to be freed (if any). */
struct freefrag *fr_freefrag; /* Back pointer to freefrag. */