Skip to contentSkip to conversation

f2fs: modify the readahead method in ra_node_page()

PATCH In review Fan Li 4 participants 6 messages Feb 29, 2016 – Mar 8, 2016 F2FS file system

lore
Share & tools
lore

Fan Li

author
#0 lore raw

PATCH 1/1 f2fs: modify the readahead method in ra_node_page()

ra_node_page() is used to read ahead one node page. Comparing to regular read, it's faster because it doesn't wait for IO completion.
But if it is called twice for reading the same block, and the IO request from the first call hasn't been completed before the second call, the second call will have to wait until the read is over.

Here use the code in __do_page_cache_readahead() to solve this problem. It does nothing when someone else already puts the page in mapping. The status of page should be assured by whoever puts it there. This implement also prevents alteration of page reference count.

---
 fs/f2fs/node.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
fs/f2fs/node.c +4 -5
index 511c0e7..6d8f107 100644
@@ -1080,12 +1080,11 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
                return;
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
-       apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
-               f2fs_put_page(apage, 0);
+       rcu_read_lock();
+       apage = radix_tree_lookup(&NODE_MAPPING(sbi)->page_tree, nid);
+       rcu_read_unlock();
+       if (apage)
                return;
-       }
-       f2fs_put_page(apage, 0);
 
        apage = grab_cache_page(NODE_MAPPING(sbi), nid);
        if (!apage)
Signature · 9 lines
1.7.9.5


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
#1 lore raw

Hi

Quoted 31 lines

-----Original Message-----
From: Fan Li [mailto:[email protected]]
Sent: Monday, February 29, 2016 2:30 PM
To: 'Jaegeuk Kim'
Cc: [email protected]
Subject: [f2fs-dev] [PATCH] f2fs: modify the readahead method in ra_node_page()

ra_node_page() is used to read ahead one node page. Comparing to regular read, it's faster because it doesn't wait for IO completion.
But if it is called twice for reading the same block, and the IO request from the first call hasn't been completed before the second call, the second call will have to wait until the read is over.

Here use the code in __do_page_cache_readahead() to solve this problem. It does nothing when someone else already puts the page in mapping. The status of page should be assured by whoever puts it there. This implement also prevents alteration of page reference count.

---
 fs/f2fs/node.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
fs/f2fs/node.c +0 -0
index 511c0e7..6d8f107 100644
@@ -1080,12 +1080,11 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
                return;
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 

fs/f2fs/node.c void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) · line 1088

Quoted 10 lines
fs/f2fs/node.c +4 -5
-       apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
-               f2fs_put_page(apage, 0);
+       rcu_read_lock();
+       apage = radix_tree_lookup(&NODE_MAPPING(sbi)->page_tree, nid);
+       rcu_read_unlock();
+       if (apage)
                return;
-       }
-       f2fs_put_page(apage, 0);

How about use trylock_page to avoid contention here?

fs/f2fs/node.c +5 -6
index 26eb441..9cdb6f2 100644
@@ -1085,15 +1085,14 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
        apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
+       if (!apage) {
+               apage = grab_cache_page(NODE_MAPPING(sbi), nid);
+               if (!apage)
+                       return;
+       } else if (PageUptodate(apage) || !trylock_page(apage)) {
                f2fs_put_page(apage, 0);
                return;
        }
-       f2fs_put_page(apage, 0);
-
-       apage = grab_cache_page(NODE_MAPPING(sbi), nid);
-       if (!apage)
-               return;
 
        err = read_node_page(apage, READA);
        f2fs_put_page(apage, err ? 1 : 0);

Thanks,

Quoted 7 lines
fs/f2fs/node.c +0 -1
        apage = grab_cache_page(NODE_MAPPING(sbi), nid);
        if (!apage)
--

1.7.9.5

Quoted 10 lines

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140

author
#2 lore raw
Quoted 43 lines

-----Original Message-----
From: Chao Yu [mailto:[email protected]]
Sent: Tuesday, March 01, 2016 5:53 PM
To: 'Fan Li'; 'Jaegeuk Kim'
Cc: [email protected]
Subject: RE: [f2fs-dev] [PATCH] f2fs: modify the readahead method in ra_node_page()

Hi

Quoted 32 lines

-----Original Message-----
From: Fan Li [mailto:[email protected]]
Sent: Monday, February 29, 2016 2:30 PM
To: 'Jaegeuk Kim'
Cc: [email protected]
Subject: [f2fs-dev] [PATCH] f2fs: modify the readahead method in ra_node_page()

ra_node_page() is used to read ahead one node page. Comparing to regular read, it's faster because it doesn't wait for IO completion. But if it is called twice for reading the same block, and the IO request from the first call hasn't been completed before the second call, the second call will have to wait until the read is over.

Here use the code in __do_page_cache_readahead() to solve this problem. It does nothing when someone else already puts the page in mapping. The status of page should be assured by whoever puts it there. This implement also prevents alteration of page reference count.

---
 fs/f2fs/node.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
fs/f2fs/node.c index 511c0e7..6d8f107 renamed from fs/f2fs/node.c +0 -0

100644

fs/f2fs/node.c +0 -0
@@ -1080,12 +1080,11 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
                return;
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
Quoted 12 lines

fs/f2fs/node.c void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) · line 1088

Quoted 10 lines
fs/f2fs/node.c +4 -5
-       apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
-               f2fs_put_page(apage, 0);
+       rcu_read_lock();
+       apage = radix_tree_lookup(&NODE_MAPPING(sbi)->page_tree, nid);
+       rcu_read_unlock();
+       if (apage)
                return;
-       }
-       f2fs_put_page(apage, 0);

How about use trylock_page to avoid contention here?

I thought about that, but after I saw the __do_page_cache_readahead(), I think that's better.
they works almost the same, but it reduces the performance by altering reference count and trying to lock the page.

The only difference between this two methods is how to deal a page which is left unlock and not uptodate in mapping. I think only cause of such page seems to be IO error, and it's too rare to call for optimization.

Quoted 26 lines
fs/f2fs/node.c +5 -6
@@ -1085,15 +1085,14 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
        apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
+       if (!apage) {
+               apage = grab_cache_page(NODE_MAPPING(sbi), nid);
+               if (!apage)
+                       return;
+       } else if (PageUptodate(apage) || !trylock_page(apage)) {
                f2fs_put_page(apage, 0);
                return;
        }
-       f2fs_put_page(apage, 0);
-
-       apage = grab_cache_page(NODE_MAPPING(sbi), nid);
-       if (!apage)
-               return;
 
        err = read_node_page(apage, READA);
        f2fs_put_page(apage, err ? 1 : 0);
Quoted 20 lines

Thanks,

Quoted 18 lines
fs/f2fs/node.c +0 -1
        apage = grab_cache_page(NODE_MAPPING(sbi), nid);
        if (!apage)
--

1.7.9.5

----------------------------------------------------------------------
--------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140

maintainer
#3 lore raw
Quoted 56 lines · Fan Li
Quoted 43 lines

-----Original Message-----
From: Chao Yu [mailto:[email protected]]
Sent: Tuesday, March 01, 2016 5:53 PM
To: 'Fan Li'; 'Jaegeuk Kim'
Cc: [email protected]
Subject: RE: [f2fs-dev] [PATCH] f2fs: modify the readahead method in ra_node_page()

Hi

Quoted 32 lines

-----Original Message-----
From: Fan Li [mailto:[email protected]]
Sent: Monday, February 29, 2016 2:30 PM
To: 'Jaegeuk Kim'
Cc: [email protected]
Subject: [f2fs-dev] [PATCH] f2fs: modify the readahead method in ra_node_page()

ra_node_page() is used to read ahead one node page. Comparing to regular read, it's faster because it doesn't wait for IO completion. But if it is called twice for reading the same block, and the IO request from the first call hasn't been completed before the second call, the second call will have to wait until the read is over.

Here use the code in __do_page_cache_readahead() to solve this problem. It does nothing when someone else already puts the page in mapping. The status of page should be assured by whoever puts it there. This implement also prevents alteration of page reference count.

---
 fs/f2fs/node.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
fs/f2fs/node.c index 511c0e7..6d8f107 renamed from fs/f2fs/node.c +0 -0

100644

fs/f2fs/node.c +0 -0
@@ -1080,12 +1080,11 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
                return;
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
Quoted 12 lines

fs/f2fs/node.c void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) · line 1088

Quoted 10 lines
fs/f2fs/node.c +4 -5
-       apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
-               f2fs_put_page(apage, 0);
+       rcu_read_lock();
+       apage = radix_tree_lookup(&NODE_MAPPING(sbi)->page_tree, nid);
+       rcu_read_unlock();
+       if (apage)
                return;
-       }
-       f2fs_put_page(apage, 0);

How about use trylock_page to avoid contention here?

Quoted 6 lines

I thought about that, but after I saw the __do_page_cache_readahead(), I think that's better.
they works almost the same, but it reduces the performance by altering reference count and trying to lock the page.

The only difference between this two methods is how to deal a page

Concurrent threads can both pass the rcu lookuping at the same time, and then they will be serialized by grab_cache_page invoking, which altering second thread to read node page synchronously instead of reading asynchronously. IMO, we can afford to reference and trylock which takes litte overhead of CPU in order to avoid potential synchronously readahead for node page.

Thanks,

Quoted 51 lines

which is left unlock and not uptodate in mapping. I think only cause of such page seems to be IO error, and it's too rare to call for optimization.

Quoted 26 lines
fs/f2fs/node.c +5 -6
@@ -1085,15 +1085,14 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
        apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
+       if (!apage) {
+               apage = grab_cache_page(NODE_MAPPING(sbi), nid);
+               if (!apage)
+                       return;
+       } else if (PageUptodate(apage) || !trylock_page(apage)) {
                f2fs_put_page(apage, 0);
                return;
        }
-       f2fs_put_page(apage, 0);
-
-       apage = grab_cache_page(NODE_MAPPING(sbi), nid);
-       if (!apage)
-               return;
 
        err = read_node_page(apage, READA);
        f2fs_put_page(apage, err ? 1 : 0);
Quoted 20 lines

Thanks,

Quoted 18 lines
fs/f2fs/node.c +0 -1
        apage = grab_cache_page(NODE_MAPPING(sbi), nid);
        if (!apage)
--

1.7.9.5

----------------------------------------------------------------------
--------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Quoted 11 lines

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140

author
#4 lore raw
Quoted 72 lines

-----Original Message-----
From: Chao Yu [mailto:[email protected]]
Sent: Thursday, March 03, 2016 9:32 PM
To: Fan Li; 'Chao Yu'; 'Jaegeuk Kim'
Cc: [email protected]
Subject: Re: [f2fs-dev] [PATCH] f2fs: modify the readahead method in ra_node_page()

Quoted 62 lines · Fan Li
Quoted 44 lines

-----Original Message-----
From: Chao Yu [mailto:[email protected]]
Sent: Tuesday, March 01, 2016 5:53 PM
To: 'Fan Li'; 'Jaegeuk Kim'
Cc: [email protected]
Subject: RE: [f2fs-dev] [PATCH] f2fs: modify the readahead method in ra_node_page()

Hi

Quoted 32 lines

-----Original Message-----
From: Fan Li [mailto:[email protected]]
Sent: Monday, February 29, 2016 2:30 PM
To: 'Jaegeuk Kim'
Cc: [email protected]
Subject: [f2fs-dev] [PATCH] f2fs: modify the readahead method in ra_node_page()

ra_node_page() is used to read ahead one node page. Comparing to regular read, it's faster because it doesn't wait for IO completion. But if it is called twice for reading the same block, and the IO request from the first call hasn't been completed before the second call, the second call will have to wait until the read is over.

Here use the code in __do_page_cache_readahead() to solve this problem. It does nothing when someone else already puts the page in mapping. The status of page should be assured by whoever puts it there. This implement also prevents alteration of page reference count.

---
 fs/f2fs/node.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
fs/f2fs/node.c index 511c0e7..6d8f107 renamed from fs/f2fs/node.c +0 -0

100644

fs/f2fs/node.c +0 -0
@@ -1080,12 +1080,11 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
                return;
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
Quoted 12 lines

fs/f2fs/node.c void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) · line 1088

Quoted 10 lines
fs/f2fs/node.c +4 -5
-       apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
-               f2fs_put_page(apage, 0);
+       rcu_read_lock();
+       apage = radix_tree_lookup(&NODE_MAPPING(sbi)->page_tree, nid);
+       rcu_read_unlock();
+       if (apage)
                return;
-       }
-       f2fs_put_page(apage, 0);

How about use trylock_page to avoid contention here?

I thought about that, but after I saw the __do_page_cache_readahead(), I think that's better.
they works almost the same, but it reduces the performance by altering reference count and trying to lock the page.

Quoted 5 lines
Quoted 1 line

The only difference between this two methods is how to deal a page

Concurrent threads can both pass the rcu lookuping at the same time, and then they will be serialized by grab_cache_page invoking, which altering second thread to read node page synchronously instead of reading asynchronously. IMO, we can afford to reference and trylock which takes litte overhead of CPU in order to avoid potential synchronously readahead for node page.

My point is that this patch can avoid potential synchronously readahead for node page without taking such overhead. The difference is very small and the method has already been used in vfs codes.

Quoted 68 lines

Thanks,

Quoted 65 lines

which is left unlock and not uptodate in mapping. I think only cause of such page seems to be IO error, and it's too rare to call for optimization.

Quoted 27 lines
fs/f2fs/node.c index 26eb441..9cdb6f2 renamed from fs/f2fs/node.c +0 -0

100644

fs/f2fs/node.c +5 -6
@@ -1085,15 +1085,14 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
        apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
+       if (!apage) {
+               apage = grab_cache_page(NODE_MAPPING(sbi), nid);
+               if (!apage)
+                       return;
+       } else if (PageUptodate(apage) || !trylock_page(apage)) {
                f2fs_put_page(apage, 0);
                return;
        }
-       f2fs_put_page(apage, 0);
-
-       apage = grab_cache_page(NODE_MAPPING(sbi), nid);
-       if (!apage)
-               return;
 
        err = read_node_page(apage, READA);
        f2fs_put_page(apage, err ? 1 : 0);
Quoted 21 lines

Thanks,

Quoted 19 lines
fs/f2fs/node.c +0 -1
        apage = grab_cache_page(NODE_MAPPING(sbi), nid);
        if (!apage)
--

1.7.9.5

--------------------------------------------------------------------
--
--------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

----------------------------------------------------------------------
--------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

------------------------------------------------------------------------------
Transform Data into Opportunity. Accelerate data analysis in your applications with Intel Data Analytics Acceleration Library. Click to learn more.
http://makebettercode.com/inteldaal-eval

maintainer
#5 lore raw
Quoted 29 lines
Quoted 29 lines
Quoted 29 lines
Quoted 11 lines
Quoted 11 lines
 fs/f2fs/node.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
fs/f2fs/node.c index 511c0e7..6d8f107 renamed from fs/f2fs/node.c +0 -0

100644

fs/f2fs/node.c +0 -0
@@ -1080,12 +1080,11 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
                return;
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
Quoted 12 lines

fs/f2fs/node.c void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) · line 1088

Quoted 10 lines
fs/f2fs/node.c +4 -5
-       apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
-               f2fs_put_page(apage, 0);
+       rcu_read_lock();
+       apage = radix_tree_lookup(&NODE_MAPPING(sbi)->page_tree, nid);
+       rcu_read_unlock();
+       if (apage)
                return;
-       }
-       f2fs_put_page(apage, 0);

How about use trylock_page to avoid contention here?

I thought about that, but after I saw the __do_page_cache_readahead(), I think that's better.
they works almost the same, but it reduces the performance by altering reference count and trying to lock the page.

Quoted 8 lines
Quoted 5 lines
Quoted 1 line

The only difference between this two methods is how to deal a page

Concurrent threads can both pass the rcu lookuping at the same time, and then they will be serialized by grab_cache_page invoking, which altering second thread to read node page synchronously instead of reading asynchronously. IMO, we can afford to reference and trylock which takes litte overhead of CPU in order to avoid potential synchronously readahead for node page.

My point is that this patch can avoid potential synchronously readahead for node page without taking such overhead. The difference is very small and the method has already been used in vfs codes.

Let me go with Fan's patch at this moment.
Then, it'd good to investigate how contention occurs here later.

Thanks,

Quoted 57 lines
Quoted 57 lines

Thanks,

Quoted 53 lines

which is left unlock and not uptodate in mapping. I think only cause of such page seems to be IO error, and it's too rare to call for optimization.

Quoted 48 lines
fs/f2fs/node.c index 26eb441..9cdb6f2 renamed from fs/f2fs/node.c +0 -0

100644

fs/f2fs/node.c +5 -6
@@ -1085,15 +1085,14 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
        f2fs_bug_on(sbi, check_nid_range(sbi, nid));
 
        apage = find_get_page(NODE_MAPPING(sbi), nid);
-       if (apage && PageUptodate(apage)) {
+       if (!apage) {
+               apage = grab_cache_page(NODE_MAPPING(sbi), nid);
+               if (!apage)
+                       return;
+       } else if (PageUptodate(apage) || !trylock_page(apage)) {
                f2fs_put_page(apage, 0);
                return;
        }
-       f2fs_put_page(apage, 0);
-
-       apage = grab_cache_page(NODE_MAPPING(sbi), nid);
-       if (!apage)
-               return;
 
        err = read_node_page(apage, READA);
        f2fs_put_page(apage, err ? 1 : 0);

Thanks,

Quoted 19 lines
fs/f2fs/node.c +0 -1
        apage = grab_cache_page(NODE_MAPPING(sbi), nid);
        if (!apage)
--

1.7.9.5

--------------------------------------------------------------------
--
--------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Quoted 12 lines
Quoted 4 lines
Quoted 4 lines

----------------------------------------------------------------------
--------
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month

Quoted 8 lines
Quoted 8 lines

Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

------------------------------------------------------------------------------
Transform Data into Opportunity. Accelerate data analysis in your applications with Intel Data Analytics Acceleration Library. Click to learn more.
http://makebettercode.com/inteldaal-eval