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@xxxxxxxxx> 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@xxxxxxxxx> wrote: >> Hi Lokesh >> >> On Wed, Nov 12, 2014 at 6:42 PM, lokesh kumar <lokeshkumar.222@xxxxxxxxx> 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@xxxxxxxxxxxxxxxxx >>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >> >> >> >> -- >> ---P.K.S >> >> _______________________________________________ >> Kernelnewbies mailing list >> Kernelnewbies@xxxxxxxxxxxxxxxxx >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies