Я выполняю системный вызов open () , чтобы узнать, когда struct file_operations и struct file подключаются во время создания файла.
Основной путь следующий:
sys_open -> do_sys_open -> do_filp_open -> nameidata_to_filp -> __dentry_open
В __dentry_open
static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
int flags, struct file *f,
int (*open)(struct inode *, struct file *),
const struct cred *cred)
{
struct inode *inode;
int error;
f->f_flags = flags;
f->f_mode = ((flags+1) & O_ACCMODE) | FMODE_LSEEK |
FMODE_PREAD | FMODE_PWRITE;
inode = dentry->d_inode;
if (f->f_mode & FMODE_WRITE) {
error = __get_file_write_access(inode, mnt);
if (error)
goto cleanup_file;
if (!special_file(inode->i_mode))
file_take_write(f);
}
f->f_mapping = inode->i_mapping;
f->f_path.dentry = dentry;
f->f_path.mnt = mnt;
f->f_pos = 0;
f->f_op = fops_get(inode->i_fop);//I think it is here that they get connected
file_move(f, &inode->i_sb->s_files);
error = security_dentry_open(f);
...
Но когда и в какой функции инициализируется i_fop в inode?