Bug 429168
| Summary: | GFS2: Kernel BUG at mm/filemap.c:553 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 5 | Reporter: | Robert Peterson <rpeterso> | ||||||||||
| Component: | kernel | Assignee: | Don Zickus <dzickus> | ||||||||||
| Status: | CLOSED ERRATA | QA Contact: | GFS Bugs <gfs-bugs> | ||||||||||
| Severity: | high | Docs Contact: | |||||||||||
| Priority: | high | ||||||||||||
| Version: | 5.2 | CC: | lwang, rpeterso, swhiteho | ||||||||||
| Target Milestone: | rc | ||||||||||||
| Target Release: | --- | ||||||||||||
| Hardware: | All | ||||||||||||
| OS: | Linux | ||||||||||||
| Whiteboard: | |||||||||||||
| Fixed In Version: | RHBA-2008-0314 | Doc Type: | Bug Fix | ||||||||||
| Doc Text: | Story Points: | --- | |||||||||||
| Clone Of: | Environment: | ||||||||||||
| Last Closed: | 2008-05-21 15:06:58 UTC | Type: | --- | ||||||||||
| Regression: | --- | Mount Type: | --- | ||||||||||
| Documentation: | --- | CRM: | |||||||||||
| Verified Versions: | Category: | --- | |||||||||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||||||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||||||||
| Embargoed: | |||||||||||||
| Attachments: |
|
||||||||||||
|
Description
Robert Peterson
2008-01-17 18:29:43 UTC
Created attachment 292044 [details]
Diff between -56 and -57 kernel
This is a diff between the -56 version that works and the -57 version
that fails hell6. It's 1152 lines long, so lots of changes.
The problem happens with data=writeback as well as the default ordered write. Created attachment 292094 [details]
Patch to fix the problem
Solved. Function gfs2_write_lock_start was unlocking the page
prematurely. When the code figured out there was no space left on
the device, it returned the -ENOSPC return code. However, vfs will
try to unlock the page if the return code is not AOP_TRUNCATED_PAGE.
The problem was, we had already unlocked it.
The solution--this patch--is to unlock the page only in cases where
it determines that it's going to return AOP_TRUNCATED_PAGE.
BTW, this problem no longer exists upstream because the upstream code
has advanced beyond the need for returning AOP_TRUNCATED_PAGE.
Reassigning to myself. Also, I need some flags set please. It's important to get this into RHEL5.2. We don't want rudimentary errors like out-of-space to cause a kernel panic. The patch in comment #3 is wrong. We can't remove the unlock before the glock as thats the whole point of gfs2_write_lock_start. Instead we'll have to fix it by checking the error path and getting the page lock again if and only if we are going to return an error. Created attachment 292152 [details]
Try #2
Does this look better? This one keeps the unlock_page in place,
but relocks the page on error.
Created attachment 292384 [details]
Same patch, but can be applied before 253990 patch
This is the same patch, but the line numbers are different. The previous
version was meant to be applied over top of the 253990 (performance) fix.
This one goes directly on top of the preceding i_alloc fix that was
previously posted to rhkernel-list. I'm planning to post this one.
The fix was posted to rhkernel-list, so I'm changing status to POST and rerouting it to Don Zickus. in 2.6.18-72.el5 You can download this test kernel from http://people.redhat.com/dzickus/el5 An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on the solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2008-0314.html |