osd_ios_general_scan(struct osd_thread_info *info, struct osd_device *dev,
struct dentry *dentry, filldir_t filldir)
{
- struct osd_ios_filldir_buf buf = {
- .ctx.actor = filldir,
- .oifb_info = info,
- .oifb_dev = dev,
- .oifb_dentry = dentry };
- struct file *filp = &info->oti_file;
- struct inode *inode = dentry->d_inode;
- const struct file_operations *fops = inode->i_fop;
- int rc;
+ struct osd_ios_filldir_buf buf = {
+ .ctx.actor = filldir,
+ .oifb_info = info,
+ .oifb_dev = dev,
+ .oifb_dentry = dentry
+ };
+ struct file *filp;
+ struct inode *inode = dentry->d_inode;
+ int rc;
+
ENTRY;
LASSERT(filldir != NULL);
- filp->f_pos = 0;
- filp->f_path.dentry = dentry;
- filp->f_flags |= O_NOATIME;
- filp->f_mode = FMODE_64BITHASH | FMODE_NONOTIFY;
- filp->f_mapping = inode->i_mapping;
- filp->f_op = fops;
- filp->private_data = NULL;
- filp->f_cred = current_cred();
- filp->f_inode = inode;
+ filp = osd_quasi_file_by_dentry(info->oti_env, dentry);
rc = osd_security_file_alloc(filp);
if (rc)
RETURN(rc);
rc = iterate_dir(filp, &buf.ctx);
} while (rc >= 0 && buf.oifb_items > 0 &&
filp->f_pos != LDISKFS_HTREE_EOF_64BIT);
- fops->release(inode, filp);
+ inode->i_fop->release(inode, filp);
RETURN(rc);
}