diff -rup -X dontdiff linux-2.6.5/fs/reiserfs/xattr_acl.c linux-2.6.5-acl/fs/reiserfs/xattr_acl.c --- linux-2.6.5/fs/reiserfs/xattr_acl.c 2004-08-03 14:18:19.000000000 -0400 +++ linux-2.6.5-acl/fs/reiserfs/xattr_acl.c 2004-08-03 14:21:44.000000000 -0400 @@ -289,8 +289,14 @@ reiserfs_set_acl(struct inode *inode, in error = reiserfs_xattr_set(inode, name, value, size, 0); } else { error = reiserfs_xattr_del (inode, name); - if (error == -ENODATA) + if (error == -ENODATA) { + /* This may seem odd here, but it means that the ACL was set + * with a value representable with mode bits. If there was + * an ACL before, reiserfs_xattr_del already dirtied the inode. + */ + mark_inode_dirty (inode); error = 0; + } } if (value) diff -rup -X dontdiff linux-2.6.5/fs/reiserfs/xattr.c linux-2.6.5-acl/fs/reiserfs/xattr.c --- linux-2.6.5/fs/reiserfs/xattr.c 2004-08-03 14:18:53.000000000 -0400 +++ linux-2.6.5-acl/fs/reiserfs/xattr.c 2004-08-03 14:20:51.000000000 -0400 @@ -761,6 +761,11 @@ reiserfs_xattr_del (struct inode *inode, err = __reiserfs_xattr_del (dir, name, strlen (name)); dput (dir); + if (!err) { + inode->i_ctime = CURRENT_TIME; + mark_inode_dirty (inode); + } + out: return err; } @@ -1241,8 +1246,10 @@ xattr_lookup_poison (struct dentry *dent name->hash == priv_root->d_name.hash && !memcmp (name->name, priv_root->d_name.name, name->len)) { return -ENOENT; - } - return 0; + } else if (q1->len == name->len && + !memcmp(q1->name, name->name, name->len)) + return 0; + return 1; } static struct dentry_operations xattr_lookup_poison_ops = {