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 172411 Details for
Bug 253590
GFS2: meta data corruption under heavy IOs
[?]
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]
Final patch - can be applied to both RHEL5 and git tree
gfs2_icache.patch (text/plain), 2.89 KB, created by
Wendy Cheng
on 2007-08-24 13:02:34 UTC
(
hide
)
Description:
Final patch - can be applied to both RHEL5 and git tree
Filename:
MIME Type:
Creator:
Wendy Cheng
Created:
2007-08-24 13:02:34 UTC
Size:
2.89 KB
patch
obsolete
>Fix a nasty inode meta data corruption issue by keeping the buffer head in >icache array. This buffer needs to stay in memory until journal flush occurs >Otherwise, gfs2_meta_inode_buffer could do a disk read before the inode hits >disk. It ends up with meta data corruptions. The buffer will be released as >part of the existing journal flush logic. > > Signed-off-by: S. Wendy Cheng <wcheng@redhat.com> > > inode.c | 20 +++++++++++++++----- > 1 files changed, 15 insertions(+), 5 deletions(-) > >--- linux-msp/fs/gfs2/inode.c 2007-08-20 10:57:45.000000000 -0400 >+++ linux-touch/fs/gfs2/inode.c 2007-08-24 08:56:40.000000000 -0400 >@@ -244,6 +244,11 @@ static int gfs2_dinode_in(struct gfs2_in > return 0; > } > >+static void gfs2_inode_bh(struct gfs2_inode *ip, struct buffer_head *bh) >+{ >+ ip->i_cache[0] = bh; >+} >+ > /** > * gfs2_inode_refresh - Refresh the incore copy of the dinode > * @ip: The GFS2 inode >@@ -688,7 +693,7 @@ out: > static void init_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl, > const struct gfs2_inum_host *inum, unsigned int mode, > unsigned int uid, unsigned int gid, >- const u64 *generation, dev_t dev) >+ const u64 *generation, dev_t dev, struct buffer_head **bhp) > { > struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); > struct gfs2_dinode *di; >@@ -743,13 +748,15 @@ static void init_dinode(struct gfs2_inod > di->di_mtime_nsec = cpu_to_be32(tv.tv_nsec); > di->di_ctime_nsec = cpu_to_be32(tv.tv_nsec); > memset(&di->di_reserved, 0, sizeof(di->di_reserved)); >+ >+ set_buffer_uptodate(dibh); > >- brelse(dibh); >+ *bhp = dibh; > } > > static int make_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl, > unsigned int mode, const struct gfs2_inum_host *inum, >- const u64 *generation, dev_t dev) >+ const u64 *generation, dev_t dev, struct buffer_head **bhp) > { > struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); > unsigned int uid, gid; >@@ -770,7 +777,7 @@ static int make_dinode(struct gfs2_inode > if (error) > goto out_quota; > >- init_dinode(dip, gl, inum, mode, uid, gid, generation, dev); >+ init_dinode(dip, gl, inum, mode, uid, gid, generation, dev, bhp); > gfs2_quota_change(dip, +1, uid, gid); > gfs2_trans_end(sdp); > >@@ -909,6 +916,7 @@ struct inode *gfs2_createi(struct gfs2_h > struct gfs2_inum_host inum = { .no_addr = 0, .no_formal_ino = 0 }; > int error; > u64 generation; >+ struct buffer_head *bh=NULL; > > if (!name->len || name->len > GFS2_FNAMESIZE) > return ERR_PTR(-ENAMETOOLONG); >@@ -935,7 +943,7 @@ struct inode *gfs2_createi(struct gfs2_h > if (error) > goto fail_gunlock; > >- error = make_dinode(dip, ghs[1].gh_gl, mode, &inum, &generation, dev); >+ error = make_dinode(dip, ghs[1].gh_gl, mode, &inum, &generation, dev, &bh); > if (error) > goto fail_gunlock2; > >@@ -945,6 +953,8 @@ struct inode *gfs2_createi(struct gfs2_h > if (IS_ERR(inode)) > goto fail_gunlock2; > >+ gfs2_inode_bh(GFS2_I(inode), bh); >+ > error = gfs2_inode_refresh(GFS2_I(inode)); > if (error) > goto fail_gunlock2;
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 253590
:
161967
|
162067
|
171499
| 172411