⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ext3-lookup-dotdot-2.6.9.patch

📁 非常经典的一个分布式系统
💻 PATCH
字号:
Index: linux-2.6.9-full/fs/ext3/iopen.c===================================================================--- linux-2.6.9-full.orig/fs/ext3/iopen.c	2006-04-25 08:51:11.000000000 +0400+++ linux-2.6.9-full/fs/ext3/iopen.c	2006-05-06 01:21:11.000000000 +0400@@ -94,9 +94,12 @@ static struct dentry *iopen_lookup(struc 		assert(!(alternate->d_flags & DCACHE_DISCONNECTED)); 	} -	if (!list_empty(&inode->i_dentry)) {-		alternate = list_entry(inode->i_dentry.next,-				       struct dentry, d_alias);+	list_for_each(lp, &inode->i_dentry) {+		alternate = list_entry(lp, struct dentry, d_alias);+		/* ignore dentries created for ".." to preserve+		 * proper dcache hierarchy -- bug 10458 */+		if (alternate->d_flags & DCACHE_NFSFS_RENAMED)+			continue; 		dget_locked(alternate); 		spin_lock(&alternate->d_lock); 		alternate->d_flags |= DCACHE_REFERENCED;Index: linux-2.6.9-full/fs/ext3/namei.c===================================================================--- linux-2.6.9-full.orig/fs/ext3/namei.c	2006-05-06 01:21:10.000000000 +0400+++ linux-2.6.9-full/fs/ext3/namei.c	2006-05-06 01:29:30.000000000 +0400@@ -1003,6 +1003,38 @@ static struct dentry *ext3_lookup(struct 			return ERR_PTR(-EACCES); 	} +	/* ".." shouldn't go into dcache to preserve dcache hierarchy+	 * otherwise we'll get parent being a child of actual child.+	 * see bug 10458 for details -bzzz */+	if (inode && (dentry->d_name.name[0] == '.' && (dentry->d_name.len == 1 ||+		(dentry->d_name.len == 2 && dentry->d_name.name[1] == '.')))) {+		struct dentry *tmp, *goal = NULL;+		struct list_head *lp;++		/* first, look for an existing dentry - any one is good */+		spin_lock(&dcache_lock);+		list_for_each(lp, &inode->i_dentry) {+			tmp = list_entry(lp, struct dentry, d_alias);+			goal = tmp;+			dget_locked(goal);+			break;+		}+		if (goal == NULL) {+			/* there is no alias, we need to make current dentry:+			 *  a) inaccessible for __d_lookup()+			 *  b) inaccessible for iopen */+			J_ASSERT(list_empty(&dentry->d_alias));+			dentry->d_flags |= DCACHE_NFSFS_RENAMED;+			/* this is d_instantiate() ... */+			list_add(&dentry->d_alias, &inode->i_dentry);+			dentry->d_inode = inode;+		}+		spin_unlock(&dcache_lock);+		if (goal)+			iput(inode);+		return goal;+	}+ 	return iopen_connect_dentry(dentry, inode, 1); } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -