From: "J. Bruce Fields" <bfields@fieldses.org>
To: Benjamin Coddington <bcodding@redhat.com>
Cc: linux-nfs@vger.kernel.org, hch@infradead.org,
Trond Myklebust <trond.myklebust@primarydata.com>,
Anna Schumaker <Anna.Schumaker@Netapp.com>
Subject: Re: spurious sillyrename after O_DIRECT writes get ENOSPC
Date: Tue, 19 Dec 2017 11:56:22 -0500 [thread overview]
Message-ID: <20171219165622.GC19967@fieldses.org> (raw)
In-Reply-To: <20171214185514.GE9205@fieldses.org>
On Thu, Dec 14, 2017 at 01:55:14PM -0500, J. Bruce Fields wrote:
> So actually what happens is if you do a direct io write where some
> WRITEs succeed and the one fails, then this:
>
> if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) {
> dreq->flags = 0;
> dreq->error = hdr->error;
> }
>
> clears the NFS_ODIRECT_DO_COMMIT flag, so nfs_direct_write_complete
> never scheduels the commit calls. It looks like that leaves a bunch of
> nfs_pages on some to-be-committed list, so we end up leaking a bunch of
> stuff, with the most visible symptom being an unnecessarily sillyrename
> on close.
>
> I can just remove that clear of dreq_flags and that fixes the problem,
> but I doubt that's correct.
Or, maybe it is. If *any* WRITE(s) involved in this write might need
a commit or reschedule, then surely we should run
nfs_direct_write_schedule_work and let it sort them out? I'm having
trouble seeing why clearing that field partway through could ever be
correct.
Trond, Anna, does the following look right?
--b.
next prev parent reply other threads:[~2017-12-19 16:56 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-08 22:16 spurious sillyrename after O_DIRECT writes get ENOSPC J. Bruce Fields
2017-12-13 17:18 ` J. Bruce Fields
2017-12-14 13:08 ` Benjamin Coddington
2017-12-14 16:36 ` J. Bruce Fields
2017-12-14 18:55 ` J. Bruce Fields
2017-12-19 16:56 ` J. Bruce Fields [this message]
2018-01-16 15:08 ` [PATCH] NFS: commit direct writes even if they fail partially J. Bruce Fields
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=20171219165622.GC19967@fieldses.org \
--to=bfields@fieldses.org \
--cc=Anna.Schumaker@Netapp.com \
--cc=bcodding@redhat.com \
--cc=hch@infradead.org \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@primarydata.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 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.