projects
/
GitHub
/
moto-9609
/
android_kernel_motorola_exynos9610.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
74b6274
)
nfs: don't wait on commit in nfs_commit_inode() if there were no commit requests
author
Scott Mayhew
<smayhew@redhat.com>
Fri, 8 Dec 2017 21:00:12 +0000
(16:00 -0500)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Wed, 20 Dec 2017 09:10:20 +0000
(10:10 +0100)
commit
dc4fd9ab01ab379ae5af522b3efd4187a7c30a31
upstream.
If there were no commit requests, then nfs_commit_inode() should not
wait on the commit or mark the inode dirty, otherwise the following
BUG_ON can be triggered:
[ 1917.130762] kernel BUG at fs/inode.c:578!
[ 1917.130766] Oops: Exception in kernel mode, sig: 5 [#1]
[ 1917.130768] SMP NR_CPUS=2048 NUMA pSeries
[ 1917.130772] Modules linked in: iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi blocklayoutdriver rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace fscache sunrpc sg nx_crypto pseries_rng ip_tables xfs libcrc32c sd_mod crc_t10dif crct10dif_generic crct10dif_common ibmvscsi scsi_transport_srp ibmveth scsi_tgt dm_mirror dm_region_hash dm_log dm_mod
[ 1917.130805] CPU: 2 PID: 14923 Comm: umount.nfs4 Tainted: G ------------ T 3.10.0-768.el7.ppc64 #1
[ 1917.130810] task:
c0000005ecd88040
ti:
c00000004cea0000
task.ti:
c00000004cea0000
[ 1917.130813] NIP:
c000000000354178
LR:
c000000000354160
CTR:
c00000000012db80
[ 1917.130816] REGS:
c00000004cea3720
TRAP: 0700 Tainted: G ------------ T (3.10.0-768.el7.ppc64)
[ 1917.130820] MSR:
8000000100029032
<SF,EE,ME,IR,DR,RI> CR:
22002822
XER:
20000000
[ 1917.130828] CFAR:
c00000000011f594
SOFTE: 1
GPR00:
c000000000354160
c00000004cea39a0
c0000000014c4700
c0000000018cc750
GPR04:
000000000000c750
80c0000000000000
0600000000000000
04eeb76bea749a03
GPR08:
0000000000000034
c0000000018cc758
0000000000000001
d000000005e619e8
GPR12:
c00000000012db80
c000000007b31200
0000000000000000
0000000000000000
GPR16:
0000000000000000
0000000000000000
0000000000000000
0000000000000000
GPR20:
0000000000000000
0000000000000000
0000000000000000
0000000000000000
GPR24:
0000000000000000
c000000000dfc3ec
0000000000000000
c0000005eefc02c0
GPR28:
d0000000079dbd50
c0000005b94a02c0
c0000005b94a0250
c0000005b94a01c8
[ 1917.130867] NIP [
c000000000354178
] .evict+0x1c8/0x350
[ 1917.130871] LR [
c000000000354160
] .evict+0x1b0/0x350
[ 1917.130873] Call Trace:
[ 1917.130876] [
c00000004cea39a0
] [
c000000000354160
] .evict+0x1b0/0x350 (unreliable)
[ 1917.130880] [
c00000004cea3a30
] [
c0000000003558cc
] .evict_inodes+0x13c/0x270
[ 1917.130884] [
c00000004cea3af0
] [
c000000000327d20
] .kill_anon_super+0x70/0x1e0
[ 1917.130896] [
c00000004cea3b80
] [
d000000005e43e30
] .nfs_kill_super+0x20/0x60 [nfs]
[ 1917.130900] [
c00000004cea3c00
] [
c000000000328a20
] .deactivate_locked_super+0xa0/0x1b0
[ 1917.130903] [
c00000004cea3c80
] [
c00000000035ba54
] .cleanup_mnt+0xd4/0x180
[ 1917.130907] [
c00000004cea3d10
] [
c000000000119034
] .task_work_run+0x114/0x150
[ 1917.130912] [
c00000004cea3db0
] [
c00000000001ba6c
] .do_notify_resume+0xcc/0x100
[ 1917.130916] [
c00000004cea3e30
] [
c00000000000a7b0
] .ret_from_except_lite+0x5c/0x60
[ 1917.130919] Instruction dump:
[ 1917.130921]
7fc3f378
486734b5
60000000
387f00a0
38800003
4bdcb365
60000000
e95f00a0
[ 1917.130927]
694a0060
7d4a0074
794ad182
694a0001
<
0b0a0000
>
892d02a4
2f890000
40de0134
Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/nfs/write.c
patch
|
blob
|
blame
|
history
diff --git
a/fs/nfs/write.c
b/fs/nfs/write.c
index babebbccae2a0e11f12cf722a1b8dccdea75a6b8..de325804941d1f5334a9d4484e0fa6656615aaba 100644
(file)
--- a/
fs/nfs/write.c
+++ b/
fs/nfs/write.c
@@
-1889,6
+1889,8
@@
int nfs_commit_inode(struct inode *inode, int how)
if (res)
error = nfs_generic_commit_list(inode, &head, how, &cinfo);
nfs_commit_end(cinfo.mds);
+ if (res == 0)
+ return res;
if (error < 0)
goto out_error;
if (!may_wait)