VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / fs / hpfs / ea.c
index 11057ec..66339dc 100644 (file)
@@ -234,7 +234,7 @@ void hpfs_set_ea(struct inode *inode, struct fnode *fnode, char *key, char *data
                }
                pos += ea->namelen + ea->valuelen + 5;
        }
-       if (!fnode->ea_size_s) {
+       if (!fnode->ea_offs) {
                /*if (fnode->ea_size_s) {
                        hpfs_error(s, "fnode %08x: ea_size_s == %03x, ea_offs == 0",
                                inode->i_ino, fnode->ea_size_s);
@@ -242,15 +242,13 @@ void hpfs_set_ea(struct inode *inode, struct fnode *fnode, char *key, char *data
                }*/
                fnode->ea_offs = 0xc4;
        }
-       if (fnode->ea_offs < 0xc4 || fnode->ea_offs + fnode->ea_size_s > 0x200) {
+       if (fnode->ea_offs < 0xc4 || fnode->ea_offs + fnode->acl_size_s + fnode->ea_size_s > 0x200) {
                hpfs_error(s, "fnode %08x: ea_offs == %03x, ea_size_s == %03x",
                        inode->i_ino, fnode->ea_offs, fnode->ea_size_s);
                return;
        }
        if ((fnode->ea_size_s || !fnode->ea_size_l) &&
-            fnode->ea_offs + fnode->ea_size_s + strlen(key) + size + 5 <= 0x200) {
-               /* I'm not sure ... maybe we overwrite ACL here. I have no info
-                  on it right now :-( */
+            fnode->ea_offs + fnode->acl_size_s + fnode->ea_size_s + strlen(key) + size + 5 <= 0x200) {
                ea = fnode_end_ea(fnode);
                *(char *)ea = 0;
                ea->namelen = strlen(key);