From: Al Viro <viro@ZenIV.linux.org.uk>
To: "Dilger, Andreas" <andreas.dilger@intel.com>
Cc: Christoph Hellwig <hch@infradead.org>,
"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
"Drokin, Oleg" <oleg.drokin@intel.com>,
Peng Tao <bergwolf@gmail.com>, "greg@kroah.com" <greg@kroah.com>
Subject: Re: RFC: [PATCH] staging/lustre/llite: fix O_TMPFILE/O_LOV_DELAY_CREATE conflict
Date: Mon, 10 Feb 2014 22:51:30 +0000 [thread overview]
Message-ID: <20140210225130.GH18016@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20140210221030.GG18016@ZenIV.linux.org.uk>
On Mon, Feb 10, 2014 at 10:10:30PM +0000, Al Viro wrote:
> Ugh... Sorry, I misread that code. Why the devil do you have the
> pos argument passed to lustre_generic_file_{read,write}() by address,
> when both proceed to dereference it and pass the value on?
Egads. Correct me if I'm wrong, please, but it looks like you have
1) ->aio_write() stash its arguments in an off-stack struct and pass it
and &iocb->ki_pos to
2) ll_file_io_generic() which calls
3) cl_io_rw_init() which copied ki_pos value passed to it into
io->u.ci_rw.crw_pos (in another off-stack struct) and calls
4) cl_io_init() which calls
5) cl_io_init0() which possibly calls a bunch of instances of ->coo_io_init(),
which may or may not return 0; I _hope_ that in this case that's what'll
happen and we get back to ll_file_io_generic(), where
3') we stash iocb and iov/iovlen into the third off-stack structure (cio)
and call
4') cl_io_loop() where we (in a loop) call cl_io_iter_init(), cl_io_lock() and
5') cl_io_start() which a calls a bunch (how large in that case?) of
6') ->cio_start() instances. Hopefully that'll be vvp_io_write_start()
which will pass the value of io->u.ci_rw.crw_pos (picked via an overlapping
field of union) to generic_file_aio_write(). Which, BTW, updates ->ki_pos.
Then we return into cl_io_loop(), where
4'') we call cl_io_end(), cl_io_unlock() and
5'') cl_io_rw_advance() which increments ....crw_pos, hopefully in sync with
what we have in iocb->ki_pos. And calls a bunch of methods. And return
into cl_io_loop(), where
4''') we call cl_io_iter_fini() (_another_ pile of methods called) and possibly
repeat everything from (4') on (apparently only if nothing had been done so
far). Eventually we return into ll_file_io_generic() and there
3''') we copy ....crw_pos into iocb->ki_pos. WTF do we need that? Hadn't
generic_file_aio_write() been good enough?
Is that correct? I have *not* traced it into all methods that might've
been called in process - stuff called from cl_io_loop() is chock-full of
those. Have I missed anything relevant wrt file position handling in
there?
You guys really should be forced to hand-draw a call graph for that thing.
Both as a punishment and a deterrent...
next prev parent reply other threads:[~2014-02-10 22:51 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-10 20:16 RFC: [PATCH] staging/lustre/llite: fix O_TMPFILE/O_LOV_DELAY_CREATE conflict Dilger, Andreas
2014-02-10 21:29 ` Al Viro
2014-02-10 22:10 ` Al Viro
2014-02-10 22:51 ` Al Viro [this message]
2014-02-11 0:31 ` Dilger, Andreas
2014-02-11 2:40 ` Al Viro
2014-02-11 2:54 ` Drokin, Oleg
2014-02-11 6:55 ` Xiong, Jinshan
2014-02-11 14:25 ` Al Viro
2014-02-11 18:26 ` Xiong, Jinshan
2014-02-11 0:18 ` Xiong, Jinshan
2014-02-11 0:37 ` Dilger, Andreas
2014-02-11 0:51 ` greg
2014-02-11 9:13 ` Christoph Hellwig
2014-02-11 11:01 ` Dilger, Andreas
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=20140210225130.GH18016@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=andreas.dilger@intel.com \
--cc=bergwolf@gmail.com \
--cc=greg@kroah.com \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=oleg.drokin@intel.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.