Re: [PATCH] nfs: don't wait on commit in nfs_commit_inode() if there were no commit requests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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�����٥




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux