static dmu_buf_t *osd_mkreg(const struct lu_env *env, struct osd_object *obj, struct lu_attr *la, uint64_t parent, struct osd_thandle *oh) { dmu_buf_t *db; int rc; struct osd_device *osd = osd_obj2dev(obj); LASSERT(S_ISREG(la->la_mode)); rc = __osd_object_create(env, obj, &db, oh->ot_tx, la, parent); if (rc) return ERR_PTR(rc); /* * XXX: This heuristic is non-optimal. It would be better to * increase the blocksize up to osd->od_max_blksz during the write. * This is exactly how the ZPL behaves and it ensures that the right * blocksize is selected based on the file size rather than the * making broad assumptions based on the osd type. */ if (!lu_device_is_md(osd2lu_dev(osd))) { rc = -dmu_object_set_blocksize(osd->od_os, db->db_object, osd->od_max_blksz, 0, oh->ot_tx); if (unlikely(rc)) { CERROR("%s: can't change blocksize: %d\n", osd->od_svname, rc); return ERR_PTR(rc); } } return db; }
static dmu_buf_t* osd_mkreg(const struct lu_env *env, struct osd_device *osd, struct lu_attr *la, struct osd_thandle *oh) { dmu_buf_t *db; int rc; LASSERT(S_ISREG(la->la_mode)); rc = __osd_object_create(env, &osd->od_objset, &db, oh->ot_tx, la, osd_obj_tag); if (rc) return ERR_PTR(rc); /* * XXX: a hack, OST to use bigger blocksize. we need * a method in OSD API to control this from OFD/MDD */ if (!lu_device_is_md(osd2lu_dev(osd))) { rc = -dmu_object_set_blocksize(osd->od_objset.os, db->db_object, 128 << 10, 0, oh->ot_tx); if (unlikely(rc)) { CERROR("%s: can't change blocksize: %d\n", osd->od_svname, rc); return ERR_PTR(rc); } } return db; }
static dmu_buf_t *osd_mkreg(const struct lu_env *env, struct osd_object *obj, struct lu_attr *la, uint64_t parent, struct osd_thandle *oh) { dmu_buf_t *db; int rc; struct osd_device *osd = osd_obj2dev(obj); LASSERT(S_ISREG(la->la_mode)); rc = __osd_object_create(env, obj, &db, oh->ot_tx, la, parent); if (rc) return ERR_PTR(rc); if (!lu_device_is_md(osd2lu_dev(osd))) { /* uses 4K as default block size because clients write data * with page size that is 4K at minimum */ rc = -dmu_object_set_blocksize(osd->od_os, db->db_object, 4096, 0, oh->ot_tx); if (unlikely(rc)) { CERROR("%s: can't change blocksize: %d\n", osd->od_svname, rc); return ERR_PTR(rc); } } return db; }