projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
drm/rockchip: add support for src1
[firefly-linux-kernel-4.4.55.git]
/
fs
/
dcache.c
diff --git
a/fs/dcache.c
b/fs/dcache.c
index d049200362690961431ae07c41bb9582ae6ebf94..7b8feb6d60c8285234d4dd7cbd82b7604addf484 100644
(file)
--- a/
fs/dcache.c
+++ b/
fs/dcache.c
@@
-578,7
+578,6
@@
static struct dentry *dentry_kill(struct dentry *dentry)
failed:
spin_unlock(&dentry->d_lock);
failed:
spin_unlock(&dentry->d_lock);
- cpu_relax();
return dentry; /* try again with same dentry */
}
return dentry; /* try again with same dentry */
}
@@
-752,6
+751,8
@@
void dput(struct dentry *dentry)
return;
repeat:
return;
repeat:
+ might_sleep();
+
rcu_read_lock();
if (likely(fast_dput(dentry))) {
rcu_read_unlock();
rcu_read_lock();
if (likely(fast_dput(dentry))) {
rcu_read_unlock();
@@
-783,8
+784,10
@@
repeat:
kill_it:
dentry = dentry_kill(dentry);
kill_it:
dentry = dentry_kill(dentry);
- if (dentry)
+ if (dentry) {
+ cond_resched();
goto repeat;
goto repeat;
+ }
}
EXPORT_SYMBOL(dput);
}
EXPORT_SYMBOL(dput);
@@
-1319,8
+1322,11
@@
int d_set_mounted(struct dentry *dentry)
}
spin_lock(&dentry->d_lock);
if (!d_unlinked(dentry)) {
}
spin_lock(&dentry->d_lock);
if (!d_unlinked(dentry)) {
- dentry->d_flags |= DCACHE_MOUNTED;
- ret = 0;
+ ret = -EBUSY;
+ if (!d_mountpoint(dentry)) {
+ dentry->d_flags |= DCACHE_MOUNTED;
+ ret = 0;
+ }
}
spin_unlock(&dentry->d_lock);
out:
}
spin_unlock(&dentry->d_lock);
out: