Lines Matching full:dfi
113 struct ceph_dir_file_info *dfi, in note_last_dentry() argument
120 kfree(dfi->last_name); in note_last_dentry()
121 dfi->last_name = buf; in note_last_dentry()
122 memcpy(dfi->last_name, name, len); in note_last_dentry()
123 dfi->last_name[len] = 0; in note_last_dentry()
124 dfi->next_offset = next_offset; in note_last_dentry()
125 doutc(fsc->client, "'%s'\n", dfi->last_name); in note_last_dentry()
188 struct ceph_dir_file_info *dfi = file->private_data; in __dcache_readdir() local
239 dfi->file_info.flags |= CEPH_F_ATEND; in __dcache_readdir()
291 ret = note_last_dentry(fsc, dfi, last->d_name.name, in __dcache_readdir()
298 if (dfi->readdir_cache_idx >= 0) { in __dcache_readdir()
299 dfi->readdir_cache_idx = -1; in __dcache_readdir()
300 dfi->dir_release_count = 0; in __dcache_readdir()
306 static bool need_send_readdir(struct ceph_dir_file_info *dfi, loff_t pos) in need_send_readdir() argument
308 if (!dfi->last_readdir) in need_send_readdir()
311 return !ceph_frag_contains_value(dfi->frag, fpos_hash(pos)); in need_send_readdir()
313 return dfi->frag != fpos_frag(pos); in need_send_readdir()
318 struct ceph_dir_file_info *dfi = file->private_data; in ceph_readdir() local
331 if (dfi->file_info.flags & CEPH_F_ATEND) in ceph_readdir()
385 if (need_send_readdir(dfi, ctx->pos)) { in ceph_readdir()
391 if (dfi->last_readdir) { in ceph_readdir()
392 ceph_mdsc_put_request(dfi->last_readdir); in ceph_readdir()
393 dfi->last_readdir = NULL; in ceph_readdir()
407 inode, ceph_vinop(inode), frag, dfi->last_name); in ceph_readdir()
424 if (dfi->last_name) { in ceph_readdir()
425 struct qstr d_name = { .name = dfi->last_name, in ceph_readdir()
426 .len = strlen(dfi->last_name) }; in ceph_readdir()
445 req->r_dir_release_cnt = dfi->dir_release_count; in ceph_readdir()
446 req->r_dir_ordered_cnt = dfi->dir_ordered_count; in ceph_readdir()
447 req->r_readdir_cache_idx = dfi->readdir_cache_idx; in ceph_readdir()
448 req->r_readdir_offset = dfi->next_offset; in ceph_readdir()
472 dfi->next_offset = req->r_readdir_offset; in ceph_readdir()
475 dfi->next_offset, in ceph_readdir()
480 dfi->frag = frag; in ceph_readdir()
481 dfi->last_readdir = req; in ceph_readdir()
484 dfi->readdir_cache_idx = req->r_readdir_cache_idx; in ceph_readdir()
485 if (dfi->readdir_cache_idx < 0) { in ceph_readdir()
487 dfi->dir_ordered_count = 0; in ceph_readdir()
489 dfi->next_offset == 2) { in ceph_readdir()
492 dfi->dir_release_count = req->r_dir_release_cnt; in ceph_readdir()
493 dfi->dir_ordered_count = req->r_dir_ordered_cnt; in ceph_readdir()
499 dfi->readdir_cache_idx = -1; in ceph_readdir()
501 dfi->dir_release_count = 0; in ceph_readdir()
510 err = note_last_dentry(fsc, dfi, rde->name, in ceph_readdir()
513 ceph_mdsc_put_request(dfi->last_readdir); in ceph_readdir()
514 dfi->last_readdir = NULL; in ceph_readdir()
518 dfi->next_offset = 2; in ceph_readdir()
523 rinfo = &dfi->last_readdir->r_reply_info; in ceph_readdir()
525 inode, ceph_vinop(inode), dfi->frag, rinfo->dir_nr, ctx->pos, in ceph_readdir()
564 * NOTE: Here no need to put the 'dfi->last_readdir', in ceph_readdir()
577 ceph_mdsc_put_request(dfi->last_readdir); in ceph_readdir()
578 dfi->last_readdir = NULL; in ceph_readdir()
580 if (dfi->next_offset > 2) { in ceph_readdir()
581 frag = dfi->frag; in ceph_readdir()
586 if (!ceph_frag_is_rightmost(dfi->frag)) { in ceph_readdir()
587 frag = ceph_frag_next(dfi->frag); in ceph_readdir()
590 dfi->next_offset, true); in ceph_readdir()
595 ctx->pos = ceph_make_fpos(frag, dfi->next_offset, in ceph_readdir()
597 kfree(dfi->last_name); in ceph_readdir()
598 dfi->last_name = NULL; in ceph_readdir()
604 dfi->file_info.flags |= CEPH_F_ATEND; in ceph_readdir()
612 dfi->dir_release_count) { in ceph_readdir()
614 if (dfi->dir_ordered_count == in ceph_readdir()
620 BUG_ON(dfi->readdir_cache_idx < 0); in ceph_readdir()
621 i_size_write(inode, dfi->readdir_cache_idx * in ceph_readdir()
627 __ceph_dir_set_complete(ci, dfi->dir_release_count, in ceph_readdir()
628 dfi->dir_ordered_count); in ceph_readdir()
636 static void reset_readdir(struct ceph_dir_file_info *dfi) in reset_readdir() argument
638 if (dfi->last_readdir) { in reset_readdir()
639 ceph_mdsc_put_request(dfi->last_readdir); in reset_readdir()
640 dfi->last_readdir = NULL; in reset_readdir()
642 kfree(dfi->last_name); in reset_readdir()
643 dfi->last_name = NULL; in reset_readdir()
644 dfi->dir_release_count = 0; in reset_readdir()
645 dfi->readdir_cache_idx = -1; in reset_readdir()
646 dfi->next_offset = 2; /* compensate for . and .. */ in reset_readdir()
647 dfi->file_info.flags &= ~CEPH_F_ATEND; in reset_readdir()
654 static bool need_reset_readdir(struct ceph_dir_file_info *dfi, loff_t new_pos) in need_reset_readdir() argument
663 } else if (dfi->frag != fpos_frag(new_pos)) { in need_reset_readdir()
666 rinfo = dfi->last_readdir ? &dfi->last_readdir->r_reply_info : NULL; in need_reset_readdir()
676 struct ceph_dir_file_info *dfi = file->private_data; in ceph_dir_llseek() local
697 if (need_reset_readdir(dfi, offset)) { in ceph_dir_llseek()
700 reset_readdir(dfi); in ceph_dir_llseek()
704 dfi->dir_release_count = 0; in ceph_dir_llseek()
705 dfi->readdir_cache_idx = -1; in ceph_dir_llseek()
710 dfi->file_info.flags &= ~CEPH_F_ATEND; in ceph_dir_llseek()
2132 struct ceph_dir_file_info *dfi = file->private_data; in ceph_read_dir() local
2141 if (!dfi->dir_info) { in ceph_read_dir()
2142 dfi->dir_info = kmalloc(bufsize, GFP_KERNEL); in ceph_read_dir()
2143 if (!dfi->dir_info) in ceph_read_dir()
2145 dfi->dir_info_len = in ceph_read_dir()
2146 snprintf(dfi->dir_info, bufsize, in ceph_read_dir()
2166 if (*ppos >= dfi->dir_info_len) in ceph_read_dir()
2168 size = min_t(unsigned, size, dfi->dir_info_len-*ppos); in ceph_read_dir()
2169 left = copy_to_user(buf, dfi->dir_info + *ppos, size); in ceph_read_dir()