[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210413135632.GD15752@quack2.suse.cz>
Date: Tue, 13 Apr 2021 15:56:32 +0200
From: Jan Kara <jack@...e.cz>
To: Christoph Hellwig <hch@...radead.org>
Cc: Jan Kara <jack@...e.cz>, linux-fsdevel@...r.kernel.org,
linux-ext4@...r.kernel.org, linux-xfs@...r.kernel.org,
Ted Tso <tytso@....edu>, Amir Goldstein <amir73il@...il.com>,
Dave Chinner <david@...morbit.com>
Subject: Re: [PATCH 2/7] mm: Protect operations adding pages to page cache
with i_mapping_lock
On Tue 13-04-21 13:57:46, Christoph Hellwig wrote:
> > if (error == AOP_TRUNCATED_PAGE)
> > put_page(page);
> > + up_read(&mapping->host->i_mapping_sem);
> > return error;
>
> Please add an unlock_mapping label above this up_read and consolidate
> most of the other unlocks by jumping there (put_and_wait_on_page_locked
> probablt can't use it).
Yeah, I've actually simplified the labels even a bit more like:
...
error = filemap_read_page(iocb->ki_filp, mapping, page);
goto unlock_mapping;
unlock:
unlock_page(page);
unlock_mapping:
up_read(&mapping->host->i_mapping_sem);
if (error == AOP_TRUNCATED_PAGE)
put_page(page);
return error;
and everything now jumps to either unlock or unlock_mapping (except for
put_and_wait_on_page_locked() case).
> > truncated:
> > unlock_page(page);
> > @@ -2309,6 +2324,7 @@ static int filemap_update_page(struct kiocb *iocb,
> > return AOP_TRUNCATED_PAGE;
>
> The trunated case actually seems to miss the unlock.
>
> Similarly I think filemap_fault would benefit from a common
> unlock path.
Right, thanks for catching that!
Honza
--
Jan Kara <jack@...e.com>
SUSE Labs, CR
Powered by blists - more mailing lists