return fd;
}
-int NewStore::_create_fid(TransContext *txc, fid_t *fid, unsigned flags)
+int NewStore::_create_fid(TransContext *txc, OnodeRef o,
+ fid_t *fid, unsigned flags)
{
{
Mutex::Locker l(fid_lock);
++fid_last.fno;
if (fid_last.fno >= fid_max.fno) {
// raise fid_max, same fset, capping to max_dir_size
- fid_max.fno = min(fid_max.fno + g_conf->newstore_fid_prealloc, g_conf->newstore_max_dir_size);
+ fid_max.fno = min(fid_max.fno + g_conf->newstore_fid_prealloc,
+ g_conf->newstore_max_dir_size);
assert(fid_max.fno >= fid_last.fno);
bufferlist bl;
::encode(fid_max, bl);
return r;
}
+ if (o->onode.expected_object_size) {
+ unsigned hint = MIN(o->onode.expected_object_size,
+ o->onode.frag_size);
+ dout(20) << __func__ << " set alloc hint to " << hint << dendl;
+ fs->set_alloc_hint(fd, hint);
+ }
+
if (g_conf->newstore_open_by_handle) {
int r = fs->get_handle(fd, &fid->handle);
if (r < 0) {
f->offset = 0;
f->length = p->first + p->second.length - frag_first;
assert(f->length <= o->onode.frag_size);
- int fd = _create_fid(txc, &f->fid, O_RDWR);
+ int fd = _create_fid(txc, o, &f->fid, O_RDWR);
if (fd < 0) {
return fd;
}
f.offset = 0;
f.length = MIN(frag_size, o->onode.size - frag_first);
assert(f.length <= frag_size);
- fd = _create_fid(txc, &f.fid, flags);
+ fd = _create_fid(txc, o, &f.fid, flags);
if (fd < 0) {
r = fd;
goto out;
op->fid = fp->second.fid;
f.length = length;
- fd = _create_fid(txc, &f.fid, O_RDWR);
+ fd = _create_fid(txc, o, &f.fid, O_RDWR);
if (fd < 0) {
r = fd;
goto out;
void _reap_collections();
int _recover_next_fid();
- int _create_fid(TransContext *txc, fid_t *fid, unsigned flags);
+ int _create_fid(TransContext *txc, OnodeRef o, fid_t *fid, unsigned flags);
int _open_fid(fid_t fid, unsigned flags);
int _remove_fid(fid_t fid);