On Fri, 2017-12-08 at 16:00 -0500, Scott Mayhew wrote: > 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@xxxxxxxxxx> > --- > fs/nfs/write.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/fs/nfs/write.c b/fs/nfs/write.c > index 5b5f464..4a379d7 100644 > --- a/fs/nfs/write.c > +++ b/fs/nfs/write.c > @@ -1890,6 +1890,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) Looks good to me. Reviewed-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> Anna, since this is an Oopsable issue, perhaps we should propagate it through stable@vger? -- Trond Myklebust Linux NFS client maintainer, PrimaryData trond.myklebust@xxxxxxxxxxxxxxx ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥