xfs
[Top] [All Lists]

Re: your patch "mm: Remove false WARN_ON from pagecache_isize_extended()

To: Jan Beulich <JBeulich@xxxxxxxx>
Subject: Re: your patch "mm: Remove false WARN_ON from pagecache_isize_extended()"
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Tue, 4 Nov 2014 09:18:49 +1100
Cc: Jan Kara <jack@xxxxxxx>, xfs@xxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <5457BE390200007800044838@xxxxxxxxxxxxxxxxxxxx>
References: <5457BE390200007800044838@xxxxxxxxxxxxxxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
On Mon, Nov 03, 2014 at 04:41:13PM +0000, Jan Beulich wrote:
> Jan,
> 
> having run into that warning too, I looked into it a little, and now
> having found that patch am pretty uncertain: Both truncate_setsize()
> and pagecache_isize_extended() document that they want to be
> called with i_mutex held, so removing the WARN_ON() alone seems
> either incomplete or wrong. What I found to work without violating
> this documented requirement is the patch below.

Or, just perhaps, the comments are wrong....

Some filesystems have stronger, more robust internal serialisation
than the VFS provides with i_mutex....

> --- a/fs/xfs/xfs_file.c
> +++ b/fs/xfs/xfs_file.c
> @@ -797,7 +797,7 @@ xfs_file_fallocate(
>                    FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE))
>               return -EOPNOTSUPP;
>  
> -     xfs_ilock(ip, XFS_IOLOCK_EXCL);
> +     xfs_rw_ilock(ip, XFS_IOLOCK_EXCL);
>       if (mode & FALLOC_FL_PUNCH_HOLE) {
>               error = xfs_free_file_space(ip, offset, len);
>               if (error)

The i_mutex is completely redundant here. Not to mention there are
multiple callers of these xfs_*_file_space() functions used to
implement fallocate(), and we're not about to change the locking
model for them....

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>