--- a/fs/jffs2/dir.c
+++ b/fs/jffs2/dir.c
--- a/fs/jffs2/dir.c
+++ b/fs/jffs2/dir.c
+@@ -34,6 +34,9 @@ static int jffs2_mknod (struct inode *,s
static int jffs2_rename (struct inode *, struct dentry *,
struct inode *, struct dentry *);
static int jffs2_rename (struct inode *, struct dentry *,
struct inode *, struct dentry *);
const struct file_operations jffs2_dir_operations =
{
.read = generic_read_dir,
const struct file_operations jffs2_dir_operations =
{
.read = generic_read_dir,
+@@ -55,6 +58,8 @@ const struct inode_operations jffs2_dir_
.rmdir = jffs2_rmdir,
.mknod = jffs2_mknod,
.rename = jffs2_rename,
.rmdir = jffs2_rmdir,
.mknod = jffs2_mknod,
.rename = jffs2_rename,
.permission = jffs2_permission,
.setattr = jffs2_setattr,
.setxattr = jffs2_setxattr,
.permission = jffs2_permission,
.setattr = jffs2_setattr,
.setxattr = jffs2_setxattr,
+@@ -98,8 +103,21 @@ static struct dentry *jffs2_lookup(struc
mutex_unlock(&dir_f->sem);
if (ino) {
inode = jffs2_iget(dir_i->i_sb, ino);
mutex_unlock(&dir_f->sem);
if (ino) {
inode = jffs2_iget(dir_i->i_sb, ino);
+@@ -155,7 +173,9 @@ static int jffs2_readdir(struct file *fi
fd->name, fd->ino, fd->type, curofs, offset));
continue;
}
fd->name, fd->ino, fd->type, curofs, offset));
continue;
}
D2(printk(KERN_DEBUG "Skipping deletion dirent \"%s\"\n", fd->name));
offset++;
continue;
D2(printk(KERN_DEBUG "Skipping deletion dirent \"%s\"\n", fd->name));
offset++;
continue;
+@@ -498,6 +518,11 @@ static int jffs2_mkdir (struct inode *di
inode->i_op = &jffs2_dir_inode_operations;
inode->i_fop = &jffs2_dir_operations;
inode->i_op = &jffs2_dir_inode_operations;
inode->i_fop = &jffs2_dir_operations;
+@@ -779,6 +804,82 @@ static int jffs2_mknod (struct inode *di
{
--- a/fs/jffs2/fs.c
+++ b/fs/jffs2/fs.c
{
--- a/fs/jffs2/fs.c
+++ b/fs/jffs2/fs.c
+@@ -301,6 +301,10 @@ struct inode *jffs2_iget(struct super_bl
inode->i_op = &jffs2_dir_inode_operations;
inode->i_fop = &jffs2_dir_operations;
inode->i_op = &jffs2_dir_inode_operations;
inode->i_fop = &jffs2_dir_operations;
case S_IFREG:
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
case S_IFREG:
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
+@@ -172,7 +172,7 @@ static int jffs2_fill_super(struct super
sb->s_op = &jffs2_super_operations;
sb->s_export_op = &jffs2_export_ops;
sb->s_op = &jffs2_super_operations;
sb->s_export_op = &jffs2_export_ops;
--- a/fs/union.c
+++ b/fs/union.c
--- a/fs/union.c
+++ b/fs/union.c
+@@ -842,10 +842,8 @@ static int union_copyup_dir_one(void *bu
/* Lookup this entry in the topmost directory */
dentry = lookup_one_len(name, topmost_dentry, namlen);
/* Lookup this entry in the topmost directory */
dentry = lookup_one_len(name, topmost_dentry, namlen);
/*
* If the entry already exists, one of the following is true:
/*
* If the entry already exists, one of the following is true:
+@@ -857,7 +855,6 @@ static int union_copyup_dir_one(void *bu
*/
if (dentry->d_inode || d_is_whiteout(dentry) ||
d_is_fallthru(dentry)) {
*/
if (dentry->d_inode || d_is_whiteout(dentry) ||
d_is_fallthru(dentry)) {
+@@ -867,7 +864,6 @@ static int union_copyup_dir_one(void *bu
* used, so each file system must implement its own way of
* storing a fallthru entry.
*/
* used, so each file system must implement its own way of
* storing a fallthru entry.
*/