ocfs2: 建立一個新文件

1. vfs層node

open(O_CREATE)rest

  sys_open()系統服務例程是這樣的: code

SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
        if (force_o_largefile())
                flags |= O_LARGEFILE;

        return do_sys_open(AT_FDCWD, filename, flags, mode);
}

do_sys_open索引

   getname(filename)get

   get_unused_fd_flags(flags)it

   do_filp_openio

         set_nameidataast

          path_openatclass

               get_empty_filpsed

               path_init

               while(link_path_walk && do_last) {trailing_syslink();}

                do_last() -->

                        lookup_open中調用父目錄的create方法來分配一個新的磁盤索引結點:

/* Negative dentry, just create the file */
        if (!dentry->d_inode && (open_flag & O_CREAT)) {
                *opened |= FILE_CREATED;
                audit_inode_child(dir_inode, dentry, AUDIT_TYPE_CHILD_CREATE);
                if (!dir_inode->i_op->create) {
                        error = -EACCES;
                        goto out_dput;
                }
                error = dir_inode->i_op->create(dir_inode, dentry, mode,
                                                open_flag & O_EXCL);
                if (error)
                        goto out_dput;
                fsnotify_create(dir_inode, dentry);
        }

               terminate_walk()

         restore_nameidata     

    fd_install

    putname

2. ocfs2如何建立一個新的inode

const struct inode_operations ocfs2_dir_iops = {
......
        .create         = ocfs2_create,
......
};

ocfs2_create    ocfs2_mknod       ocfs2_prepare_dir_for_insert        ocfs2_reserve_new_inode          ocfs2_get_init_inode          ocfs2_reserve_new_metadata_blocks           ocfs2_reserve_clusters       ocfs2_mknod_locked           ocfs2_claim_new_inode            __ocfs2_mknod_locked    ocfs2_add_entry  

相關文章
相關標籤/搜索