On Mon, Jan 31, 2022 at 05:43:47PM +1100, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > In XFS, we always update the inode change and modification time when > any fallocate() operation succeeds. Furthermore, as various > fallocate modes can change the file contents (extending EOF, > punching holes, zeroing things, shifting extents), we should drop > file privileges like suid just like we do for a regular write(). > There's already a VFS helper that figures all this out for us, so > use that. > > The net effect of this is that we no longer drop suid/sgid if the > caller is root, but we also now drop file capabilities. > > We also move the xfs_update_prealloc_flags() function so that it now > is only called by the scope that needs to set the the prealloc flag. > > Based on a patch from Darrick Wong. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> I think you can get rid of @flags entirely, right? With that fixed, I think this looks good. Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/xfs/xfs_file.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 6eda41710a5a..223996822d84 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -953,6 +953,10 @@ xfs_file_fallocate( > goto out_unlock; > } > > + error = file_modified(file); > + if (error) > + goto out_unlock; > + > if (mode & FALLOC_FL_PUNCH_HOLE) { > error = xfs_free_file_space(ip, offset, len); > if (error) > @@ -1053,11 +1057,12 @@ xfs_file_fallocate( > if (error) > goto out_unlock; > } > - } > > - error = xfs_update_prealloc_flags(ip, flags); > - if (error) > - goto out_unlock; > + error = xfs_update_prealloc_flags(ip, XFS_PREALLOC_SET); > + if (error) > + goto out_unlock; > + > + } > > /* Change file size if needed */ > if (new_size) { > -- > 2.33.0 >