don't try odd hacks on ENOSPC, just fail it.
What's the reason for this patch? Doesn't it work? HPFS is tricky that when you delete file there, it may allocate more space (b-trees are evil). So it truncates file content first.
Mikulas
Signed-off-by: Christoph Hellwig <hch@xxxxxx> Index: linux-2.6/fs/hpfs/namei.c =================================================================== --- linux-2.6.orig/fs/hpfs/namei.c 2006-03-24 20:20:00.000000000 +0100 +++ linux-2.6/fs/hpfs/namei.c 2006-04-20 20:29:07.000000000 +0200 @@ -376,12 +376,10 @@ dnode_secno dno; fnode_secno fno; int r; - int rep = 0; int err; lock_kernel(); hpfs_adjust_length((char *)name, &len); -again: mutex_lock(&hpfs_i(inode)->i_parent_mutex); mutex_lock(&hpfs_i(dir)->i_mutex); err = -ENOENT; @@ -404,35 +402,9 @@ hpfs_error(dir->i_sb, "there was error when removing dirent"); err = -EFSERROR; break; - case 2: /* no space for deleting, try to truncate file */ - + case 2: /* no space for deleting */ err = -ENOSPC; - if (rep++) - break; - - mutex_unlock(&hpfs_i(dir)->i_mutex); - mutex_unlock(&hpfs_i(inode)->i_parent_mutex); - d_drop(dentry); - spin_lock(&dentry->d_lock); - if (atomic_read(&dentry->d_count) > 1 || - permission(inode, MAY_WRITE, NULL) || - !S_ISREG(inode->i_mode) || - get_write_access(inode)) { - spin_unlock(&dentry->d_lock); - d_rehash(dentry); - } else { - struct iattr newattrs; - spin_unlock(&dentry->d_lock); - /*printk("HPFS: truncating file before delete.\n");*/ - newattrs.ia_size = 0; - newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME; - err = notify_change(dentry, &newattrs); - put_write_access(inode); - if (!err) - goto again; - } - unlock_kernel(); - return -ENOSPC; + break; default: inode->i_nlink--; err = 0;
- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html