Re: [patch 04/14] hpfs: dont call notify_change

Previous thread: [patch 03/14] reiserfs: dont call notify_change by Miklos Szeredi on Tuesday, July 22, 2008 - 6:13 pm. (1 message)

Next thread: [patch 05/14] vfs: add path_create() and path_mknod() by Miklos Szeredi on Tuesday, July 22, 2008 - 6:13 pm. (1 message)
To: <viro@...>
Cc: <linux-kernel@...>, Mikulas Patocka <mikulas@...>
Date: Tuesday, July 22, 2008 - 6:13 pm

From: Miklos Szeredi <mszeredi@suse.cz>

hpfs_unlink() calls notify_change() to truncate the file before
deleting. Replace with explicit call to hpfs_notify_change().

This is equivalent, except that:
- security_inode_setattr() is not called before hpfs_notify_change()
- fsnotify_change() is not called after hpfs_notify_change()

The truncation is just an implementation detail, so both the security
check and the notification are unnecessary.

Possibly even the ctime modification is wrong?

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
CC: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
---
fs/hpfs/namei.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-2.6/fs/hpfs/namei.c
===================================================================
--- linux-2.6.orig/fs/hpfs/namei.c 2008-07-23 00:10:13.000000000 +0200
+++ linux-2.6/fs/hpfs/namei.c 2008-07-23 00:10:22.000000000 +0200
@@ -426,7 +426,8 @@ again:
/*printk("HPFS: truncating file before delete.\n");*/
newattrs.ia_size = 0;
newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
- err = notify_change(dentry, &newattrs);
+ newattrs.ia_ctime = current_fs_time(inode->i_sb);
+ err = hpfs_notify_change(dentry, &newattrs);
put_write_access(inode);
if (!err)
goto again;

--
--

To: Miklos Szeredi <miklos@...>
Cc: <viro@...>, <linux-kernel@...>
Date: Wednesday, July 23, 2008 - 8:13 am

What about down_write on i_alloc_sem --- notify change takes that and your
patch bypasses that.

--

To: <mikulas@...>
Cc: <miklos@...>, <viro@...>, <linux-kernel@...>
Date: Wednesday, July 23, 2008 - 1:03 pm

i_alloc_sem is only relevant if filesystem uses blockdev_direct_IO()
and friends. It is not used for anything else, so for hpfs there's no
need to surround take that lock.

Thanks,
--

To: Miklos Szeredi <miklos@...>
Cc: <viro@...>, <linux-kernel@...>
Date: Friday, August 8, 2008 - 5:37 pm

I don't care much about this part anyway. This piece of code is not
supposed to work reliably (what if the file has zero size or has fragments
less then 2kb?), and if you change it to make it work more reliably under
a circumstance when someone is deleting file he doesn't own, so what.

This is just design flaw of hpfs.

If you are certain about correctness of your patch, change it (but test
it --- I placed a test partition at
http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/test-hpfs-partitio...).

Or, the alternative is to remove the truncate code at all.

Mikulas
--

Previous thread: [patch 03/14] reiserfs: dont call notify_change by Miklos Szeredi on Tuesday, July 22, 2008 - 6:13 pm. (1 message)

Next thread: [patch 05/14] vfs: add path_create() and path_mknod() by Miklos Szeredi on Tuesday, July 22, 2008 - 6:13 pm. (1 message)