In d_delete the d_alias list isn't re-inited after doing the list_del,
so it could cause problems testing list_empty(&dentry->d_alias) later.
Regards,
Bill
--------------A37A955DA0A58C7A6F22F8A9
Content-Type: text/plain; charset=us-ascii; name="dcache_51-patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="dcache_51-patch"
--- fs/dcache.c.old Tue Aug 19 09:15:10 1997
+++ fs/dcache.c Tue Aug 19 12:42:22 1997
@@ -313,9 +313,12 @@
if (dentry->d_count == 1) {
struct inode * inode = dentry->d_inode;
- dentry->d_inode = NULL;
- list_del(&dentry->d_alias);
- iput(inode);
+ if (inode) {
+ dentry->d_inode = NULL;
+ list_del(&dentry->d_alias);
+ INIT_LIST_HEAD(&dentry->d_alias);
+ iput(inode);
+ }
return;
}
--------------A37A955DA0A58C7A6F22F8A9--