Lines Matching refs:dfi
111 static int note_last_dentry(struct ceph_dir_file_info *dfi, const char *name,
117 kfree(dfi->last_name);
118 dfi->last_name = buf;
119 memcpy(dfi->last_name, name, len);
120 dfi->last_name[len] = 0;
121 dfi->next_offset = next_offset;
122 dout("note_last_dentry '%s'\n", dfi->last_name);
184 struct ceph_dir_file_info *dfi = file->private_data;
231 dfi->file_info.flags |= CEPH_F_ATEND;
281 ret = note_last_dentry(dfi, last->d_name.name, last->d_name.len,
287 if (dfi->readdir_cache_idx >= 0) {
288 dfi->readdir_cache_idx = -1;
289 dfi->dir_release_count = 0;
295 static bool need_send_readdir(struct ceph_dir_file_info *dfi, loff_t pos)
297 if (!dfi->last_readdir)
300 return !ceph_frag_contains_value(dfi->frag, fpos_hash(pos));
302 return dfi->frag != fpos_frag(pos);
307 struct ceph_dir_file_info *dfi = file->private_data;
318 if (dfi->file_info.flags & CEPH_F_ATEND)
366 if (need_send_readdir(dfi, ctx->pos)) {
372 if (dfi->last_readdir) {
373 ceph_mdsc_put_request(dfi->last_readdir);
374 dfi->last_readdir = NULL;
388 ceph_vinop(inode), frag, dfi->last_name);
404 if (dfi->last_name) {
405 req->r_path2 = kstrdup(dfi->last_name, GFP_KERNEL);
415 req->r_dir_release_cnt = dfi->dir_release_count;
416 req->r_dir_ordered_cnt = dfi->dir_ordered_count;
417 req->r_readdir_cache_idx = dfi->readdir_cache_idx;
418 req->r_readdir_offset = dfi->next_offset;
442 dfi->next_offset = req->r_readdir_offset;
445 dfi->next_offset,
450 dfi->frag = frag;
451 dfi->last_readdir = req;
454 dfi->readdir_cache_idx = req->r_readdir_cache_idx;
455 if (dfi->readdir_cache_idx < 0) {
457 dfi->dir_ordered_count = 0;
459 dfi->next_offset == 2) {
462 dfi->dir_release_count = req->r_dir_release_cnt;
463 dfi->dir_ordered_count = req->r_dir_ordered_cnt;
468 dfi->readdir_cache_idx = -1;
470 dfi->dir_release_count = 0;
479 err = note_last_dentry(dfi, rde->name, rde->name_len,
482 ceph_mdsc_put_request(dfi->last_readdir);
483 dfi->last_readdir = NULL;
487 dfi->next_offset = 2;
492 rinfo = &dfi->last_readdir->r_reply_info;
494 dfi->frag, rinfo->dir_nr, ctx->pos,
527 * NOTE: Here no need to put the 'dfi->last_readdir',
538 ceph_mdsc_put_request(dfi->last_readdir);
539 dfi->last_readdir = NULL;
541 if (dfi->next_offset > 2) {
542 frag = dfi->frag;
547 if (!ceph_frag_is_rightmost(dfi->frag)) {
548 frag = ceph_frag_next(dfi->frag);
551 dfi->next_offset, true);
556 ctx->pos = ceph_make_fpos(frag, dfi->next_offset,
558 kfree(dfi->last_name);
559 dfi->last_name = NULL;
564 dfi->file_info.flags |= CEPH_F_ATEND;
572 dfi->dir_release_count) {
574 if (dfi->dir_ordered_count ==
579 BUG_ON(dfi->readdir_cache_idx < 0);
580 i_size_write(inode, dfi->readdir_cache_idx *
585 __ceph_dir_set_complete(ci, dfi->dir_release_count,
586 dfi->dir_ordered_count);
594 static void reset_readdir(struct ceph_dir_file_info *dfi)
596 if (dfi->last_readdir) {
597 ceph_mdsc_put_request(dfi->last_readdir);
598 dfi->last_readdir = NULL;
600 kfree(dfi->last_name);
601 dfi->last_name = NULL;
602 dfi->dir_release_count = 0;
603 dfi->readdir_cache_idx = -1;
604 dfi->next_offset = 2; /* compensate for . and .. */
605 dfi->file_info.flags &= ~CEPH_F_ATEND;
612 static bool need_reset_readdir(struct ceph_dir_file_info *dfi, loff_t new_pos)
621 } else if (dfi->frag != fpos_frag(new_pos)) {
624 rinfo = dfi->last_readdir ? &dfi->last_readdir->r_reply_info : NULL;
634 struct ceph_dir_file_info *dfi = file->private_data;
652 if (need_reset_readdir(dfi, offset)) {
654 reset_readdir(dfi);
658 dfi->dir_release_count = 0;
659 dfi->readdir_cache_idx = -1;
665 dfi->file_info.flags &= ~CEPH_F_ATEND;
1861 struct ceph_dir_file_info *dfi = file->private_data;
1870 if (!dfi->dir_info) {
1871 dfi->dir_info = kmalloc(bufsize, GFP_KERNEL);
1872 if (!dfi->dir_info)
1874 dfi->dir_info_len =
1875 snprintf(dfi->dir_info, bufsize,
1895 if (*ppos >= dfi->dir_info_len)
1897 size = min_t(unsigned, size, dfi->dir_info_len-*ppos);
1898 left = copy_to_user(buf, dfi->dir_info + *ppos, size);