Lines Matching refs:dfi
112 static int note_last_dentry(struct ceph_dir_file_info *dfi, const char *name,
118 kfree(dfi->last_name);
119 dfi->last_name = buf;
120 memcpy(dfi->last_name, name, len);
121 dfi->last_name[len] = 0;
122 dfi->next_offset = next_offset;
123 dout("note_last_dentry '%s'\n", dfi->last_name);
185 struct ceph_dir_file_info *dfi = file->private_data;
232 dfi->file_info.flags |= CEPH_F_ATEND;
284 ret = note_last_dentry(dfi, last->d_name.name, last->d_name.len,
290 if (dfi->readdir_cache_idx >= 0) {
291 dfi->readdir_cache_idx = -1;
292 dfi->dir_release_count = 0;
298 static bool need_send_readdir(struct ceph_dir_file_info *dfi, loff_t pos)
300 if (!dfi->last_readdir)
303 return !ceph_frag_contains_value(dfi->frag, fpos_hash(pos));
305 return dfi->frag != fpos_frag(pos);
310 struct ceph_dir_file_info *dfi = file->private_data;
321 if (dfi->file_info.flags & CEPH_F_ATEND)
373 if (need_send_readdir(dfi, ctx->pos)) {
379 if (dfi->last_readdir) {
380 ceph_mdsc_put_request(dfi->last_readdir);
381 dfi->last_readdir = NULL;
395 ceph_vinop(inode), frag, dfi->last_name);
412 if (dfi->last_name) {
413 struct qstr d_name = { .name = dfi->last_name,
414 .len = strlen(dfi->last_name) };
433 req->r_dir_release_cnt = dfi->dir_release_count;
434 req->r_dir_ordered_cnt = dfi->dir_ordered_count;
435 req->r_readdir_cache_idx = dfi->readdir_cache_idx;
436 req->r_readdir_offset = dfi->next_offset;
460 dfi->next_offset = req->r_readdir_offset;
463 dfi->next_offset,
468 dfi->frag = frag;
469 dfi->last_readdir = req;
472 dfi->readdir_cache_idx = req->r_readdir_cache_idx;
473 if (dfi->readdir_cache_idx < 0) {
475 dfi->dir_ordered_count = 0;
477 dfi->next_offset == 2) {
480 dfi->dir_release_count = req->r_dir_release_cnt;
481 dfi->dir_ordered_count = req->r_dir_ordered_cnt;
486 dfi->readdir_cache_idx = -1;
488 dfi->dir_release_count = 0;
497 err = note_last_dentry(dfi, rde->name, rde->name_len,
500 ceph_mdsc_put_request(dfi->last_readdir);
501 dfi->last_readdir = NULL;
505 dfi->next_offset = 2;
510 rinfo = &dfi->last_readdir->r_reply_info;
512 dfi->frag, rinfo->dir_nr, ctx->pos,
550 * NOTE: Here no need to put the 'dfi->last_readdir',
563 ceph_mdsc_put_request(dfi->last_readdir);
564 dfi->last_readdir = NULL;
566 if (dfi->next_offset > 2) {
567 frag = dfi->frag;
572 if (!ceph_frag_is_rightmost(dfi->frag)) {
573 frag = ceph_frag_next(dfi->frag);
576 dfi->next_offset, true);
581 ctx->pos = ceph_make_fpos(frag, dfi->next_offset,
583 kfree(dfi->last_name);
584 dfi->last_name = NULL;
589 dfi->file_info.flags |= CEPH_F_ATEND;
597 dfi->dir_release_count) {
599 if (dfi->dir_ordered_count ==
604 BUG_ON(dfi->readdir_cache_idx < 0);
605 i_size_write(inode, dfi->readdir_cache_idx *
610 __ceph_dir_set_complete(ci, dfi->dir_release_count,
611 dfi->dir_ordered_count);
618 static void reset_readdir(struct ceph_dir_file_info *dfi)
620 if (dfi->last_readdir) {
621 ceph_mdsc_put_request(dfi->last_readdir);
622 dfi->last_readdir = NULL;
624 kfree(dfi->last_name);
625 dfi->last_name = NULL;
626 dfi->dir_release_count = 0;
627 dfi->readdir_cache_idx = -1;
628 dfi->next_offset = 2; /* compensate for . and .. */
629 dfi->file_info.flags &= ~CEPH_F_ATEND;
636 static bool need_reset_readdir(struct ceph_dir_file_info *dfi, loff_t new_pos)
645 } else if (dfi->frag != fpos_frag(new_pos)) {
648 rinfo = dfi->last_readdir ? &dfi->last_readdir->r_reply_info : NULL;
658 struct ceph_dir_file_info *dfi = file->private_data;
678 if (need_reset_readdir(dfi, offset)) {
680 reset_readdir(dfi);
684 dfi->dir_release_count = 0;
685 dfi->readdir_cache_idx = -1;
691 dfi->file_info.flags &= ~CEPH_F_ATEND;
2061 struct ceph_dir_file_info *dfi = file->private_data;
2070 if (!dfi->dir_info) {
2071 dfi->dir_info = kmalloc(bufsize, GFP_KERNEL);
2072 if (!dfi->dir_info)
2074 dfi->dir_info_len =
2075 snprintf(dfi->dir_info, bufsize,
2095 if (*ppos >= dfi->dir_info_len)
2097 size = min_t(unsigned, size, dfi->dir_info_len-*ppos);
2098 left = copy_to_user(buf, dfi->dir_info + *ppos, size);