Merge branch 'fix-stack-noinline' into refs/top-bases/fix-branch

This commit is contained in:
Brian Behlendorf 2010-06-16 14:35:14 -07:00
commit a2ba5b83f8
3 changed files with 21 additions and 7 deletions

View File

@ -76,6 +76,12 @@ extern "C" {
#include <sys/sysevent/dev.h>
#include <sys/sunddi.h>
/*
* Stack
*/
#define noinline __attribute__((noinline))
/*
* Debugging
*/

View File

@ -2087,7 +2087,11 @@ dbuf_check_blkptr(dnode_t *dn, dmu_buf_impl_t *db)
}
}
static void
/* dbuf_sync_indirect() is called recursively from dbuf_sync_list() so it
* is critical the we not allow the compiler to inline this function in to
* dbuf_sync_list() thereby drastically bloating the stack usage.
*/
noinline static void
dbuf_sync_indirect(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
{
dmu_buf_impl_t *db = dr->dr_dbuf;
@ -2127,7 +2131,11 @@ dbuf_sync_indirect(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
zio_nowait(zio);
}
static void
/* dbuf_sync_leaf() is called recursively from dbuf_sync_list() so it is
* critical the we not allow the compiler to inline this function in to
* dbuf_sync_list() thereby drastically bloating the stack usage.
*/
noinline static void
dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
{
arc_buf_t **datap = &dr->dt.dl.dr_data;

View File

@ -921,7 +921,7 @@ restore_read(struct restorearg *ra, int len)
return (rv);
}
static void
noinline static void
backup_byteswap(dmu_replay_record_t *drr)
{
#define DO64(X) (drr->drr_u.X = BSWAP_64(drr->drr_u.X))
@ -1001,7 +1001,7 @@ backup_byteswap(dmu_replay_record_t *drr)
#undef DO32
}
static int
noinline static int
restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
{
int err;
@ -1085,7 +1085,7 @@ restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
}
/* ARGSUSED */
static int
noinline static int
restore_freeobjects(struct restorearg *ra, objset_t *os,
struct drr_freeobjects *drrfo)
{
@ -1109,7 +1109,7 @@ restore_freeobjects(struct restorearg *ra, objset_t *os,
return (0);
}
static int
noinline static int
restore_write(struct restorearg *ra, objset_t *os,
struct drr_write *drrw)
{
@ -1254,7 +1254,7 @@ restore_spill(struct restorearg *ra, objset_t *os, struct drr_spill *drrs)
}
/* ARGSUSED */
static int
noinline static int
restore_free(struct restorearg *ra, objset_t *os,
struct drr_free *drrf)
{