新文件创建inode分配路径

#0  __ext4_new_inode (handle=0x0 <irq_stack_union>, dir=0xffff880006478508, mode=33206,	qstr=0xffff8800064829e0, goal=105350408, owner=0x81b6 <exception_stacks+16822>,	handle_type=4, line_no=2472, nblocks=35)
    at fs/ext4/ialloc.c:750
#1  0xffffffff811fbc03 in ext4_create (dir=0xffff880006478508, dentry=0xffff880006478508, mode=33206, excl=224)	at fs/ext4/namei.c:2471
#2  0xffffffff81183880 in lookup_open (opened=<optimized out>, got_write=<optimized out>, op=<optimized out>, file=<optimized out>, path=<optimized out>, nd=<optimized out>) at fs/namei.c:3152
#3  do_last (opened=<optimized out>, op=<optimized out>, file=<optimized out>, nd=<optimized out>) at fs/namei.c:3243
#4  path_openat (nd=0xffffc900018f7de8,	op=0xffffc900018f7efc, flags=33206) at fs/namei.c:3454
#5  0xffffffff81183f39 in do_filp_open (dfd=0, pathname=0xffff880006478508, op=0xffffc900018f7efc) at fs/namei.c:3489
#6  0xffffffff811737fb in do_sys_open (dfd=-100, filename=0xffff880006478508 "\355A\v",	flags=32834, mode=10720) at fs/open.c:1053
#7  0xffffffff811738b0 in SYSC_open (mode=<optimized out>, flags=<optimized out>, filename=<optimized out>) at fs/open.c:1071
#8  SyS_open (filename=0, flags=-131941289982712, mode=33206) at fs/open.c:1066

inode的ops赋值在ext4_create函数中

static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode,
		       bool excl)
{
	handle_t *handle;
	struct inode *inode;
	int err, credits, retries = 0;

	err = dquot_initialize(dir);
	if (err)
		return err;

	credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
		   EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
retry:
	inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0,
					    NULL, EXT4_HT_DIR, credits);
	handle = ext4_journal_current_handle();
	err = PTR_ERR(inode);
	if (!IS_ERR(inode)) {
		inode->i_op = &ext4_file_inode_operations;
		inode->i_fop = &ext4_file_operations;
		ext4_set_aops(inode);
		err = ext4_add_nondir(handle, dentry, inode);
		if (!err && IS_DIRSYNC(dir))
			ext4_handle_sync(handle);
	}
	if (handle)
		ext4_journal_stop(handle);
	if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
		goto retry;
	return err;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值