From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mikulas Patocka Subject: Re: [PATCH] hpfs: remove ENOSPC hack in unlink Date: Sat, 22 Apr 2006 21:45:36 +0200 (CEST) Message-ID: References: <20060420183149.GA6479@lst.de> Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: linux-fsdevel@vger.kernel.org Return-path: Received: from artax.karlin.mff.cuni.cz ([195.113.31.125]:13526 "EHLO artax.karlin.mff.cuni.cz") by vger.kernel.org with ESMTP id S1750973AbWDVTph (ORCPT ); Sat, 22 Apr 2006 15:45:37 -0400 To: Christoph Hellwig In-Reply-To: <20060420183149.GA6479@lst.de> Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org > 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 > > 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; >