Page MenuHomeFreeBSD

D20741.id59060.diff
No OneTemporary

D20741.id59060.diff

Index: head/sys/ufs/ffs/ffs_softdep.c
===================================================================
--- head/sys/ufs/ffs/ffs_softdep.c
+++ head/sys/ufs/ffs/ffs_softdep.c
@@ -2110,7 +2110,6 @@
* Look up a pagedep. Return 1 if found, 0 otherwise.
* If not found, allocate if DEPALLOC flag is passed.
* Found or allocated entry is returned in pagedeppp.
- * This routine must be called with splbio interrupts blocked.
*/
static int
pagedep_lookup(mp, bp, ino, lbn, flags, pagedeppp)
@@ -2202,7 +2201,6 @@
* Look up an inodedep. Return 1 if found, 0 if not found.
* If not found, allocate if DEPALLOC flag is passed.
* Found or allocated entry is returned in inodedeppp.
- * This routine must be called with splbio interrupts blocked.
*/
static int
inodedep_lookup(mp, inum, flags, inodedeppp)
@@ -5478,7 +5476,6 @@
/*
* Replace an old allocdirect dependency with a newer one.
- * This routine must be called with splbio interrupts blocked.
*/
static void
allocdirect_merge(adphead, newadp, oldadp)
@@ -7534,7 +7531,6 @@
/*
* Free a newdirblk. Clear the NEWBLOCK flag on its associated pagedep.
- * This routine must be called with splbio interrupts blocked.
*/
static void
free_newdirblk(newdirblk)
@@ -7665,7 +7661,6 @@
/*
* Check to see if an inode has never been written to disk. If
* so free the inodedep and return success, otherwise return failure.
- * This routine must be called with splbio interrupts blocked.
*
* If we still have a bitmap dependency, then the inode has never
* been written to disk. Drop the dependency as it is no longer
@@ -8897,8 +8892,7 @@
}
/*
- * Free a diradd dependency structure. This routine must be called
- * with splbio interrupts blocked.
+ * Free a diradd dependency structure.
*/
static void
free_diradd(dap, wkhd)
@@ -11195,9 +11189,7 @@
}
/*
- * Called from within softdep_disk_write_complete above. Note that
- * this routine is always called from interrupt level with further
- * splbio interrupts blocked.
+ * Called from within softdep_disk_write_complete above.
*/
static void
handle_allocdirect_partdone(adp, wkhd)
@@ -11209,6 +11201,7 @@
struct inodedep *inodedep;
long bsize;
+ LOCK_OWNED(VFSTOUFS(adp->ad_block.nb_list.wk_mp));
if ((adp->ad_state & ALLCOMPLETE) != ALLCOMPLETE)
return;
/*
@@ -11818,7 +11811,6 @@
/*
* Process a diradd entry after its dependent inode has been written.
- * This routine must be called with splbio interrupts blocked.
*/
static void
diradd_inode_written(dap, inodedep)
@@ -11826,6 +11818,7 @@
struct inodedep *inodedep;
{
+ LOCK_OWNED(VFSTOUFS(dap->da_list.wk_mp));
dap->da_state |= COMPLETE;
complete_diradd(dap);
WORKLIST_INSERT(&inodedep->id_pendinghd, &dap->da_list);
@@ -12386,8 +12379,7 @@
/*
* Merge the a new inode dependency list (such as id_newinoupdt) into an
- * old inode dependency list (such as id_inoupdt). This routine must be
- * called with splbio interrupts blocked.
+ * old inode dependency list (such as id_inoupdt).
*/
static void
merge_inode_lists(newlisthead, oldlisthead)
@@ -12397,6 +12389,8 @@
struct allocdirect *listadp, *newadp;
newadp = TAILQ_FIRST(newlisthead);
+ if (newadp != NULL)
+ LOCK_OWNED(VFSTOUFS(newadp->ad_block.nb_list.wk_mp));
for (listadp = TAILQ_FIRST(oldlisthead); listadp && newadp;) {
if (listadp->ad_offset < newadp->ad_offset) {
listadp = TAILQ_NEXT(listadp, ad_next);
@@ -12891,7 +12885,6 @@
/*
* Flush the dependencies associated with an inodedep.
- * Called with splbio blocked.
*/
static int
flush_inodedep_deps(vp, mp, ino)
@@ -12956,7 +12949,6 @@
/*
* Flush an inode dependency list.
- * Called with splbio blocked.
*/
static int
flush_deplist(listhead, waitfor, errorp)
@@ -13098,7 +13090,6 @@
/*
* Eliminate a pagedep dependency by flushing out all its diradd dependencies.
- * Called with splbio blocked.
*/
static int
flush_pagedep_deps(pvp, mp, diraddhdp)

File Metadata

Mime Type
text/plain
Expires
Sat, May 23, 4:27 AM (1 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33440590
Default Alt Text
D20741.id59060.diff (3 KB)

Event Timeline