--- linux-2.6.5-7.141/mm/filemap.c.orig 2005-02-18 14:53:26.000000000 +0200 +++ linux-2.6.5-7.141/mm/filemap.c 2005-02-18 22:37:28.727492096 +0200 @@ -1816,6 +1816,19 @@ int remove_suid(struct dentry *dentry) if (unlikely(kill && !capable(CAP_FSETID))) { struct iattr newattrs; + struct inode_operations *op = dentry->d_inode->i_op; + + if (op && op->setattr_raw) { + newattrs.ia_mode = mode & ~S_ISUID; + if (kill & ATTR_KILL_SGID) + newattrs.ia_mode &= ~S_ISGID; + + newattrs.ia_valid = ATTR_FORCE | ATTR_MODE; + result = op->setattr_raw(dentry->d_inode, &newattrs); + /* the file system wants to use normal vfs path now */ + if (result != -EOPNOTSUPP) + return result; + } newattrs.ia_valid = ATTR_FORCE | kill; result = notify_change(dentry, &newattrs);