Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1df98b8b authored by Al Viro's avatar Al Viro
Browse files

proc_fill_cache(): clean up, get rid of pointless find_inode_number() use



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent c52a47ac
Loading
Loading
Loading
Loading
+13 −23
Original line number Diff line number Diff line
@@ -1686,39 +1686,29 @@ bool proc_fill_cache(struct file *file, struct dir_context *ctx,
	instantiate_t instantiate, struct task_struct *task, const void *ptr)
{
	struct dentry *child, *dir = file->f_path.dentry;
	struct qstr qname = QSTR_INIT(name, len);
	struct inode *inode;
	struct qstr qname;
	ino_t ino = 0;
	unsigned type = DT_UNKNOWN;
	unsigned type;
	ino_t ino;

	qname.name = name;
	qname.len  = len;
	qname.hash = full_name_hash(name, len);

	child = d_lookup(dir, &qname);
	child = d_hash_and_lookup(dir, &qname);
	if (!child) {
		struct dentry *new;
		new = d_alloc(dir, &qname);
		if (new) {
			child = ERR_PTR(instantiate(dir->d_inode, new, task, ptr)); 
			if (child)
				dput(new);
			else
				child = new;
		child = d_alloc(dir, &qname);
		if (!child)
			goto end_instantiate;
		if (instantiate(dir->d_inode, child, task, ptr) < 0) {
			dput(child);
			goto end_instantiate;
		}
	}
	if (!child || IS_ERR(child) || !child->d_inode)
		goto end_instantiate;
	inode = child->d_inode;
	ino = inode->i_ino;
	type = inode->i_mode >> 12;
	dput(child);
end_instantiate:
	if (!ino)
		ino = find_inode_number(dir, &qname);
	if (!ino)
		ino = 1;
	return dir_emit(ctx, name, len, ino, type);

end_instantiate:
	return dir_emit(ctx, name, len, 1, DT_UNKNOWN);
}

#ifdef CONFIG_CHECKPOINT_RESTORE