Merge commit 'refs/top-bases/linux-events' into linux-events
This commit is contained in:
commit
5a46abc9a0
|
@ -74,6 +74,12 @@ extern "C" {
|
||||||
#include <sys/fm/fs/zfs.h>
|
#include <sys/fm/fs/zfs.h>
|
||||||
#include <sys/sunddi.h>
|
#include <sys/sunddi.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stack
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define noinline __attribute__((noinline))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Debugging
|
* Debugging
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2095,7 +2095,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)
|
dbuf_sync_indirect(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
|
||||||
{
|
{
|
||||||
dmu_buf_impl_t *db = dr->dr_dbuf;
|
dmu_buf_impl_t *db = dr->dr_dbuf;
|
||||||
|
@ -2135,7 +2139,11 @@ dbuf_sync_indirect(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
|
||||||
zio_nowait(zio);
|
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)
|
dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
|
||||||
{
|
{
|
||||||
arc_buf_t **datap = &dr->dt.dl.dr_data;
|
arc_buf_t **datap = &dr->dt.dl.dr_data;
|
||||||
|
|
|
@ -879,45 +879,49 @@ dmu_objset_snapshot(char *fsname, char *snapname,
|
||||||
nvlist_t *props, boolean_t recursive)
|
nvlist_t *props, boolean_t recursive)
|
||||||
{
|
{
|
||||||
dsl_sync_task_t *dst;
|
dsl_sync_task_t *dst;
|
||||||
struct snaparg sn;
|
struct snaparg *sn;
|
||||||
spa_t *spa;
|
spa_t *spa;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
(void) strcpy(sn.failed, fsname);
|
sn = kmem_alloc(sizeof (struct snaparg), KM_SLEEP);
|
||||||
|
(void) strcpy(sn->failed, fsname);
|
||||||
|
|
||||||
err = spa_open(fsname, &spa, FTAG);
|
err = spa_open(fsname, &spa, FTAG);
|
||||||
if (err)
|
if (err) {
|
||||||
|
kmem_free(sn, sizeof (struct snaparg));
|
||||||
return (err);
|
return (err);
|
||||||
|
}
|
||||||
|
|
||||||
sn.dstg = dsl_sync_task_group_create(spa_get_dsl(spa));
|
sn->dstg = dsl_sync_task_group_create(spa_get_dsl(spa));
|
||||||
sn.snapname = snapname;
|
sn->snapname = snapname;
|
||||||
sn.props = props;
|
sn->props = props;
|
||||||
sn.recursive = recursive;
|
sn->recursive = recursive;
|
||||||
|
|
||||||
if (recursive) {
|
if (recursive) {
|
||||||
err = dmu_objset_find(fsname,
|
err = dmu_objset_find(fsname,
|
||||||
dmu_objset_snapshot_one, &sn, DS_FIND_CHILDREN);
|
dmu_objset_snapshot_one, sn, DS_FIND_CHILDREN);
|
||||||
} else {
|
} else {
|
||||||
err = dmu_objset_snapshot_one(fsname, &sn);
|
err = dmu_objset_snapshot_one(fsname, sn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
err = dsl_sync_task_group_wait(sn.dstg);
|
err = dsl_sync_task_group_wait(sn->dstg);
|
||||||
|
|
||||||
for (dst = list_head(&sn.dstg->dstg_tasks); dst;
|
for (dst = list_head(&sn->dstg->dstg_tasks); dst;
|
||||||
dst = list_next(&sn.dstg->dstg_tasks, dst)) {
|
dst = list_next(&sn->dstg->dstg_tasks, dst)) {
|
||||||
objset_t *os = dst->dst_arg1;
|
objset_t *os = dst->dst_arg1;
|
||||||
dsl_dataset_t *ds = os->os_dsl_dataset;
|
dsl_dataset_t *ds = os->os_dsl_dataset;
|
||||||
if (dst->dst_err)
|
if (dst->dst_err)
|
||||||
dsl_dataset_name(ds, sn.failed);
|
dsl_dataset_name(ds, sn->failed);
|
||||||
zil_resume(dmu_objset_zil(os));
|
zil_resume(dmu_objset_zil(os));
|
||||||
dmu_objset_rele(os, &sn);
|
dmu_objset_rele(os, &sn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
(void) strcpy(fsname, sn.failed);
|
(void) strcpy(fsname, sn->failed);
|
||||||
dsl_sync_task_group_destroy(sn.dstg);
|
dsl_sync_task_group_destroy(sn->dstg);
|
||||||
spa_close(spa, FTAG);
|
spa_close(spa, FTAG);
|
||||||
|
kmem_free(sn, sizeof (struct snaparg));
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -921,7 +921,7 @@ restore_read(struct restorearg *ra, int len)
|
||||||
return (rv);
|
return (rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
noinline static void
|
||||||
backup_byteswap(dmu_replay_record_t *drr)
|
backup_byteswap(dmu_replay_record_t *drr)
|
||||||
{
|
{
|
||||||
#define DO64(X) (drr->drr_u.X = BSWAP_64(drr->drr_u.X))
|
#define DO64(X) (drr->drr_u.X = BSWAP_64(drr->drr_u.X))
|
||||||
|
@ -1003,7 +1003,7 @@ backup_byteswap(dmu_replay_record_t *drr)
|
||||||
#undef DO32
|
#undef DO32
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
noinline static int
|
||||||
restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
|
restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
@ -1087,7 +1087,7 @@ restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
static int
|
noinline static int
|
||||||
restore_freeobjects(struct restorearg *ra, objset_t *os,
|
restore_freeobjects(struct restorearg *ra, objset_t *os,
|
||||||
struct drr_freeobjects *drrfo)
|
struct drr_freeobjects *drrfo)
|
||||||
{
|
{
|
||||||
|
@ -1111,7 +1111,7 @@ restore_freeobjects(struct restorearg *ra, objset_t *os,
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
noinline static int
|
||||||
restore_write(struct restorearg *ra, objset_t *os,
|
restore_write(struct restorearg *ra, objset_t *os,
|
||||||
struct drr_write *drrw)
|
struct drr_write *drrw)
|
||||||
{
|
{
|
||||||
|
@ -1257,7 +1257,7 @@ restore_spill(struct restorearg *ra, objset_t *os, struct drr_spill *drrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
static int
|
noinline static int
|
||||||
restore_free(struct restorearg *ra, objset_t *os,
|
restore_free(struct restorearg *ra, objset_t *os,
|
||||||
struct drr_free *drrf)
|
struct drr_free *drrf)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue