Prevent a process from opening a file more than once

rohan puri rohan.puri15 at gmail.com
Wed Sep 28 01:23:14 EDT 2011


On Wed, Sep 28, 2011 at 10:11 AM, Venkatram Tummala
<venkatram867 at gmail.com>wrote:

> On Tue, Sep 27, 2011 at 9:19 PM, rohan puri <rohan.puri15 at gmail.com>wrote:
>
>>
>>
>> On Wed, Sep 28, 2011 at 6:17 AM, Venkatram Tummala <
>> venkatram867 at gmail.com> wrote:
>>
>>> On Tue, Sep 27, 2011 at 5:40 PM, Jeff Haran <jharan at bytemobile.com>wrote:
>>>
>>>>
>>>>
>>>> From: kernelnewbies-bounces at kernelnewbies.org
>>>> [mailto:kernelnewbies-bounces at kernelnewbies.org] On Behalf Of Venkatram
>>>> Tummala
>>>> Sent: Tuesday, September 27, 2011 5:31 PM
>>>> To: Mulyadi Santosa
>>>> Cc: kernelnewbies
>>>> Subject: Re: Prevent a process from opening a file more than once
>>>>
>>>> On Tue, Sep 27, 2011 at 5:22 PM, Mulyadi Santosa
>>>> <mulyadi.santosa at gmail.com> wrote:
>>>> Hi :)
>>>>
>>>> On Wed, Sep 28, 2011 at 06:56, Venkatram Tummala
>>>> <venkatram867 at gmail.com> wrote:
>>>> > Hi All,
>>>> > I have a simple device driver which creates a /dev/XYZ file. I need to
>>>> > prevent a process from opening the file more than once. However,
>>>> multiple
>>>> > processes can open the file simultaneously. Is there any any elegant
>>>> way to
>>>> > do this other than checking all opened files in the process ?
>>>> Uhm, keep a reference count and increment it on every file open in
>>>> your module? How does that sound?
>>>> Well, which refcount should i use? I can't use the refcount in the file
>>>> object as the file objects passed to me are different each time the file
>>>> is opened in the process.
>>>>
>>>> When you say "I need to prevent a process from opening the file more
>>>> than once.", do you mean a single process opening the file, closing it
>>>> and then opening it again would be disallowed?
>>>
>>> No. If the file is already opened in the process, the process shouldn't
>>>  be allowed to open the file again. It is fine if the process opens, closes
>>> & then opens the file again.
>>>
>>>> Or do you mean that a
>>>> single process opening the file, keeping it open and then opening it
>>>> again under another fd would be disallowed?
>>>>
>>> Yes, this is what i am looking for.
>>>
>>>>
>>>> How about multiple threads within the same process? Are they treated as
>>>> the same process by these rules?
>>>>
>>> Yes. Threads are treated as the same process. So, if one thread has the
>>> file already opened, another thread in the same process shouldn't be able to
>>> open it.
>>>
>>> Venkat
>>>
>>>
>>> _______________________________________________
>>> Kernelnewbies mailing list
>>> Kernelnewbies at kernelnewbies.org
>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>>
>>> Hi Venkatram,
>>
>> I agree with Mulyadi, you maintain a static global variable (int),
>>
>> in device_open() ->
>>
>> if(var)
>>       return -EBUSY
>> var++
>>
>> &
>>
>> in device_release() ->
>>
>> var--
>>
>>
>> I think this should do the job.
>>
> This will prevent other processes to open the file until a process releases
> it. This is not what i need. Only the threads in a process shouldn't be able
> to open the file if it is already opened in the process. Other processes
> should be able to open it.
>
> Venkat
>
>>
>> Regards,
>> Rohan Puri
>>
>
> Hi Venkat,

If you want only threads in a process should not be able to open the file,
heres an untidy solution :-


1. in open store the tgid in a hash table ( or any other data structure),

        if (storing sucessful) -> do the opening.
        else if(storing op return -EEXISTS) -> return -EBUSY

2. in release remove the tgid entry from the hash.


Regards,
Rohan Puri
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20110928/bbea7c69/attachment-0001.html 


More information about the Kernelnewbies mailing list