linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: CAI Qian <caiqian@redhat.com>
Cc: linux-xfs <linux-xfs@vger.kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	xfs@oss.sgi.com
Subject: Re: xfs_file_splice_read: possible circular locking dependency detected
Date: Sat, 3 Sep 2016 10:39:19 +1000	[thread overview]
Message-ID: <20160903003919.GI30056@dastard> (raw)
In-Reply-To: <1832555471.1341372.1472835736236.JavaMail.zimbra@redhat.com>

On Fri, Sep 02, 2016 at 01:02:16PM -0400, CAI Qian wrote:
> Spice seems start to deadlock using the reproducer,
> 
> https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/splice/splice01.c
> 
> This seems introduced recently after v4.8-rc3 or -rc4, so suspect this xfs update was one to blame,
> 
> 7d1ce606a37922879cbe40a6122047827105a332

Nope, this goes back to the splice rework back around ~3.16, IIRC.

> [ 1749.956818] 
> [ 1749.958492] ======================================================
> [ 1749.965386] [ INFO: possible circular locking dependency detected ]
> [ 1749.972381] 4.8.0-rc4+ #34 Not tainted
> [ 1749.976560] -------------------------------------------------------
> [ 1749.983554] splice01/35921 is trying to acquire lock:
> [ 1749.989188]  (&sb->s_type->i_mutex_key#14){+.+.+.}, at: [<ffffffffa083c1f7>] xfs_file_buffered_aio_write+0x127/0x840 [xfs]
> [ 1750.001644] 
> [ 1750.001644] but task is already holding lock:
> [ 1750.008151]  (&pipe->mutex/1){+.+.+.}, at: [<ffffffff8169e7c1>] pipe_lock+0x51/0x60
> [ 1750.016753] 
> [ 1750.016753] which lock already depends on the new lock.
> [ 1750.016753] 
> [ 1750.025880] 
> [ 1750.025880] the existing dependency chain (in reverse order) is:
> [ 1750.034229] 
> -> #2 (&pipe->mutex/1){+.+.+.}:
> [ 1750.039139]        [<ffffffff812af52a>] lock_acquire+0x1fa/0x440
> [ 1750.045857]        [<ffffffff8266448d>] mutex_lock_nested+0xdd/0x850
> [ 1750.052963]        [<ffffffff8169e7c1>] pipe_lock+0x51/0x60
> [ 1750.059190]        [<ffffffff8171ee25>] splice_to_pipe+0x75/0x9e0
> [ 1750.066001]        [<ffffffff81723991>] __generic_file_splice_read+0xa71/0xe90
> [ 1750.074071]        [<ffffffff81723e71>] generic_file_splice_read+0xc1/0x1f0
> [ 1750.081849]        [<ffffffffa0838628>] xfs_file_splice_read+0x368/0x7b0 [xfs]
> [ 1750.089940]        [<ffffffff8171fa7e>] do_splice_to+0xee/0x150
> [ 1750.096555]        [<ffffffff817262f4>] SyS_splice+0x1144/0x1c10
> [ 1750.103269]        [<ffffffff81007b66>] do_syscall_64+0x1a6/0x500
> [ 1750.110084]        [<ffffffff8266ea7f>] return_from_SYSCALL_64+0x0/0x7a

pipe_lock taken below the filesystem IO path, filesystem holds locks
to protect against racing hole punch, etc...

> [ 1750.188328] 
> -> #0 (&sb->s_type->i_mutex_key#14){+.+.+.}:
> [ 1750.194508]        [<ffffffff812adbc3>] __lock_acquire+0x3043/0x3dd0
> [ 1750.201609]        [<ffffffff812af52a>] lock_acquire+0x1fa/0x440
> [ 1750.208321]        [<ffffffff82668cda>] down_write+0x5a/0xe0
> [ 1750.214645]        [<ffffffffa083c1f7>] xfs_file_buffered_aio_write+0x127/0x840 [xfs]
> [ 1750.223421]        [<ffffffffa083cb7d>] xfs_file_write_iter+0x26d/0x6d0 [xfs]
> [ 1750.231423]        [<ffffffff816859be>] vfs_iter_write+0x29e/0x550
> [ 1750.238330]        [<ffffffff81722729>] iter_file_splice_write+0x529/0xb70
> [ 1750.246012]        [<ffffffff817258d4>] SyS_splice+0x724/0x1c10
> [ 1750.252627]        [<ffffffff81007b66>] do_syscall_64+0x1a6/0x500
> [ 1750.259438]        [<ffffffff8266ea7f>] return_from_SYSCALL_64+0x0/0x7a

pipe_lock taken above the filesystem IO path, filesystem tries to
take locks to protect against racing hole punch, etc, lockdep goes
boom.

Fundamentally a splice infrastructure problem. If we let splice race
with hole punch and other fallocate() based extent manipulations to
avoid this lockdep warning, we allow potential for read or write to
regions of the file that have been freed. We can live with having
lockdep complain about this potential deadlock as it is unlikely to
ever occur in practice. The other option is simply not an acceptible
solution....

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

       reply	other threads:[~2016-09-03  0:39 UTC|newest]

Thread overview: 135+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <723420070.1340881.1472835555274.JavaMail.zimbra@redhat.com>
     [not found] ` <1832555471.1341372.1472835736236.JavaMail.zimbra@redhat.com>
2016-09-03  0:39   ` Dave Chinner [this message]
2016-09-03  0:57     ` xfs_file_splice_read: possible circular locking dependency detected Linus Torvalds
2016-09-03  1:45       ` Al Viro
2016-09-06 23:59         ` Dave Chinner
2016-09-08 20:35           ` Al Viro
2016-09-06 21:53     ` CAI Qian
2016-09-06 23:34       ` Dave Chinner
2016-09-08 15:29     ` CAI Qian
2016-09-08 17:56       ` Al Viro
2016-09-08 18:12         ` Linus Torvalds
2016-09-08 18:18           ` Linus Torvalds
2016-09-08 20:44           ` Al Viro
2016-09-08 20:57             ` Al Viro
2016-09-08 21:23             ` Al Viro
2016-09-08 21:38           ` Dave Chinner
2016-09-08 23:55             ` Al Viro
2016-09-09  1:53               ` Dave Chinner
2016-09-09  2:22                 ` Linus Torvalds
2016-09-09  2:26                   ` Linus Torvalds
2016-09-09  2:34                     ` Al Viro
2016-09-09  2:50                       ` Linus Torvalds
2016-09-09 22:19                         ` Al Viro
2016-09-10  2:06                           ` Linus Torvalds
2016-09-14  3:16                             ` Al Viro
2016-09-14  3:39                               ` Nicholas Piggin
2016-09-14  4:01                                 ` Linus Torvalds
2016-09-18  5:33                                 ` Al Viro
2016-09-19  3:08                                   ` Nicholas Piggin
2016-09-19  6:11                                     ` Al Viro
2016-09-19  7:26                                       ` Nicholas Piggin
2016-09-14  3:49                               ` Linus Torvalds
2016-09-14  4:26                                 ` Al Viro
2016-09-17  8:20                                   ` Al Viro
2016-09-17 19:00                                     ` Al Viro
2016-09-17 20:15                                       ` Linus Torvalds
2016-09-23 19:00                                       ` [RFC][CFT] splice_read reworked Al Viro
2016-09-23 19:01                                         ` [PATCH 01/11] fix memory leaks in tracing_buffers_splice_read() Al Viro
2016-09-23 19:02                                         ` [PATCH 02/11] splice_to_pipe(): don't open-code wakeup_pipe_readers() Al Viro
2016-09-23 19:02                                         ` [PATCH 03/11] splice: switch get_iovec_page_array() to iov_iter Al Viro
2016-09-23 19:03                                         ` [PATCH 04/11] splice: lift pipe_lock out of splice_to_pipe() Al Viro
2016-09-23 19:45                                           ` Linus Torvalds
2016-09-23 20:10                                             ` Al Viro
2016-09-23 20:36                                               ` Linus Torvalds
2016-09-24  3:59                                                 ` Al Viro
2016-09-24 17:29                                                   ` Al Viro
2016-09-27 15:38                                                     ` Nicholas Piggin
2016-09-27 15:53                                                     ` Chuck Lever
2016-09-24  3:59                                                 ` [PATCH 04/12] " Al Viro
2016-09-26 13:35                                                   ` Miklos Szeredi
2016-09-27  4:14                                                     ` Al Viro
2016-12-17 19:54                                                   ` Andreas Schwab
2016-12-18 19:28                                                     ` Linus Torvalds
2016-12-18 19:57                                                       ` Andreas Schwab
2016-12-18 20:12                                                       ` Al Viro
2016-12-18 20:30                                                         ` Al Viro
2016-12-18 22:10                                                           ` Linus Torvalds
2016-12-18 22:18                                                             ` Al Viro
2016-12-18 22:22                                                               ` Linus Torvalds
2016-12-18 22:49                                                             ` Andreas Schwab
2016-12-21 18:56                                                             ` Andreas Schwab
2016-12-21 19:12                                                               ` Linus Torvalds
2016-09-24  4:00                                                 ` [PATCH 06/12] new helper: add_to_pipe() Al Viro
2016-09-26 13:49                                                   ` Miklos Szeredi
2016-09-24  4:01                                                 ` [PATCH 10/12] new iov_iter flavour: pipe-backed Al Viro
2016-09-29 20:53                                                   ` Miklos Szeredi
2016-09-29 22:50                                                     ` Al Viro
2016-09-30  7:30                                                       ` Miklos Szeredi
2016-10-03  3:34                                                         ` [RFC] O_DIRECT vs EFAULT (was Re: [PATCH 10/12] new iov_iter flavour: pipe-backed) Al Viro
2016-10-03 17:07                                                           ` Linus Torvalds
2016-10-03 18:54                                                             ` Al Viro
2016-09-24  4:01                                                 ` [PATCH 11/12] switch generic_file_splice_read() to use of ->read_iter() Al Viro
2016-09-24  4:02                                                 ` [PATCH 12/12] switch default_file_splice_read() to use of pipe-backed iov_iter Al Viro
2016-09-23 19:03                                         ` [PATCH 05/11] skb_splice_bits(): get rid of callback Al Viro
2016-09-23 19:04                                         ` [PATCH 06/11] new helper: add_to_pipe() Al Viro
2016-09-23 19:04                                         ` [PATCH 07/11] fuse_dev_splice_read(): switch to add_to_pipe() Al Viro
2016-09-23 19:06                                         ` [PATCH 08/11] cifs: don't use memcpy() to copy struct iov_iter Al Viro
2016-09-23 19:08                                         ` [PATCH 09/11] fuse_ioctl_copy_user(): don't open-code copy_page_{to,from}_iter() Al Viro
2016-09-26  9:31                                           ` Miklos Szeredi
2016-09-23 19:09                                         ` [PATCH 10/11] new iov_iter flavour: pipe-backed Al Viro
2016-09-23 19:10                                         ` [PATCH 11/11] switch generic_file_splice_read() to use of ->read_iter() Al Viro
2016-09-30 13:32                                         ` [RFC][CFT] splice_read reworked CAI Qian
2016-09-30 17:42                                           ` CAI Qian
2016-09-30 18:33                                             ` CAI Qian
2016-10-03  1:37                                               ` Al Viro
2016-10-03 17:49                                                 ` CAI Qian
2016-10-04 17:39                                                   ` local DoS - systemd hang or timeout (WAS: Re: [RFC][CFT] splice_read reworked) CAI Qian
2016-10-04 21:42                                                     ` tj
2016-10-05 14:09                                                       ` CAI Qian
2016-10-05 15:30                                                         ` tj
2016-10-05 15:54                                                           ` CAI Qian
2016-10-05 18:57                                                             ` CAI Qian
2016-10-05 20:05                                                               ` Al Viro
2016-10-06 12:20                                                                 ` CAI Qian
2016-10-06 12:25                                                                   ` CAI Qian
2016-10-06 16:11                                                                     ` CAI Qian
2016-10-06 17:00                                                                       ` Linus Torvalds
2016-10-06 18:12                                                                         ` CAI Qian
2016-10-07  9:57                                                                         ` Dave Chinner
2016-10-07 15:25                                                                           ` Linus Torvalds
2016-10-07  7:08                                                                     ` Jan Kara
2016-10-07 14:43                                                                       ` CAI Qian
2016-10-07 15:27                                                                         ` CAI Qian
2016-10-07 18:56                                                                           ` CAI Qian
2016-10-09 21:54                                                                             ` Dave Chinner
2016-10-10 14:10                                                                               ` CAI Qian
2016-10-10 20:14                                                                                 ` CAI Qian
2016-10-10 21:57                                                                                 ` Dave Chinner
2016-10-12 19:50                                                                                   ` [bisected] " CAI Qian
2016-10-12 20:59                                                                                     ` Dave Chinner
2016-10-13 16:25                                                                                       ` CAI Qian
2016-10-13 20:49                                                                                         ` Dave Chinner
2016-10-13 20:56                                                                                           ` CAI Qian
2016-10-09 21:51                                                                         ` Dave Chinner
2016-10-07  9:27                                                                   ` Dave Chinner
2016-10-03  1:42                                             ` [RFC][CFT] splice_read reworked Al Viro
2016-10-03 14:06                                               ` CAI Qian
2016-10-03 15:20                                                 ` CAI Qian
2016-10-03 21:12                                                   ` Dave Chinner
2016-10-04 13:57                                                     ` CAI Qian
2016-10-03 20:32                                                 ` CAI Qian
2016-10-03 20:35                                                   ` Al Viro
2016-10-04 13:29                                                     ` CAI Qian
2016-10-04 14:28                                                       ` Al Viro
2016-10-04 16:21                                                         ` CAI Qian
2016-10-04 20:12                                                           ` Al Viro
2016-10-05 14:30                                                             ` CAI Qian
2016-10-05 16:07                                                               ` Al Viro
2016-09-09  2:31                   ` xfs_file_splice_read: possible circular locking dependency detected Al Viro
2016-09-09  2:39                     ` Linus Torvalds
2016-09-09  2:26                 ` Al Viro
2016-09-09  2:19               ` Al Viro
2016-09-08 18:01       ` Linus Torvalds
2016-09-08 20:39         ` CAI Qian
2016-09-08 21:19           ` Dave Chinner
2016-09-08 21:30             ` Al Viro

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160903003919.GI30056@dastard \
    --to=david@fromorbit.com \
    --cc=caiqian@redhat.com \
    --cc=linux-xfs@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).