Conserve stack in zfs_mkdir()

Move the sa_attrs array from the stack to the heap to minimize stack
space usage.
This commit is contained in:
Brian Behlendorf 2011-01-07 13:47:47 -08:00
parent 1ee1b76786
commit f30484afc3

View File

@ -773,7 +773,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr,
int bonuslen; int bonuslen;
sa_handle_t *sa_hdl; sa_handle_t *sa_hdl;
dmu_object_type_t obj_type; dmu_object_type_t obj_type;
sa_bulk_attr_t sa_attrs[ZPL_END]; sa_bulk_attr_t *sa_attrs;
int cnt = 0; int cnt = 0;
zfs_acl_locator_cb_t locate = { 0 }; zfs_acl_locator_cb_t locate = { 0 };
@ -899,6 +899,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr,
* order for DMU_OT_ZNODE is critical since it needs to be constructed * order for DMU_OT_ZNODE is critical since it needs to be constructed
* in the old znode_phys_t format. Don't change this ordering * in the old znode_phys_t format. Don't change this ordering
*/ */
sa_attrs = kmem_alloc(sizeof(sa_bulk_attr_t) * ZPL_END, KM_SLEEP);
if (obj_type == DMU_OT_ZNODE) { if (obj_type == DMU_OT_ZNODE) {
SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_ATIME(zfsvfs), SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_ATIME(zfsvfs),
@ -1002,6 +1003,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr,
err = zfs_aclset_common(*zpp, acl_ids->z_aclp, cr, tx); err = zfs_aclset_common(*zpp, acl_ids->z_aclp, cr, tx);
ASSERT3S(err, ==, 0); ASSERT3S(err, ==, 0);
} }
kmem_free(sa_attrs, sizeof(sa_bulk_attr_t) * ZPL_END);
ZFS_OBJ_HOLD_EXIT(zfsvfs, obj); ZFS_OBJ_HOLD_EXIT(zfsvfs, obj);
} }