brelse(bh);
}
-void hpfs_write_inode_ea(struct inode *i, struct fnode *fnode)
+static void hpfs_write_inode_ea(struct inode *i, struct fnode *fnode)
{
struct hpfs_inode_info *hpfs_inode = hpfs_i(i);
- if (fnode->acl_size_l || fnode->acl_size_s) {
- /* Some unknown structures like ACL may be in fnode,
- we'd better not overwrite them */
+ /*if (fnode->acl_size_l || fnode->acl_size_s) {
+ Some unknown structures like ACL may be in fnode,
+ we'd better not overwrite them
hpfs_error(i->i_sb, "fnode %08x has some unknown HPFS386 stuctures", i->i_ino);
- } else if (hpfs_sb(i->i_sb)->sb_eas >= 2) {
+ } else*/ if (hpfs_sb(i->i_sb)->sb_eas >= 2) {
u32 ea;
if ((i->i_uid != hpfs_sb(i->i_sb)->sb_uid) || hpfs_inode->i_ea_uid) {
ea = cpu_to_le32(i->i_uid);
struct hpfs_dirent *de;
if (i->i_ino == hpfs_sb(i->i_sb)->sb_root) return;
if (!(fnode = hpfs_map_fnode(i->i_sb, i->i_ino, &bh))) return;
- if (i->i_ino != hpfs_sb(i->i_sb)->sb_root) {
+ if (i->i_ino != hpfs_sb(i->i_sb)->sb_root && i->i_nlink) {
if (!(de = map_fnode_dirent(i->i_sb, i->i_ino, fnode, &qbh))) {
brelse(bh);
return;
}
} else de = NULL;
if (S_ISREG(i->i_mode)) {
- fnode->file_size = de->file_size = i->i_size;
+ fnode->file_size = i->i_size;
+ if (de) de->file_size = i->i_size;
} else if (S_ISDIR(i->i_mode)) {
- fnode->file_size = de->file_size = 0;
+ fnode->file_size = 0;
+ if (de) de->file_size = 0;
}
hpfs_write_inode_ea(i, fnode);
if (de) {
void hpfs_delete_inode(struct inode *inode)
{
+ truncate_inode_pages(&inode->i_data, 0);
lock_kernel();
hpfs_remove_fnode(inode->i_sb, inode->i_ino);
unlock_kernel();