From: Raghavendra D Prabhu <raghu.prabhu13@gmail.com>
To: Fengguang Wu <fengguang.wu@intel.com>
Cc: linux-mm@kvack.org, viro@zeniv.linux.org.uk, akpm@linux-foundation.org
Subject: Re: Re: [PATCH 1/5] mm/readahead: Check return value of read_pages
Date: Wed, 26 Sep 2012 06:55:03 +0530 [thread overview]
Message-ID: <20120926012503.GA24218@Archie> (raw)
In-Reply-To: <20120922124337.GA17562@localhost>
[-- Attachment #1: Type: text/plain, Size: 3246 bytes --]
Hi,
* On Sat, Sep 22, 2012 at 08:43:37PM +0800, Fengguang Wu <fengguang.wu@intel.com> wrote:
>On Sat, Sep 22, 2012 at 04:03:10PM +0530, raghu.prabhu13@gmail.com wrote:
>> From: Raghavendra D Prabhu <rprabhu@wnohang.net>
>>
>> Return value of a_ops->readpage will be propagated to return value of read_pages
>> and __do_page_cache_readahead.
>
>That does not explain the intention and benefit of this patch..
I noticed that force_page_cache_readahead checks return value of
__do_page_cache_readahead but the actual error if any is never
propagated.
Also, I made a slight change there:
+ int alloc = 1;
blk_start_plug(&plug);
@@ -127,13 +128,18 @@ static int read_pages(struct address_space *mapping, struct file *filp,
for (page_idx = 0; page_idx < nr_pages; page_idx++) {
struct page *page = list_to_page(pages);
list_del(&page->lru);
- if (!add_to_page_cache_lru(page, mapping,
+ if (alloc && !add_to_page_cache_lru(page, mapping,
page->index, GFP_KERNEL)) {
- mapping->a_ops->readpage(filp, page);
+ ret = mapping->a_ops->readpage(filp, page);
+ /*
+ * If readpage fails, don't proceed with further
+ * readpage
+ * */
+ if (ret < 0)
+ alloc = 0;
Before, this the page_cache_release was not happening for the
rest of the pages.
I will send it in separate patch if this is fine.
>
>Thanks,
>Fengguang
>
>> Signed-off-by: Raghavendra D Prabhu <rprabhu@wnohang.net>
>> ---
>> mm/readahead.c | 12 +++++++-----
>> 1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/mm/readahead.c b/mm/readahead.c
>> index ea8f8fa..461fcc0 100644
>> --- a/mm/readahead.c
>> +++ b/mm/readahead.c
>> @@ -113,7 +113,7 @@ static int read_pages(struct address_space *mapping, struct file *filp,
>> {
>> struct blk_plug plug;
>> unsigned page_idx;
>> - int ret;
>> + int ret = 0;
>>
>> blk_start_plug(&plug);
>>
>> @@ -129,11 +129,12 @@ static int read_pages(struct address_space *mapping, struct file *filp,
>> list_del(&page->lru);
>> if (!add_to_page_cache_lru(page, mapping,
>> page->index, GFP_KERNEL)) {
>> - mapping->a_ops->readpage(filp, page);
>> + ret = mapping->a_ops->readpage(filp, page);
>> + if (ret < 0)
>> + break;
>> }
>> page_cache_release(page);
>> }
>> - ret = 0;
>>
>> out:
>> blk_finish_plug(&plug);
>> @@ -160,6 +161,7 @@ __do_page_cache_readahead(struct address_space *mapping, struct file *filp,
>> LIST_HEAD(page_pool);
>> int page_idx;
>> int ret = 0;
>> + int ret_read = 0;
>> loff_t isize = i_size_read(inode);
>>
>> if (isize == 0)
>> @@ -198,10 +200,10 @@ __do_page_cache_readahead(struct address_space *mapping, struct file *filp,
>> * will then handle the error.
>> */
>> if (ret)
>> - read_pages(mapping, filp, &page_pool, ret);
>> + ret_read = read_pages(mapping, filp, &page_pool, ret);
>> BUG_ON(!list_empty(&page_pool));
>> out:
>> - return ret;
>> + return (ret_read < 0 ? ret_read : ret);
>> }
>>
>> /*
>> --
>> 1.7.12.1
>
Regards,
--
Raghavendra Prabhu
GPG Id : 0xD72BE977
Fingerprint: B93F EBCB 8E05 7039 CD3C A4B8 A616 DCA1 D72B E977
www: wnohang.net
[-- Attachment #2: Type: application/pgp-signature, Size: 490 bytes --]
next prev parent reply other threads:[~2012-09-26 1:25 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-22 10:33 [PATCH 0/5] Readahead fixes / improvements raghu.prabhu13
[not found] ` <cover.1348309711.git.rprabhu@wnohang.net>
2012-09-22 10:33 ` [PATCH 1/5] mm/readahead: Check return value of read_pages raghu.prabhu13
2012-09-22 12:43 ` Fengguang Wu
2012-09-26 1:25 ` Raghavendra D Prabhu [this message]
2012-09-28 11:54 ` Fengguang Wu
2012-10-16 17:47 ` Raghavendra D Prabhu
2012-10-17 2:53 ` Fengguang Wu
2012-09-22 10:33 ` [PATCH 2/5] mm/readahead: Change the condition for SetPageReadahead raghu.prabhu13
2012-09-22 12:49 ` Fengguang Wu
2012-09-26 1:29 ` Raghavendra D Prabhu
2012-09-28 11:56 ` Fengguang Wu
2012-10-16 17:42 ` Raghavendra D Prabhu
2012-10-17 2:34 ` Fengguang Wu
2012-09-22 10:33 ` [PATCH 3/5] Remove file_ra_state from arguments of count_history_pages raghu.prabhu13
2012-09-22 12:40 ` Fengguang Wu
2012-10-16 18:21 ` Raghavendra D Prabhu
2012-10-17 3:15 ` Fengguang Wu
2012-09-22 10:33 ` [PATCH 4/5] Move the check for ra_pages after VM_SequentialReadHint() raghu.prabhu13
2012-09-22 12:42 ` Fengguang Wu
2012-09-26 1:39 ` Raghavendra D Prabhu
2012-10-16 18:15 ` Raghavendra D Prabhu
2012-10-17 3:13 ` Fengguang Wu
2012-09-22 10:33 ` [PATCH 5/5] mm/readahead: Use find_get_pages instead of radix_tree_lookup raghu.prabhu13
2012-09-22 13:15 ` Fengguang Wu
2012-09-26 2:58 ` Raghavendra D Prabhu
2012-09-28 12:18 ` Fengguang Wu
2012-10-16 16:59 ` Raghavendra D Prabhu
2012-10-17 2:12 ` Fengguang Wu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120926012503.GA24218@Archie \
--to=raghu.prabhu13@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=fengguang.wu@intel.com \
--cc=linux-mm@kvack.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.