summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-2.6.38/218-mini_fo_fix_2_6_38.patch
blob: 22ac42c91765641602147c4e6b229f42f8a16a50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
--- a/fs/mini_fo/dentry.c
+++ b/fs/mini_fo/dentry.c
@@ -78,7 +78,7 @@ mini_fo_d_revalidate(dentry_t *dentry, i
 
 
 STATIC int
-mini_fo_d_hash(dentry_t *dentry, qstr_t *name)
+mini_fo_d_hash(const struct dentry *dentry, const struct inode *inode, qstr_t *name)
 {
 	int err = 0;
 	dentry_t *hidden_dentry;
@@ -96,7 +96,7 @@ mini_fo_d_hash(dentry_t *dentry, qstr_t 
 		if(hidden_sto_dentry &&
 		   hidden_sto_dentry->d_op &&
 		   hidden_sto_dentry->d_op->d_hash) {
-			err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
+			err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, hidden_sto_dentry->d_inode, name);
 		}
 		goto out;
 	}
@@ -106,7 +106,7 @@ mini_fo_d_hash(dentry_t *dentry, qstr_t 
 		if(hidden_dentry &&
 		   hidden_dentry->d_op &&
 		   hidden_dentry->d_op->d_hash) {
-			err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
+			err = hidden_dentry->d_op->d_hash(hidden_dentry, hidden_dentry->d_inode, name);
 		}
 		goto out;
 	}
@@ -116,14 +116,14 @@ mini_fo_d_hash(dentry_t *dentry, qstr_t 
 		if(hidden_sto_dentry &&
 		   hidden_sto_dentry->d_op &&
 		   hidden_sto_dentry->d_op->d_hash) {
-			err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
+			err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, hidden_sto_dentry->d_inode, name);
 			goto out;
 		}
 		hidden_dentry = dtohd(dentry);
 		if(hidden_dentry &&
 		   hidden_dentry->d_op &&
 		   hidden_dentry->d_op->d_hash) {
-			err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
+			err = hidden_dentry->d_op->d_hash(hidden_dentry, hidden_dentry->d_inode, name);
 			goto out;
 		}
 	}
@@ -136,21 +136,25 @@ mini_fo_d_hash(dentry_t *dentry, qstr_t 
 
 
 STATIC int
-mini_fo_d_compare(dentry_t *dentry, qstr_t *a, qstr_t *b)
+mini_fo_d_compare(const struct dentry *dentry_a, const struct inode *inode_a,
+		  const struct dentry *dentry_b, const struct inode *inode_b,
+		  unsigned int alen, const char *a, const struct qstr *b)
 {
 	int err;
 	dentry_t *hidden_dentry=NULL;
 
 	/* hidden_dentry = mini_fo_hidden_dentry(dentry); */
-	if(dtohd2(dentry))
-		hidden_dentry = dtohd2(dentry);
-	else if(dtohd(dentry))
-		hidden_dentry = dtohd(dentry);
+	if(dtohd2(dentry_a))
+		hidden_dentry = dtohd2(dentry_a);
+	else if(dtohd(dentry_a))
+		hidden_dentry = dtohd(dentry_a);
 
 	if (hidden_dentry && hidden_dentry->d_op && hidden_dentry->d_op->d_compare) {
-		err = hidden_dentry->d_op->d_compare(hidden_dentry, a, b);
+		err = hidden_dentry->d_op->d_compare(hidden_dentry, hidden_dentry->d_inode,
+						     dentry_b, inode_b,
+						     alen, a, b);
 	} else {
-		err = ((a->len != b->len) || memcmp(a->name, b->name, b->len));
+		err = ((alen != b->len) || memcmp(a, b->name, b->len));
 	}
 
 	return err;
@@ -158,7 +162,7 @@ mini_fo_d_compare(dentry_t *dentry, qstr
 
 
 int
-mini_fo_d_delete(dentry_t *dentry)
+mini_fo_d_delete(const struct dentry *dentry)
 {
 	dentry_t *hidden_dentry;
 	dentry_t *hidden_sto_dentry;