Linux文件系统omfs的目录创建和删除

Omfs文件目录的结构是通过对name做hash来实现的:

定义inode_operations结构体,

相关阅读:

Linux omfs文件系统利用bitmap管理空闲磁盘空间

Linux文件系统omfs的普通文件创建和删除

const 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:298

298 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_mkdir

dir=0xdee25d88

dentry=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\000ne\000_larval_drop\000__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 = “/\000v\000-linux-gnu\000\337`M|\300\340L|\300\000d\200\337\000\000\000\000\030\242N\337h\241N”, <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的目录创建和删除

相关文章:

你感兴趣的文章:

标签云: