mapping of inode and file structure in Open System call
lokesh kumar
lokeshkumar.222 at gmail.com
Mon Nov 17 23:23:05 EST 2014
Hi,
Thanks a lot for the help Saket and Pranay :)
Best regards,
Lokesh
On Mon, Nov 17, 2014 at 12:35 PM, Saket Sinha <saket.sinha89 at gmail.com> wrote:
> Hi Lokesh,
>
> I am putting down the entire call flow from the
> userspace open to the driver implementation below -
>
> 1. touch program is used to create an empty file. touch is part of the
> fileutils package, and is implemented in src/touch.c. What it
> basically does is set some flags and invoke the open() syscall, then
> calls close().
>
> 2. sys_open() in fs/open.c - it grabs the filename from userland, if
> the filename seems OK - grab the next free file descriptor, actually
> open the file with function filp_open() and give the file descriptor
> to the user.
>
> 3. filp open() in fs/open.c - Create a nameidata struct (which creates
> the file), opens the dentry associated with the nameidata structure in
> function path_openat() and returns a file pointer to the file itself.
>
> 4.path_openat in fs/namei.c - Standard path init(), path walk() dance,
> if the inode does not yet exist, we actually create it in
> do_last->lookup_open() by vfs_create().
>
> 5. vfs_create() in fs/namei.c - This triggers filesystem specific
> create by the statement dir->i_op->create.
>
> 6. Now go to filesystem specific create in the inode_opetations
> structure for example for ext2-
> Inode operations for Ext2 are defined in fs/ext2/namei.c:
>
> struct inode_operations ext2_dir_inode_operations = {
> create: ext2_create,
> lookup: ext2_lookup,
> link: ext2_link,
> unlink: ext2_unlink,
> symlink: ext2_symlink,
> mkdir: ext2_mkdir,
> rmdir: ext2_rmdir,
> . . . . . . . . . . .
> };
>
> Hope this helps.
>
> Regards,
> Saket Sinha
>
>
> On Thu, Nov 13, 2014 at 11:14 AM, Pranay Srivastava <pranjas at gmail.com> wrote:
>> Hi Lokesh
>>
>> On Wed, Nov 12, 2014 at 6:42 PM, lokesh kumar <lokeshkumar.222 at gmail.com> wrote:
>>> Hi,
>>>
>>> I have a question regarding open systemcall
>>>
>>> "open(dev_name, O_RDWR, 0)" -->userspace
>>>
>>> suppose devname is /dev/my_device
>>>
>>> Now when we look into open file operation, we have prototype
>>> "int (*open) (struct inode *, struct file *);"
>>>
>>> could anyone tell me how inode and file structure pointer are filled.
>>>
>>> I think logic is written in fs/open.c
>>>
>>> but i got confused in callbacks used in it.could anyone please tell me
>>> which topics should i cover to understand open system call.
>>>
>>
>> You should probably first understand how the file is located. See the
>> role of lookup.
>>
>>> Thanks.
>>>
>>> _______________________________________________
>>> Kernelnewbies mailing list
>>> Kernelnewbies at kernelnewbies.org
>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>
>>
>>
>> --
>> ---P.K.S
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
More information about the Kernelnewbies
mailing list