Omfs文件目录的结构是通过对name做hash来实现的:定义inode_operations结构体,相关阅读:Linux omfs文件系统利用bitmap管理空闲磁盘空间 http://www.linuxidc.com/Linux/2012-02/54024.htmLinux文件系统omfs的普通文件创建和删除 http://www.linuxidc.com/Linux/2012-02/54026.htmconst struct inode_operations omfs_dir_inops = { .lookup = omfs_lookup, .mkdir = omfs_mkdir, .rename = omfs_rename, .create = omfs_create, .unlink = omfs_unlink, .rmdir = omfs_rmdir,}; 系统调用mkdir dir1 Breakpoint 2, omfs_mkdir (dir=0xdee25d88, dentry=0xdedc8660, mode=493) at fs/omfs/dir.c:298298 return omfs_add_node(dir, dentry, mode | S_IFDIR);(gdb) bt#0 omfs_mkdir (dir=0xdee25d88, dentry=0xdedc8660, mode=493) at fs/omfs/dir.c:298#1 0xc029fdb6 in vfs_mkdir (dir=0xdee25d88, dentry=0xdedc8660, mode=493) at fs/namei.c:2086#2 0xc029fe8c in sys_mkdirat (dfd=-100, pathname=0xbf8de932 "dir1", mode=493) at fs/namei.c:2116#3 0xc029fef3 in sys_mkdir (pathname=0xbf8de932 "dir1", mode=511) at fs/namei.c:2131#4 0xc0104657 in ?? () at arch/x86/kernel/entry_32.S:457 可以看到系统调用的过程:Sys_mkdiràsys_mkdiratàvfs_mkdiràomfs_mkdirdir=0xdee25d88dentry=0xdedc8660 p *dentry$7 = {d_count = {counter = 1}, d_flags = 0, d_lock = {{rlock = {raw_lock = { slock = 257}}}}, d_mounted = 0, d_inode = 0x0, d_hash = {next = 0x0, pprev = 0xc144096c}, d_parent = 0xdf4ea198, d_name = {hash = 25987720, len = 4, name = 0xdedc86bc "dir1"}, d_lru = {next = 0xdedc868c, prev = 0xdedc868c}, d_u = {d_child = {next = 0xdf4ea1d4, prev = 0xdf4ea1d4}, d_rcu = {next = 0xdf4ea1d4, func = 0xdf4ea1d4}}, d_subdirs = {next = 0xdedc869c, prev = 0xdedc869c}, d_alias = { next = 0xdedc86a4, prev = 0xdedc86a4}, d_time = 1701080941, d_op = 0x0, d_sb = 0xdd91e400, d_fsdata = 0x0, d_iname = "dir1 00ne 00_larval_drop 00__ticket_spin_unloc"} p *(struct dentry *)0xdf4ea198$8 = {d_count = {counter = 6}, d_flags = 16, d_lock = {{rlock = {raw_lock = { slock = 1028}}}}, d_mounted = 0, d_inode = 0xdee25d88, d_hash = { next = 0x0, pprev = 0x0}, d_parent = 0xdf4ea198, d_name = {hash = 0, len = 1, name = 0xdf4ea1f4 "/"}, d_lru = {next = 0xdf4ea1c4, prev = 0xdf4ea1c4}, d_u = {d_child = {next = 0xdf4ea1cc, prev = 0xdf4ea1cc}, d_rcu = {next = 0xdf4ea1cc, func = 0xdf4ea1cc}}, d_subdirs = {next = 0xdedc8694, prev = 0xdedc8694}, d_alias = { next = 0xdee25da0, prev = 0xdee25da0}, d_time = 0, d_op = 0x0, d_sb = 0xdd91e400, d_fsdata = 0x0, d_iname = "/ 00v 00-linux-gnu 00337`M|300340L|300 00d200337 00 00 00 00 30242N337h241N", <incomplete sequence 337>} p *dir$6 = {i_hash = {next = 0x0, pprev = 0xc1463a90}, i_list = {next = 0xdf597480, prev = 0xd2335648}, i_sb_list = {next = 0xdd91e474, prev = 0xdd91e474}, i_dentry = {next = 0xdf4ea1dc, prev = 0xdf4ea1dc}, i_ino = 3, i_count = { counter = 1}, i_nlink = 2, i_uid = 0, i_gid = 0, i_rdev = 0, i_blkbits = 11, i_version = 0, i_size = 2048, i_size_seqcount = { sequence = 0}, i_atime = {tv_sec = 1328683425, tv_nsec = 0}, i_mtime = { tv_sec = 1328683648, tv_nsec = 915000}, i_ctime = {tv_sec = 1328683648, tv_nsec = 915000}, i_blocks = 0, i_bytes = 0, i_mode = 16877, i_lock = {{ rlock = {raw_lock = {slock = 514}}}}, i_mutex = {count = {counter = 0}, wait_lock = {{rlock = {raw_lock = {slock = 0}}}}, wait_list = { next = 0xdee25e08, prev = 0xdee25e08}, owner = 0xddb0c000}, i_alloc_sem = {count = 0, wait_lock = {{rlock = {raw_lock = {slock = 0}}}}, wait_list = {next = 0xdee25e1c, prev = 0xdee25e1c}}, i_op = 0xe27ccb60, i_fop = 0xe27ccbc0, i_sb = 0xdd91e400, i_flock = 0x0, i_mapping = 0xdee25e38, i_data = {host = 0xdee25d88, page_tree = { height = 0, gfp_mask = 32, rnode = 0x0}, tree_lock = {{rlock = { raw_lock = {slock = 0}}}}, i_mmap_writable = 0, i_mmap = { prio_tree_node = 0x0, index_bits = 1, raw = 1}, i_mmap_nonlinear = { next = 0xdee25e58, prev = 0xdee25e58}, i_mmap_lock = {{rlock = { raw_lock = {slock = 0}}}}, truncate_count = 0, nrpages = 0, writeback_index = 0, a_ops = 0xe27ccd20, flags = 131290, backing_dev_info = 0xd233559c, private_lock = {{rlock = {raw_lock = { slock = 0}}}}, private_list = {next = 0xdee25e80, ---Type <return> to continue, or q <return> to quit--- prev = 0xdee25e80}, assoc_mapping = 0x0}, i_dquot = {0x0, 0x0}, i_devices = {next = 0xdee25e94, prev = 0xdee25e94}, {i_pipe = 0x0, i_bdev = 0x0, i_cdev = 0x0}, i_generation = 0, i_fsnotify_mask = 0, i_fsnotify_mark_entries = {first = 0x0}, inotify_watches = { next = 0xdee25eac, prev = 0xdee25eac}, inotify_mutex = {count = { counter = 1}, wait_lock = {{rlock = {raw_lock = {slock = 0}}}}, wait_list = {next = 0xdee25ebc, prev = 0xdee25ebc}, owner = 0x0}, i_state = 1, dirtied_when = 4294956485, i_flags = 0, i_writecount = { counter = 0}, i_security = 0x0, i_acl = 0xffffffff, i_default_acl = 0xffffffff, i_private = 0x0}
Linux omfs文件系统利用bitmap管理空闲磁盘空间Linux文件系统omfs的普通文件创建和删除相关资讯 Linux基础知识
- Linux基础知识之文件权限详解 (08月09日)
- Linux基础知识之ls与文件名通配详 (08月01日)
- Linux基础知识之history的详细说明 (07月31日)
| - Linux基础知识之文件管理命令(cp、 (08月09日)
- Linux基础知识之man手册的使用 (07月31日)
- Linux基础知识之文件的时间戳及 (07月31日)
|
本文评论 查看全部评论 (0)