From: Max Gautier <mg@max.gautier.name>
To: Ratheesh Kannoth <rkannoth@marvell.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>
Subject: Re: [EXTERNAL] Re: [PATCH iproute2-next v2] arpd: create /var/lib/arpd on first use
Date: Mon, 18 Mar 2024 10:26:48 +0100 [thread overview]
Message-ID: <ZfgI2Aow6751-EGj@framework> (raw)
In-Reply-To: <MWHPR1801MB191828A6FF7D83103C75ED6AD32D2@MWHPR1801MB1918.namprd18.prod.outlook.com>
On Mon, Mar 18, 2024 at 09:18:59AM +0000, Ratheesh Kannoth wrote:
> > > > > > + if (strcmp(default_dbname, dbname) == 0
> > > > > > + && mkdir(ARPDDIR, 0755) != 0
> > > > > > + && errno != EEXIST
> > > > > why do you need errno != EEXIST case ? mkdir() will return error
> > > > > in this case
> > > > as well.
> > > >
> > > > EEXIST is not an error in this case: if the default location already
> > > > exist, all is good. mkdir would still return -1 in this case, so we
> > > > need to exclude it manually.
> > >
> > > ACK. IMO, it would make a more readable code if you consider splitting the
> > "if" loop.
> >
> > Something like this ? I tend to pack conditions unless branching is necessary,
> > but no problem if this form is preferred.
> >
> > if (strcmp(default_dbname, dbname) == 0) {
> > if (mkdir(ARPDDIR, 0755) != 0 && errno != EEXIST) {
> > ...
> > }
> > }
> ACK.
> instead of errno != EXIST , you may consider stat() before mkdir() call. Just my way thinking(please ignore it, if you don't like).
> My thinking is --> you need to execute mkdir () only first time, second time onwards, stat() call will return 0.
That's racy: we can stat and have a non existing folder, then have
another arpd instance (or anything else, really) create the directory,
and we would hit EEXIST anyway when we call mkdir.
Also, that needs two syscalls instead of one.
--
Max Gautier
next prev parent reply other threads:[~2024-03-18 9:26 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20240313093856.17fc459e@hermes.local>
2024-03-16 9:06 ` [PATCH iproute2-next] arpd: create /var/lib/arpd on first use Max Gautier
2024-03-16 15:07 ` Stephen Hemminger
2024-03-16 19:56 ` Jay Vosburgh
2024-03-17 0:14 ` Max Gautier
2024-03-17 9:01 ` [PATCH iproute2-next v2] " Max Gautier
2024-03-17 15:39 ` Stephen Hemminger
[not found] ` <09BB339D-A57C-4F67-BE67-2859F0262C86@126.com>
2024-03-17 17:23 ` Max Gautier
2024-03-18 2:56 ` Ratheesh Kannoth
2024-03-18 8:37 ` Max Gautier
2024-03-18 8:51 ` [EXTERNAL] " Ratheesh Kannoth
2024-03-18 8:59 ` Max Gautier
2024-03-18 9:18 ` Ratheesh Kannoth
2024-03-18 9:26 ` Max Gautier [this message]
2024-03-18 9:37 ` Denis Kirjanov
2024-03-18 9:43 ` Ratheesh Kannoth
2024-03-18 15:49 ` [PATCH iproute2-next v3] " Max Gautier
2024-03-28 20:40 ` patchwork-bot+netdevbpf
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=ZfgI2Aow6751-EGj@framework \
--to=mg@max.gautier.name \
--cc=netdev@vger.kernel.org \
--cc=rkannoth@marvell.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).