On Tue, Mar 19, 2019 at 7:10 PM Dragan Cvetic <[email protected]> wrote:
> > -----Original Message-----
> > From: Arnd Bergmann [mailto:[email protected]]
> > Sent: Tuesday 19 March 2019 15:36
> > To: Dragan Cvetic <[email protected]>
> > Cc: gregkh <[email protected]>; Michal Simek <[email protected]>;
> > Linux ARM <[email protected]>;
> > Derek Kiernan <[email protected]>; Linux Kernel Mailing List
> > <[email protected]>
> > Subject: Re: [PATCH 04/12] misc: xilinx_sdfec: Add open, close and ioctl
> >
> > On Tue, Mar 19, 2019 at 3:59 PM Dragan Cvetic <[email protected]> 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