and don't allocate it for each attr_set/attr_init
Change-Id: I02e00ae72702728e97056ecd63862ff217134231
Signed-off-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-on: http://review.whamcloud.com/19087
Tested-by: Jenkins
Reviewed-by: Fan Yong <fan.yong@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
+/* max.number of regular attrubites the callers may ask for */
+#define OSD_MAX_IN_BULK 13
+
struct osd_thread_info {
const struct lu_env *oti_env;
struct osd_thread_info {
const struct lu_env *oti_env;
union {
char oti_key[MAXNAMELEN + 1];
__u64 oti_key64[(MAXNAMELEN + 1)/sizeof(__u64)];
union {
char oti_key[MAXNAMELEN + 1];
__u64 oti_key64[(MAXNAMELEN + 1)/sizeof(__u64)];
+ sa_bulk_attr_t oti_attr_bulk[OSD_MAX_IN_BULK];
};
struct lustre_mdt_attrs oti_mdt_attrs;
};
struct lustre_mdt_attrs oti_mdt_attrs;
struct osd_object *obj, struct lu_attr *la)
{
struct osa_attr *osa = &osd_oti_get(env)->oti_osa;
struct osd_object *obj, struct lu_attr *la)
{
struct osa_attr *osa = &osd_oti_get(env)->oti_osa;
+ sa_bulk_attr_t *bulk = osd_oti_get(env)->oti_attr_bulk;
int cnt = 0;
int rc;
ENTRY;
int cnt = 0;
int rc;
ENTRY;
- OBD_ALLOC(bulk, sizeof(sa_bulk_attr_t) * 9);
- if (bulk == NULL)
- GOTO(out_sa, rc = -ENOMEM);
-
la->la_valid |= LA_ATIME | LA_MTIME | LA_CTIME | LA_MODE | LA_TYPE |
LA_SIZE | LA_UID | LA_GID | LA_FLAGS | LA_NLINK;
la->la_valid |= LA_ATIME | LA_MTIME | LA_CTIME | LA_MODE | LA_TYPE |
LA_SIZE | LA_UID | LA_GID | LA_FLAGS | LA_NLINK;
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_UID(o), NULL, &osa->uid, 8);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_GID(o), NULL, &osa->gid, 8);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_FLAGS(o), NULL, &osa->flags, 8);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_UID(o), NULL, &osa->uid, 8);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_GID(o), NULL, &osa->gid, 8);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_FLAGS(o), NULL, &osa->flags, 8);
+ LASSERT(cnt <= ARRAY_SIZE(osd_oti_get(env)->oti_attr_bulk));
rc = -sa_bulk_lookup(sa_hdl, bulk, cnt);
if (rc)
rc = -sa_bulk_lookup(sa_hdl, bulk, cnt);
if (rc)
la->la_atime = osa->atime[0];
la->la_mtime = osa->mtime[0];
la->la_atime = osa->atime[0];
la->la_mtime = osa->mtime[0];
if (S_ISCHR(la->la_mode) || S_ISBLK(la->la_mode)) {
rc = -sa_lookup(sa_hdl, SA_ZPL_RDEV(o), &osa->rdev, 8);
if (rc)
if (S_ISCHR(la->la_mode) || S_ISBLK(la->la_mode)) {
rc = -sa_lookup(sa_hdl, SA_ZPL_RDEV(o), &osa->rdev, 8);
if (rc)
la->la_rdev = osa->rdev;
la->la_valid |= LA_RDEV;
}
la->la_rdev = osa->rdev;
la->la_valid |= LA_RDEV;
}
-out_bulk:
- OBD_FREE(bulk, sizeof(sa_bulk_attr_t) * 9);
out_sa:
sa_handle_destroy(sa_hdl);
out_sa:
sa_handle_destroy(sa_hdl);
const struct lu_attr *la, struct thandle *handle)
{
struct osd_thread_info *info = osd_oti_get(env);
const struct lu_attr *la, struct thandle *handle)
{
struct osd_thread_info *info = osd_oti_get(env);
+ sa_bulk_attr_t *bulk = osd_oti_get(env)->oti_attr_bulk;
struct osd_object *obj = osd_dt_obj(dt);
struct osd_device *osd = osd_obj2dev(obj);
struct osd_thandle *oh;
struct osa_attr *osa = &info->oti_osa;
struct osd_object *obj = osd_dt_obj(dt);
struct osd_device *osd = osd_obj2dev(obj);
struct osd_thandle *oh;
struct osa_attr *osa = &info->oti_osa;
__u64 valid = la->la_valid;
int cnt;
int rc = 0;
__u64 valid = la->la_valid;
int cnt;
int rc = 0;
- OBD_ALLOC(bulk, sizeof(sa_bulk_attr_t) * 10);
- if (bulk == NULL)
- GOTO(out, rc = -ENOMEM);
-
/* do both accounting updates outside oo_attr_lock below */
if ((valid & LA_UID) && (la->la_uid != obj->oo_attr.la_uid)) {
/* Update user accounting. Failure isn't fatal, but we still
/* do both accounting updates outside oo_attr_lock below */
if ((valid & LA_UID) && (la->la_uid != obj->oo_attr.la_uid)) {
/* Update user accounting. Failure isn't fatal, but we still
obj->oo_attr.la_valid |= valid;
write_unlock(&obj->oo_attr_lock);
obj->oo_attr.la_valid |= valid;
write_unlock(&obj->oo_attr_lock);
+ LASSERT(cnt <= ARRAY_SIZE(osd_oti_get(env)->oti_attr_bulk));
rc = osd_object_sa_bulk_update(obj, bulk, cnt, oh);
rc = osd_object_sa_bulk_update(obj, bulk, cnt, oh);
- OBD_FREE(bulk, sizeof(sa_bulk_attr_t) * 10);
out:
up_read(&obj->oo_guard);
RETURN(rc);
out:
up_read(&obj->oo_guard);
RETURN(rc);
uint64_t oid, dmu_tx_t *tx, struct lu_attr *la,
uint64_t parent)
{
uint64_t oid, dmu_tx_t *tx, struct lu_attr *la,
uint64_t parent)
{
- sa_bulk_attr_t *bulk;
- sa_handle_t *sa_hdl;
+ sa_handle_t *sa_hdl;
+ sa_bulk_attr_t *bulk = osd_oti_get(env)->oti_attr_bulk;
struct osa_attr *osa = &osd_oti_get(env)->oti_osa;
uint64_t gen;
uint64_t crtime[2];
struct osa_attr *osa = &osd_oti_get(env)->oti_osa;
uint64_t gen;
uint64_t crtime[2];
- OBD_ALLOC(bulk, sizeof(sa_bulk_attr_t) * 13);
- if (bulk == NULL) {
- rc = -ENOMEM;
- goto out;
- }
/*
* we need to create all SA below upon object create.
*
/*
* we need to create all SA below upon object create.
*
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_CRTIME(osd), NULL, crtime, 16);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_LINKS(osd), NULL, &osa->nlink, 8);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_RDEV(osd), NULL, &osa->rdev, 8);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_CRTIME(osd), NULL, crtime, 16);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_LINKS(osd), NULL, &osa->nlink, 8);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_RDEV(osd), NULL, &osa->rdev, 8);
+ LASSERT(cnt <= ARRAY_SIZE(osd_oti_get(env)->oti_attr_bulk));
rc = -sa_replace_all_by_template(sa_hdl, bulk, cnt, tx);
rc = -sa_replace_all_by_template(sa_hdl, bulk, cnt, tx);
- OBD_FREE(bulk, sizeof(sa_bulk_attr_t) * 13);
-out:
sa_handle_destroy(sa_hdl);
return rc;
}
sa_handle_destroy(sa_hdl);
return rc;
}