From: Florian Westphal <fw@strlen.de>
To: Ismael Luceno <iluceno@suse.de>
Cc: David Ahern <dsahern@gmail.com>, Jakub Kicinski <kuba@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Paolo Abeni <pabeni@redhat.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Florian Westphal <fw@strlen.de>
Subject: Re: Netlink NLM_F_DUMP_INTR flag lost
Date: Wed, 24 Aug 2022 13:46:28 +0200 [thread overview]
Message-ID: <20220824114628.GA14776@breakpoint.cc> (raw)
In-Reply-To: <20220824125901.21a28927@pirotess>
Ismael Luceno <iluceno@suse.de> wrote:
> It seems to me now that most of the calls to nl_dump_check_consistent
> are redundant.
>
> Either the rtnl lock is explicitly taken:
> - ethnl_tunnel_info_dumpit
That guarantess *this* invocation of ethnl_tunnel_info_dumpit doesn't
change in between, but it doesn't guarantee consistency of the dump.
rtn_lock();
cb->seq = 1
dumping...
skb full
unlock();
nl_dump_check_consistent();
return-to-userspace
/* write happens, base seq increments */
next recv():
rtn_lock();
seq is now > 1
resume dumping from pos h
unlock();
nl_dump_check_consistent(); -> prev_seq is 1 but seq > 1 -> set INTR
It doesn't really matter if dumpit() grabs RTNL or another lock or no
lock at all (rcu) unless there is a guarantee that everything will fit
in one recv() call. I am not aware of such a guarantee anywhere.
If you meant that there is another nl_dump_check_consistent() that
already covers this then I missed it.
> I assume the ones that rely on rcu_read_lock are safe too.
>
> Also, the following ones set cb->seq just before calling it:
> - rtm_dump_nh_ctx
> - rtm_dump_res_bucket_ctx
I'm not sure what you mean, do you mean
3443 out_err:
3444 cb->seq = net->nexthop.seq;
3445 nl_dump_check_consistent(cb, nlmsg_hdr(skb));
3446 return err;
3447 }
I don't see why this is buggy. rtm_dump_nexthop_bucket() is called
with RTNL held. Things were different in case of RCU, because we'd miss
flagging INTR in case change happened while doing the first/initial dump
invocation.
i.e.:
- dump starts
// parallel modification, seq increments
- set seq to *incremented* number
- prev_seq is 0,
End of next round sees seq == incremented && prev_seq == seq, no INTR
set.
For the RCU case, seq needs to be set before dump starts.
For RTNL, no parallel modifications can happen, so the above is fine.
Modification can only happen after unlock, so next dump will see
prev_seq != seq and sets the INTR flag.
next prev parent reply other threads:[~2022-08-24 11:46 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20220615171113.7d93af3e@pirotess>
2022-06-15 16:00 ` Netlink NLM_F_DUMP_INTR flag lost Jakub Kicinski
2022-06-16 15:10 ` Ismael Luceno
2022-06-17 0:16 ` Jakub Kicinski
2022-06-17 13:01 ` Ismael Luceno
2022-06-17 14:55 ` David Ahern
2022-06-17 15:22 ` Jakub Kicinski
2022-06-17 16:17 ` David Ahern
2022-06-17 16:28 ` David Ahern
2022-08-24 10:59 ` Ismael Luceno
2022-08-24 11:46 ` Florian Westphal [this message]
2022-06-22 11:12 ` Ismael Luceno
2022-06-22 23:55 ` Jakub Kicinski
2022-06-23 4:01 ` David Ahern
2022-06-23 16:03 ` Jakub Kicinski
2022-06-23 16:17 ` David Ahern
2022-06-23 16:36 ` Jakub Kicinski
2022-06-23 17:31 ` David Ahern
2022-06-23 19:03 ` Jakub Kicinski
2022-06-28 19:38 ` Ismael Luceno
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=20220824114628.GA14776@breakpoint.cc \
--to=fw@strlen.de \
--cc=davem@davemloft.net \
--cc=dsahern@gmail.com \
--cc=iluceno@suse.de \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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).