Re: [PATCH 04/12] misc: xilinx_sdfec: Add open, close and ioctl

From: Arnd Bergmann
Date: Tue Mar 19 2019 - 15:46:28 EST


On Tue, Mar 19, 2019 at 7:10 PM Dragan Cvetic <draganc@xxxxxxxxxx> wrote:
> > -----Original Message-----
> > From: Arnd Bergmann [mailto:arnd@xxxxxxxx]
> > Sent: Tuesday 19 March 2019 15:36
> > To: Dragan Cvetic <draganc@xxxxxxxxxx>
> > Cc: gregkh <gregkh@xxxxxxxxxxxxxxxxxxx>; Michal Simek <michals@xxxxxxxxxx>; Linux ARM <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>;
> > Derek Kiernan <dkiernan@xxxxxxxxxx>; Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>
> > Subject: Re: [PATCH 04/12] misc: xilinx_sdfec: Add open, close and ioctl
> >
> > On Tue, Mar 19, 2019 at 3:59 PM Dragan Cvetic <draganc@xxxxxxxxxx> wrote:
> > > >
> > > > > + /* Only one open per device at a time */
> > > > > + if (!atomic_dec_and_test(&xsdfec->open_count)) {
> > > > > + atomic_inc(&xsdfec->open_count);
> > > > > + return -EBUSY;
> > > > > + }
> > > >
> > > > What is that limitation for? Is it worse to open it twice than
> > > > to dup() or fork()?
> > > >
> > > The device can be opened only once.
> >
> > What I mean here is that preventing the double open() is
> > a fairly weak protection: it means you cannot have multiple
> > 'struct file' pointers attached to the same inode, but you
> > can still have the same 'struct file' being available to
> > multiple processes.
> >
> Could you please suggest the solution?
> My intention was to prevent more than one process access the same device.

Generally speaking, you can't prevent it, but you should make sure that
if two processes attempt to use the same device, nothing bad happens.
Usually it's enough to have appropriate locking.

Arnd