linux内核fd file,Linux内核中的文件描述符(三)——fd的回收

//fs/file_table.c

void fastcall fput(struct file *file)

{

if (rcuref_dec_and_test(&file->f_count))

__fput(file);

}

void fastcall __fput(struct file *file)

{

struct dentry *dentry = file->f_dentry;

struct vfsmount *mnt = file->f_vfsmnt;

struct inode *inode = dentry->d_inode;

might_sleep();

fsnotify_close(file);

/*

* The function eventpoll_release() should be the first called

* in the file cleanup chain.

*/

eventpoll_release(file);

locks_remove_flock(file);

if (file->f_op && file->f_op->release)

file->f_op->release(inode, file);//在这里调用release函数。在socket中即socket_close函数

security_file_free(file);

if (unlikely(inode->i_cdev != NULL))

cdev_put(inode->i_cdev);

fops_put(file->f_op);

if (file->f_mode & FMODE_WRITE)

put_write_access(inode);

file_kill(file);

file->f_dentry = NULL;

file->f_vfsmnt = NULL;

file_free(file);

dput(dentry);

mntput(mnt);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值