Changeset View
Changeset View
Standalone View
Standalone View
sys/ufs/ffs/ffs_softdep.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 5,058 Lines • ▼ Show 20 Lines | |||||
* nlinkdelta. | * nlinkdelta. | ||||
*/ | */ | ||||
void | void | ||||
softdep_setup_create(dp, ip) | softdep_setup_create(dp, ip) | ||||
struct inode *dp; | struct inode *dp; | ||||
struct inode *ip; | struct inode *ip; | ||||
{ | { | ||||
struct inodedep *inodedep; | struct inodedep *inodedep; | ||||
struct jaddref *jaddref; | struct jaddref *jaddref __diagused; | ||||
struct vnode *dvp; | struct vnode *dvp; | ||||
KASSERT(MOUNTEDSOFTDEP(ITOVFS(dp)) != 0, | KASSERT(MOUNTEDSOFTDEP(ITOVFS(dp)) != 0, | ||||
("softdep_setup_create called on non-softdep filesystem")); | ("softdep_setup_create called on non-softdep filesystem")); | ||||
KASSERT(ip->i_nlink == 1, | KASSERT(ip->i_nlink == 1, | ||||
("softdep_setup_create: Invalid link count.")); | ("softdep_setup_create: Invalid link count.")); | ||||
dvp = ITOV(dp); | dvp = ITOV(dp); | ||||
ACQUIRE_LOCK(ITOUMP(dp)); | ACQUIRE_LOCK(ITOUMP(dp)); | ||||
▲ Show 20 Lines • Show All 124 Lines • ▼ Show 20 Lines | |||||
* Called to track nlinkdelta of the inode and parent directories prior to | * Called to track nlinkdelta of the inode and parent directories prior to | ||||
* unlinking a directory. | * unlinking a directory. | ||||
*/ | */ | ||||
void | void | ||||
softdep_setup_rmdir(dp, ip) | softdep_setup_rmdir(dp, ip) | ||||
struct inode *dp; | struct inode *dp; | ||||
struct inode *ip; | struct inode *ip; | ||||
{ | { | ||||
struct vnode *dvp; | |||||
KASSERT(MOUNTEDSOFTDEP(ITOVFS(dp)) != 0, | KASSERT(MOUNTEDSOFTDEP(ITOVFS(dp)) != 0, | ||||
("softdep_setup_rmdir called on non-softdep filesystem")); | ("softdep_setup_rmdir called on non-softdep filesystem")); | ||||
dvp = ITOV(dp); | |||||
ACQUIRE_LOCK(ITOUMP(dp)); | ACQUIRE_LOCK(ITOUMP(dp)); | ||||
(void) inodedep_lookup_ip(ip); | (void) inodedep_lookup_ip(ip); | ||||
(void) inodedep_lookup_ip(dp); | (void) inodedep_lookup_ip(dp); | ||||
FREE_LOCK(ITOUMP(dp)); | FREE_LOCK(ITOUMP(dp)); | ||||
} | } | ||||
/* | /* | ||||
* Called to track nlinkdelta of the inode and parent directories prior to | * Called to track nlinkdelta of the inode and parent directories prior to | ||||
* unlink. | * unlink. | ||||
*/ | */ | ||||
void | void | ||||
softdep_setup_unlink(dp, ip) | softdep_setup_unlink(dp, ip) | ||||
struct inode *dp; | struct inode *dp; | ||||
struct inode *ip; | struct inode *ip; | ||||
{ | { | ||||
struct vnode *dvp; | |||||
KASSERT(MOUNTEDSOFTDEP(ITOVFS(dp)) != 0, | KASSERT(MOUNTEDSOFTDEP(ITOVFS(dp)) != 0, | ||||
("softdep_setup_unlink called on non-softdep filesystem")); | ("softdep_setup_unlink called on non-softdep filesystem")); | ||||
dvp = ITOV(dp); | |||||
ACQUIRE_LOCK(ITOUMP(dp)); | ACQUIRE_LOCK(ITOUMP(dp)); | ||||
(void) inodedep_lookup_ip(ip); | (void) inodedep_lookup_ip(ip); | ||||
(void) inodedep_lookup_ip(dp); | (void) inodedep_lookup_ip(dp); | ||||
FREE_LOCK(ITOUMP(dp)); | FREE_LOCK(ITOUMP(dp)); | ||||
} | } | ||||
/* | /* | ||||
* Called to release the journal structures created by a failed non-directory | * Called to release the journal structures created by a failed non-directory | ||||
▲ Show 20 Lines • Show All 1,178 Lines • ▼ Show 20 Lines | |||||
static struct freefrag * | static struct freefrag * | ||||
setup_allocindir_phase2(bp, ip, inodedep, aip, lbn) | setup_allocindir_phase2(bp, ip, inodedep, aip, lbn) | ||||
struct buf *bp; /* in-memory copy of the indirect block */ | struct buf *bp; /* in-memory copy of the indirect block */ | ||||
struct inode *ip; /* inode for file being extended */ | struct inode *ip; /* inode for file being extended */ | ||||
struct inodedep *inodedep; /* Inodedep for ip */ | struct inodedep *inodedep; /* Inodedep for ip */ | ||||
struct allocindir *aip; /* allocindir allocated by the above routines */ | struct allocindir *aip; /* allocindir allocated by the above routines */ | ||||
ufs_lbn_t lbn; /* Logical block number for this block. */ | ufs_lbn_t lbn; /* Logical block number for this block. */ | ||||
{ | { | ||||
struct fs *fs; | struct fs *fs __diagused; | ||||
struct indirdep *indirdep; | struct indirdep *indirdep; | ||||
struct allocindir *oldaip; | struct allocindir *oldaip; | ||||
struct freefrag *freefrag; | struct freefrag *freefrag; | ||||
struct mount *mp; | struct mount *mp; | ||||
struct ufsmount *ump; | struct ufsmount *ump; | ||||
mp = ITOVFS(ip); | mp = ITOVFS(ip); | ||||
ump = VFSTOUFS(mp); | ump = VFSTOUFS(mp); | ||||
▲ Show 20 Lines • Show All 4,185 Lines • ▼ Show 20 Lines | initiate_write_inodeblock_ufs1(inodedep, bp) | ||||
struct ufs1_dinode *sip; | struct ufs1_dinode *sip; | ||||
struct inoref *inoref; | struct inoref *inoref; | ||||
struct ufsmount *ump; | struct ufsmount *ump; | ||||
struct fs *fs; | struct fs *fs; | ||||
ufs_lbn_t i; | ufs_lbn_t i; | ||||
#ifdef INVARIANTS | #ifdef INVARIANTS | ||||
ufs_lbn_t prevlbn = 0; | ufs_lbn_t prevlbn = 0; | ||||
#endif | #endif | ||||
int deplist; | int deplist __diagused; | ||||
if (inodedep->id_state & IOSTARTED) | if (inodedep->id_state & IOSTARTED) | ||||
panic("initiate_write_inodeblock_ufs1: already started"); | panic("initiate_write_inodeblock_ufs1: already started"); | ||||
inodedep->id_state |= IOSTARTED; | inodedep->id_state |= IOSTARTED; | ||||
fs = inodedep->id_fs; | fs = inodedep->id_fs; | ||||
ump = VFSTOUFS(inodedep->id_list.wk_mp); | ump = VFSTOUFS(inodedep->id_list.wk_mp); | ||||
LOCK_OWNED(ump); | LOCK_OWNED(ump); | ||||
dp = (struct ufs1_dinode *)bp->b_data + | dp = (struct ufs1_dinode *)bp->b_data + | ||||
▲ Show 20 Lines • Show All 155 Lines • ▼ Show 20 Lines | initiate_write_inodeblock_ufs2(inodedep, bp) | ||||
struct ufs2_dinode *sip; | struct ufs2_dinode *sip; | ||||
struct inoref *inoref; | struct inoref *inoref; | ||||
struct ufsmount *ump; | struct ufsmount *ump; | ||||
struct fs *fs; | struct fs *fs; | ||||
ufs_lbn_t i; | ufs_lbn_t i; | ||||
#ifdef INVARIANTS | #ifdef INVARIANTS | ||||
ufs_lbn_t prevlbn = 0; | ufs_lbn_t prevlbn = 0; | ||||
#endif | #endif | ||||
int deplist; | int deplist __diagused; | ||||
if (inodedep->id_state & IOSTARTED) | if (inodedep->id_state & IOSTARTED) | ||||
panic("initiate_write_inodeblock_ufs2: already started"); | panic("initiate_write_inodeblock_ufs2: already started"); | ||||
inodedep->id_state |= IOSTARTED; | inodedep->id_state |= IOSTARTED; | ||||
fs = inodedep->id_fs; | fs = inodedep->id_fs; | ||||
ump = VFSTOUFS(inodedep->id_list.wk_mp); | ump = VFSTOUFS(inodedep->id_list.wk_mp); | ||||
LOCK_OWNED(ump); | LOCK_OWNED(ump); | ||||
dp = (struct ufs2_dinode *)bp->b_data + | dp = (struct ufs2_dinode *)bp->b_data + | ||||
▲ Show 20 Lines • Show All 4,449 Lines • Show Last 20 Lines |