Lines Matching refs:fi
115 static int note_last_dentry(struct ceph_file_info *fi, const char *name, in note_last_dentry() argument
121 kfree(fi->last_name); in note_last_dentry()
122 fi->last_name = buf; in note_last_dentry()
123 memcpy(fi->last_name, name, len); in note_last_dentry()
124 fi->last_name[len] = 0; in note_last_dentry()
125 fi->next_offset = next_offset; in note_last_dentry()
126 dout("note_last_dentry '%s'\n", fi->last_name); in note_last_dentry()
144 struct ceph_file_info *fi = file->private_data; in __dcache_readdir() local
168 fi->flags |= CEPH_F_ATEND; in __dcache_readdir()
245 ret = note_last_dentry(fi, last->d_name.name, last->d_name.len, in __dcache_readdir()
256 struct ceph_file_info *fi = file->private_data; in ceph_readdir() local
268 if (fi->flags & CEPH_F_ATEND) in ceph_readdir()
313 if (fi->frag != frag || fi->last_readdir == NULL) { in ceph_readdir()
319 if (fi->last_readdir) { in ceph_readdir()
320 ceph_mdsc_put_request(fi->last_readdir); in ceph_readdir()
321 fi->last_readdir = NULL; in ceph_readdir()
325 ceph_vinop(inode), frag, fi->last_name); in ceph_readdir()
338 if (fi->last_name) { in ceph_readdir()
339 req->r_path2 = kstrdup(fi->last_name, GFP_KERNEL); in ceph_readdir()
345 req->r_dir_release_cnt = fi->dir_release_count; in ceph_readdir()
346 req->r_dir_ordered_cnt = fi->dir_ordered_count; in ceph_readdir()
347 req->r_readdir_cache_idx = fi->readdir_cache_idx; in ceph_readdir()
348 req->r_readdir_offset = fi->next_offset; in ceph_readdir()
370 fi->next_offset = off; in ceph_readdir()
373 fi->frag = frag; in ceph_readdir()
374 fi->offset = fi->next_offset; in ceph_readdir()
375 fi->last_readdir = req; in ceph_readdir()
378 fi->readdir_cache_idx = req->r_readdir_cache_idx; in ceph_readdir()
379 if (fi->readdir_cache_idx < 0) { in ceph_readdir()
381 fi->dir_ordered_count = 0; in ceph_readdir()
385 fi->dir_release_count = req->r_dir_release_cnt; in ceph_readdir()
386 fi->dir_ordered_count = req->r_dir_ordered_cnt; in ceph_readdir()
391 fi->readdir_cache_idx = -1; in ceph_readdir()
393 fi->dir_release_count = 0; in ceph_readdir()
397 kfree(fi->last_name); in ceph_readdir()
398 fi->last_name = NULL; in ceph_readdir()
400 fi->next_offset = 2; in ceph_readdir()
402 fi->next_offset = 0; in ceph_readdir()
404 err = note_last_dentry(fi, in ceph_readdir()
407 fi->next_offset + rinfo->dir_nr); in ceph_readdir()
413 rinfo = &fi->last_readdir->r_reply_info; in ceph_readdir()
415 rinfo->dir_nr, off, fi->offset); in ceph_readdir()
418 while (off >= fi->offset && off - fi->offset < rinfo->dir_nr) { in ceph_readdir()
420 rinfo->dir_in[off - fi->offset].in; in ceph_readdir()
425 off, off - fi->offset, rinfo->dir_nr, ctx->pos, in ceph_readdir()
426 rinfo->dir_dname_len[off - fi->offset], in ceph_readdir()
427 rinfo->dir_dname[off - fi->offset], in); in ceph_readdir()
434 rinfo->dir_dname[off - fi->offset], in ceph_readdir()
435 rinfo->dir_dname_len[off - fi->offset], in ceph_readdir()
444 if (fi->last_name) { in ceph_readdir()
445 ceph_mdsc_put_request(fi->last_readdir); in ceph_readdir()
446 fi->last_readdir = NULL; in ceph_readdir()
458 fi->flags |= CEPH_F_ATEND; in ceph_readdir()
465 if (atomic64_read(&ci->i_release_count) == fi->dir_release_count) { in ceph_readdir()
467 if (fi->dir_ordered_count == atomic64_read(&ci->i_ordered_count)) { in ceph_readdir()
471 BUG_ON(fi->readdir_cache_idx < 0); in ceph_readdir()
472 i_size_write(inode, fi->readdir_cache_idx * in ceph_readdir()
477 __ceph_dir_set_complete(ci, fi->dir_release_count, in ceph_readdir()
478 fi->dir_ordered_count); in ceph_readdir()
486 static void reset_readdir(struct ceph_file_info *fi, unsigned frag) in reset_readdir() argument
488 if (fi->last_readdir) { in reset_readdir()
489 ceph_mdsc_put_request(fi->last_readdir); in reset_readdir()
490 fi->last_readdir = NULL; in reset_readdir()
492 kfree(fi->last_name); in reset_readdir()
493 fi->last_name = NULL; in reset_readdir()
494 fi->dir_release_count = 0; in reset_readdir()
495 fi->readdir_cache_idx = -1; in reset_readdir()
497 fi->next_offset = 2; /* compensate for . and .. */ in reset_readdir()
499 fi->next_offset = 0; in reset_readdir()
500 fi->flags &= ~CEPH_F_ATEND; in reset_readdir()
505 struct ceph_file_info *fi = file->private_data; in ceph_dir_llseek() local
507 loff_t old_offset = ceph_make_fpos(fi->frag, fi->next_offset); in ceph_dir_llseek()
527 fi->flags &= ~CEPH_F_ATEND; in ceph_dir_llseek()
532 fpos_frag(offset) != fi->frag || in ceph_dir_llseek()
533 fpos_off(offset) < fi->offset) { in ceph_dir_llseek()
537 reset_readdir(fi, fpos_frag(offset)); in ceph_dir_llseek()
540 fi->dir_release_count = 0; in ceph_dir_llseek()
541 fi->readdir_cache_idx = -1; in ceph_dir_llseek()