| To: | Dave Chinner <david@xxxxxxxxxxxxx> |
|---|---|
| Subject: | Re: fs/attr.c:notify_change locking warning. |
| From: | Christoph Hellwig <hch@xxxxxxxxxxxxx> |
| Date: | Wed, 16 Oct 2013 00:05:28 -0700 |
| Cc: | Christoph Hellwig <hch@xxxxxxxxxxxxx>, Dave Jones <davej@xxxxxxxxxx>, xfs@xxxxxxxxxxx, Linux Kernel <linux-kernel@xxxxxxxxxxxxxxx>, Al Viro <viro@xxxxxxxxxxxxxxxxxx> |
| Delivered-to: | xfs@xxxxxxxxxxx |
| In-reply-to: | <20131015213618.GU4446@dastard> |
| References: | <20131005005210.GA25773@xxxxxxxxxx> <20131005031918.GL4446@dastard> <20131015201905.GA7509@xxxxxxxxxxxxx> <20131015213618.GU4446@dastard> |
| User-agent: | Mutt/1.5.21 (2010-09-15) |
On Wed, Oct 16, 2013 at 08:36:18AM +1100, Dave Chinner wrote:
> Sure, but file_remove_suid() doesn't actually modify any VFS inode
> structures until we process the flags and the modifications within
> ->setattr, which in XFS are all done under the XFS_ILOCK_EXCL via
> xfs_setattr_mode(). i.e. both the VFS and XFS inodes S*ID bits are
> removed only under XFS_ILOCK_EXCL....
It can set S_NOSEC after calling into ->setattr at least.
> Hence I see no point in adding extra serialisation via the i_mutex
> to this path when we can just do something like:
>
> killsuid = should_remove_suid(file->f_path.dentry);
> if (killsuid) {
> struct iattr newattr;
>
> newattr.ia_valid = ATTR_FORCE | killsuid;
> error = xfs_setattr_nonsize(ip, &newattr, 0);
> if (error)
> return error;
> }
We'd still need all the other magic in file_remove_suid, which I don't
actually quite undersdtand fully yet.
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: [PATCH 5/5] xfs: fold xfs_change_file_space into xfs_ioc_space, Christoph Hellwig |
|---|---|
| Next by Date: | Внешнеторговый договор, Таможенный контроль |
| Previous by Thread: | Re: fs/attr.c:notify_change locking warning., Dave Chinner |
| Next by Thread: | Re: fs/attr.c:notify_change locking warning., Dave Chinner |
| Indexes: | [Date] [Thread] [Top] [All Lists] |