Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 916771 Details for
Bug 516025
GFS2: couldn't free all objects in gfs2_bufdata cache on unload
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
PATCH: GFS2: Detect and release delayed bufdata structures
bz516025.addendum.patch (text/plain), 2.16 KB, created by
Robert Peterson
on 2014-07-09 13:12:33 UTC
(
hide
)
Description:
PATCH: GFS2: Detect and release delayed bufdata structures
Filename:
MIME Type:
Creator:
Robert Peterson
Created:
2014-07-09 13:12:33 UTC
Size:
2.16 KB
patch
obsolete
>commit 1511460e410726bcf093966045df57899237d630 >Author: Bob Peterson <rpeterso@redhat.com> >Date: Tue Jul 1 10:49:16 2014 -0500 > > GFS2: Detect and release delayed bufdata structures > > This patch marks buffer_heads which can't be released due to b_count > being non-zero during gfs2_releasepage. If these marked buffer_heads > are found in gfs2_ordered_wait, they are freed at that time. > > rhbz#516025 >--- > fs/gfs2/incore.h | 3 +++ > fs/gfs2/log.c | 5 +++++ > fs/gfs2/ops_address.c | 8 ++++++-- > 3 files changed, 14 insertions(+), 2 deletions(-) > >diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h >index 07cb732..e1eeb6f 100644 >--- a/fs/gfs2/incore.h >+++ b/fs/gfs2/incore.h >@@ -96,12 +96,15 @@ struct gfs2_rgrpd { > enum gfs2_state_bits { > BH_Pinned = BH_PrivateStart, > BH_Escaped = BH_PrivateStart + 1, >+ BH_Release = BH_PrivateStart + 2, /* Needs its bd released */ > }; > > BUFFER_FNS(Pinned, pinned) > TAS_BUFFER_FNS(Pinned, pinned) > BUFFER_FNS(Escaped, escaped) > TAS_BUFFER_FNS(Escaped, escaped) >+BUFFER_FNS(Release, release) >+TAS_BUFFER_FNS(Release, release) > > struct gfs2_bufdata { > struct buffer_head *bd_bh; >diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c >index b3aeda1..046b004 100644 >--- a/fs/gfs2/log.c >+++ b/fs/gfs2/log.c >@@ -844,6 +844,11 @@ static void gfs2_ordered_wait(struct gfs2_sbd *sdp) > get_bh(bh); > gfs2_log_unlock(sdp); > wait_on_buffer(bh); >+ if (test_clear_buffer_release(bh)) { >+ bd->bd_bh = NULL; >+ bh->b_private = NULL; >+ kmem_cache_free(gfs2_bufdata_cachep, bd); >+ } > brelse(bh); > gfs2_log_lock(sdp); > continue; >diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c >index 7ed96ce..f22ee46 100644 >--- a/fs/gfs2/ops_address.c >+++ b/fs/gfs2/ops_address.c >@@ -1312,8 +1312,12 @@ int gfs2_releasepage(struct page *page, gfp_t gfp_mask) > gfs2_log_lock(sdp); > head = bh = page_buffers(page); > do { >- if (atomic_read(&bh->b_count)) >- goto cannot_release; >+ if (atomic_read(&bh->b_count)) { >+ set_buffer_release(bh); /* release later */ >+ if (atomic_read(&bh->b_count)) /* Sometimes it fixes >+ itself. */ >+ goto cannot_release; >+ } > bd = bh->b_private; > if (bd && bd->bd_ail) > goto cannot_release;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 516025
:
838395
|
916771
|
920713