Re: [PATCH] CIFS: Use invalidate_inode_pages2 instead of invalidate_remote_inode (try #2)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 25 Feb 2011 13:21:50 +0300
Pavel Shilovsky <piastry@xxxxxxxxxxx> wrote:

> Use invalidate_inode_pages2 that don't leave pages even if shrink_page_list()
> has a temp ref on them. It prevents a data coherency problem on exclusive
> oplocks opens.
> 
> Signed-off-by: Pavel Shilovsky <piastry@xxxxxxxxxxx>
> ---
>  fs/cifs/inode.c |   16 +++++++++++-----
>  1 files changed, 11 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
> index 589f3e3..0011e95 100644
> --- a/fs/cifs/inode.c
> +++ b/fs/cifs/inode.c
> @@ -1687,12 +1687,18 @@ cifs_invalidate_mapping(struct inode *inode)
>  
>  	cifs_i->invalid_mapping = false;
>  
> -	/* write back any cached data */
> -	if (inode->i_mapping && inode->i_mapping->nrpages != 0) {
> -		rc = filemap_write_and_wait(inode->i_mapping);
> -		mapping_set_error(inode->i_mapping, rc);
> +	if (inode->i_mapping) {
> +		/* write back any cached data */
> +		if (inode->i_mapping->nrpages != 0) {
> +			rc = filemap_write_and_wait(inode->i_mapping);
> +			mapping_set_error(inode->i_mapping, rc);
> +		}
> +		rc = invalidate_inode_pages2(inode->i_mapping);
> +		if (rc)
> +			cERROR(1, "%s: could not invalidate inode %p", __func__,
> +			       inode);
>  	}
> -	invalidate_remote_inode(inode);
> +
>  	cifs_fscache_reset_inode_cookie(inode);
>  }
>  

Looks like a correct change overall. I wonder too whether we need to
make cifs_invalidate_mapping return the error from
invalidate_inode_pages2 and have the callers deal with that
appropriately.

For now, I think we should just keep an eye out for the printk that
you're adding to pop. If we start to see those frequently under some
workloads we can think about what the right approach is.

Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux