Lines Matching refs:fi
123 struct ceph_file_info *fi = file->private_data; in __dcache_readdir() local
132 last = fi->dentry; in __dcache_readdir()
133 fi->dentry = NULL; in __dcache_readdir()
159 fi->flags |= CEPH_F_ATEND; in __dcache_readdir()
199 fi->dentry = last; in __dcache_readdir()
200 fi->next_offset = fpos_off(di->offset); in __dcache_readdir()
230 static int note_last_dentry(struct ceph_file_info *fi, const char *name, in note_last_dentry() argument
233 kfree(fi->last_name); in note_last_dentry()
234 fi->last_name = kmalloc(len+1, GFP_NOFS); in note_last_dentry()
235 if (!fi->last_name) in note_last_dentry()
237 memcpy(fi->last_name, name, len); in note_last_dentry()
238 fi->last_name[len] = 0; in note_last_dentry()
239 dout("note_last_dentry '%s'\n", fi->last_name); in note_last_dentry()
245 struct ceph_file_info *fi = file->private_data; in ceph_readdir() local
257 if (fi->flags & CEPH_F_ATEND) in ceph_readdir()
283 if ((ctx->pos == 2 || fi->dentry) && in ceph_readdir()
299 if (fi->dentry) { in ceph_readdir()
300 err = note_last_dentry(fi, fi->dentry->d_name.name, in ceph_readdir()
301 fi->dentry->d_name.len); in ceph_readdir()
304 dput(fi->dentry); in ceph_readdir()
305 fi->dentry = NULL; in ceph_readdir()
313 fi->dir_release_count = atomic_read(&ci->i_release_count); in ceph_readdir()
314 fi->dir_ordered_count = ci->i_ordered_count; in ceph_readdir()
319 if (fi->frag != frag || fi->last_readdir == NULL) { in ceph_readdir()
325 if (fi->last_readdir) { in ceph_readdir()
326 ceph_mdsc_put_request(fi->last_readdir); in ceph_readdir()
327 fi->last_readdir = NULL; in ceph_readdir()
331 ceph_vinop(inode), frag, fi->last_name); in ceph_readdir()
344 if (fi->last_name) { in ceph_readdir()
345 req->r_path2 = kstrdup(fi->last_name, GFP_NOFS); in ceph_readdir()
351 req->r_readdir_offset = fi->next_offset; in ceph_readdir()
370 fi->dir_release_count--; in ceph_readdir()
378 fi->next_offset = 2; in ceph_readdir()
380 fi->next_offset = 0; in ceph_readdir()
381 off = fi->next_offset; in ceph_readdir()
383 fi->frag = frag; in ceph_readdir()
384 fi->offset = fi->next_offset; in ceph_readdir()
385 fi->last_readdir = req; in ceph_readdir()
388 kfree(fi->last_name); in ceph_readdir()
389 fi->last_name = NULL; in ceph_readdir()
391 fi->next_offset = 2; in ceph_readdir()
393 fi->next_offset = 0; in ceph_readdir()
395 err = note_last_dentry(fi, in ceph_readdir()
400 fi->next_offset += rinfo->dir_nr; in ceph_readdir()
404 rinfo = &fi->last_readdir->r_reply_info; in ceph_readdir()
406 rinfo->dir_nr, off, fi->offset); in ceph_readdir()
409 while (off >= fi->offset && off - fi->offset < rinfo->dir_nr) { in ceph_readdir()
411 rinfo->dir_in[off - fi->offset].in; in ceph_readdir()
416 off, off - fi->offset, rinfo->dir_nr, ctx->pos, in ceph_readdir()
417 rinfo->dir_dname_len[off - fi->offset], in ceph_readdir()
418 rinfo->dir_dname[off - fi->offset], in); in ceph_readdir()
425 rinfo->dir_dname[off - fi->offset], in ceph_readdir()
426 rinfo->dir_dname_len[off - fi->offset], in ceph_readdir()
435 if (fi->last_name) { in ceph_readdir()
436 ceph_mdsc_put_request(fi->last_readdir); in ceph_readdir()
437 fi->last_readdir = NULL; in ceph_readdir()
449 fi->flags |= CEPH_F_ATEND; in ceph_readdir()
457 if (atomic_read(&ci->i_release_count) == fi->dir_release_count) { in ceph_readdir()
458 if (ci->i_ordered_count == fi->dir_ordered_count) in ceph_readdir()
462 __ceph_dir_set_complete(ci, fi->dir_release_count, in ceph_readdir()
463 fi->dir_ordered_count); in ceph_readdir()
471 static void reset_readdir(struct ceph_file_info *fi, unsigned frag) in reset_readdir() argument
473 if (fi->last_readdir) { in reset_readdir()
474 ceph_mdsc_put_request(fi->last_readdir); in reset_readdir()
475 fi->last_readdir = NULL; in reset_readdir()
477 kfree(fi->last_name); in reset_readdir()
478 fi->last_name = NULL; in reset_readdir()
480 fi->next_offset = 2; /* compensate for . and .. */ in reset_readdir()
482 fi->next_offset = 0; in reset_readdir()
483 if (fi->dentry) { in reset_readdir()
484 dput(fi->dentry); in reset_readdir()
485 fi->dentry = NULL; in reset_readdir()
487 fi->flags &= ~CEPH_F_ATEND; in reset_readdir()
492 struct ceph_file_info *fi = file->private_data; in ceph_dir_llseek() local
494 loff_t old_offset = ceph_make_fpos(fi->frag, fi->next_offset); in ceph_dir_llseek()
515 fi->flags &= ~CEPH_F_ATEND; in ceph_dir_llseek()
524 fpos_frag(offset) != fi->frag || in ceph_dir_llseek()
525 fpos_off(offset) < fi->offset) { in ceph_dir_llseek()
527 reset_readdir(fi, fpos_frag(offset)); in ceph_dir_llseek()
532 fi->dir_release_count--; in ceph_dir_llseek()