mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
dentry_kill(): don't try to remove from shrink list
If the victim in on the shrink list, don't remove it from there. If shrink_dentry_list() manages to remove it from the list before we are done - fine, we'll just free it as usual. If not - mark it with new flag (DCACHE_MAY_FREE) and leave it there. Eventually, shrink_dentry_list() will get to it, remove the sucker from shrink list and call dentry_kill(dentry, 0). Which is where we'll deal with freeing. Since now dentry_kill(dentry, 0) may happen after or during dentry_kill(dentry, 1), we need to recognize that (by seeing DCACHE_DENTRY_KILLED already set), unlock everything and either free the sucker (in case DCACHE_MAY_FREE has been set) or leave it for ongoing dentry_kill(dentry, 1) to deal with. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
01b6035190
commit
41edf278fc
2 changed files with 21 additions and 8 deletions
|
@ -221,6 +221,8 @@ struct dentry_operations {
|
|||
#define DCACHE_SYMLINK_TYPE 0x00300000 /* Symlink */
|
||||
#define DCACHE_FILE_TYPE 0x00400000 /* Other file type */
|
||||
|
||||
#define DCACHE_MAY_FREE 0x00800000
|
||||
|
||||
extern seqlock_t rename_lock;
|
||||
|
||||
static inline int dname_external(const struct dentry *dentry)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue