1 | sys_open() > do_sys_open() > do_filp_open() > open_namei() |
1 | open_namei() > lookup_hash() > __lookup_hash() |
1 | d_alloc() > dget(parent) > atomic_inc(&dentry->d_count); |
1 | open_namei() > open_namei_create() > vfs_create() > i_op->create() |
1 2 | ext2_create() > ext2_new_inode() > new_inode() > alloc_inode() > atomic_set(&inode->i_count, 1); |
1 | sys_mkdir() > sys_mkdirat() > lookup_create() > lookup_hash() > __lookup_hash() |
1 | sys_mkdir() > sys_mkdirat() > vfs_mkdir() > i_op->mkdir() |
1 | ext2_mkdir() > ext2_new_inode() > new_inode() > alloc_inode() > atomic_set() |
1 | __link_path_walk() > do_lookup() |
1 | do_lookup() > __d_lookup() > atomic_inc(&dentry->d_count) |
1 | do_lookup() > real_lookup() > d_alloc() > atomic_set(&dentry->d_count, 1); |
1 | real_lookup() > i_op->lookup() |
1 2 3 | (1) ext2_lookup() > iget(dir->i_sb, ino); (2) ext2_lookup() > d_splice_alias() > __d_find_alias() > __dget_locked() > atomic_inc(&dentry->d_count); |
1 2 3 4 5 6 7 8 9 10 11 12 | int vfs_stat_fd(int dfd, char __user *name, struct kstat *stat) { struct nameidata nd; int error; error = __user_walk_fd(dfd, name, LOOKUP_FOLLOW, &nd); if (!error) { error = vfs_getattr(nd.mnt, nd.dentry, stat); path_release(&nd); } return error; } |
1 | __user_walk_fd() > do_path_lookup() > link_path_walk() > __link_path_walk() |
1 | path_release(&nd) > dput(nd->dentry) |
1 | sys_link() > sys_linkat() |
1 2 3 4 5 6 7 8 9 | (1) error = __user_walk_fd(olddfd, oldname, flags & AT_SYMLINK_FOLLOW ? LOOKUP_FOLLOW : 0, &old_nd); (2) error = do_path_lookup(newdfd, to, LOOKUP_PARENT, &nd); (3) new_dentry = lookup_create(&nd, 0); (4) error = vfs_link(old_nd.dentry, nd.dentry->d_inode, new_dentry); (5) dput(new_dentry); (6) path_release(&nd); (7) path_release(&old_nd); |
1 | vfs_link() > i_op->link() |
1 2 | (1) ext2_link() > inode_inc_link_count() > inc_nlink() (2) ext2_link() > atomic_inc(&inode->i_count); |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |