You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openwrt/target/linux/generic/patches-2.6.38/218-mini_fo_fix_2_6_38.patch

89 lines
2.9 KiB
Diff

--- 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;