All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: "Darrick J. Wong" <djwong@kernel.org>, Li Jinlin <lijinlin3@huawei.com>
Cc: <viro@zeniv.linux.org.uk>, <dan.j.williams@intel.com>,
	<willy@infradead.org>, <jack@suse.cz>,
	<linux-fsdevel@vger.kernel.org>, <nvdimm@lists.linux.dev>,
	<linux-kernel@vger.kernel.org>, <linfeilong@huawei.com>,
	<liuzhiqiang26@huawei.com>
Subject: Re: [PATCH] fsdax: Fix infinite loop in dax_iomap_rw()
Date: Mon, 25 Jul 2022 16:32:24 -0700	[thread overview]
Message-ID: <62df2808e5c50_1f5536294f2@dwillia2-xfh.jf.intel.com.notmuch> (raw)
In-Reply-To: <Yt8Hw2cXPz1ScQ1y@magnolia>

Darrick J. Wong wrote:
> On Mon, Jul 25, 2022 at 11:20:50AM +0800, Li Jinlin wrote:
> > I got an infinite loop and a WARNING report when executing a tail command
> > in virtiofs.
> > 
> >   WARNING: CPU: 10 PID: 964 at fs/iomap/iter.c:34 iomap_iter+0x3a2/0x3d0
> >   Modules linked in:
> >   CPU: 10 PID: 964 Comm: tail Not tainted 5.19.0-rc7
> >   Call Trace:
> >   <TASK>
> >   dax_iomap_rw+0xea/0x620
> >   ? __this_cpu_preempt_check+0x13/0x20
> >   fuse_dax_read_iter+0x47/0x80
> >   fuse_file_read_iter+0xae/0xd0
> >   new_sync_read+0xfe/0x180
> >   ? 0xffffffff81000000
> >   vfs_read+0x14d/0x1a0
> >   ksys_read+0x6d/0xf0
> >   __x64_sys_read+0x1a/0x20
> >   do_syscall_64+0x3b/0x90
> >   entry_SYSCALL_64_after_hwframe+0x63/0xcd
> > 
> > The tail command will call read() with a count of 0. In this case,
> > iomap_iter() will report this WARNING, and always return 1 which casuing
> > the infinite loop in dax_iomap_rw().
> > 
> > Fixing by checking count whether is 0 in dax_iomap_rw().
> > 
> > Fixes: ca289e0b95af ("fsdax: switch dax_iomap_rw to use iomap_iter")
> > Signed-off-by: Li Jinlin <lijinlin3@huawei.com>
> 
> Huh, I didn't know FUSE supports DAX and iomap now...

Yeah, it came in via DAX support for virtio-fs.

> > ---
> >  fs/dax.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/fs/dax.c b/fs/dax.c
> > index 4155a6107fa1..7ab248ed21aa 100644
> > --- a/fs/dax.c
> > +++ b/fs/dax.c
> > @@ -1241,6 +1241,9 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
> >  	loff_t done = 0;
> >  	int ret;
> >  
> > +	if (!iomi.len)
> > +		return 0;
> 
> Hmm, most of the callers of dax_iomap_rw skip the whole call if
> iov_iter_count(to)==0, so I wonder if fuse_dax_read_iter should do the
> same?
> 
> That said, iomap_dio_rw bails early if you pass it iomi.len, so I don't
> have any real objections to this.

That was the same conclusion I came to...

> Reviewed-by: Darrick J. Wong <djwong@kernel.org>

Thanks, will get this merged up for v5.19-final.

      reply	other threads:[~2022-07-25 23:32 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-25  3:20 [PATCH] fsdax: Fix infinite loop in dax_iomap_rw() Li Jinlin
2022-07-25 21:14 ` Darrick J. Wong
2022-07-25 23:32   ` Dan Williams [this message]

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=62df2808e5c50_1f5536294f2@dwillia2-xfh.jf.intel.com.notmuch \
    --to=dan.j.williams@intel.com \
    --cc=djwong@kernel.org \
    --cc=jack@suse.cz \
    --cc=lijinlin3@huawei.com \
    --cc=linfeilong@huawei.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=liuzhiqiang26@huawei.com \
    --cc=nvdimm@lists.linux.dev \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@infradead.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.