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

Commit 65d8eb5a authored by Al Viro's avatar Al Viro
Browse files

now lock_parent() can't run into killed dentry



all remaining callers hold either a reference or ->i_lock

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 3b3f09f4
Loading
Loading
Loading
Loading
+3 −10
Original line number Diff line number Diff line
@@ -593,8 +593,6 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
	struct dentry *parent = dentry->d_parent;
	if (IS_ROOT(dentry))
		return NULL;
	if (unlikely(dentry->d_lockref.count < 0))
		return NULL;
	if (likely(spin_trylock(&parent->d_lock)))
		return parent;
	rcu_read_lock();
@@ -614,16 +612,11 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
		spin_unlock(&parent->d_lock);
		goto again;
	}
	if (parent != dentry) {
	rcu_read_unlock();
	if (parent != dentry)
		spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
		if (unlikely(dentry->d_lockref.count < 0)) {
			spin_unlock(&parent->d_lock);
			parent = NULL;
		}
	} else {
	else
		parent = NULL;
	}
	rcu_read_unlock();
	return parent;
}