aufs简单的文件系统

#include <linux/module.h> 
#include <linux/fs.h> 
#include <linux/pagemap.h> 
#include <linux/mount.h> 
#include <linux/init.h> 
#include <linux/namei.h> 

#deifne  AUFS_MAGIC  0x64668735

static struct vfsmount *aufs_mount;
static int aufs_mount_count;

static struct inode *aufs_get_inode(struct super_block *sb , int mode , dev_t dev)
{
  struct inode *inode = new_inode(sb);
  if(inode){
	inode->i_mode = mode;
	inode->i_uid  = current->fsuid;
	inode->i_gid  = current->fsgid;
	inode->i_blksize = PAGE_CACHE_SIZE;
	inode->i_blocks  = 0;
	inode->i_atime   = inode->i_ctime = CURRENT_TIME;
	switch(mode & S_IFMT){
	default:
		init_special_inode(inode, mode, dev);
		break;
	case S_IFREG:
		printk("create a file\n");
		break;
	case S_IFDIR:
		inode->i_op  = &simple_dir_inode_operations;
		inode->i_fop = &simple_dir_operation;
		printk("create a dir file");
		inode->i_nlink++;
		break;
	}
  }
return inode;}





static int_aufs_mknod(struct inode *dir , struct dentry *dentry , int mode , dev_t dev)
{

struct inode *inode;
int error = -EPERM;

if(dentry->d_inode)
return -EEXIST;

inode = aufs_get_inode(dir->i_sb,mode,dev);
if(inode){
	d_instantiate(dentry, inode);
	dget(dentry);
	error = 0;
}
  return error;
}

static int aufs_mkdir(struct inode *dir,struct dentry *dentry, int mode)
{
  int res;
  res = aufs_mknod(dir,dentry,mode | S_IFDIR, 0);
  if(!res)
    dir->i_nlink++;
  return res;
}
static int aufs_create(struct inode *dir , struct dentry *dentry, int mode)
{
  return aufs_mknod(dir, dentry, mode | S_IFREG, 0);
}
static int aufs_fill_super(struct super_block *sb , void *data , int silent)
{
  static struct tree_descr  debug_files[] = {{""}};
  return simple_fill_super(sb, AUFS_MAGIC, debug_files);
}
static struct super_block *aufs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data)
{
  return get_sb_single(fs_type, flasg, data, aufs_fill_super);
}
static
 struct file_sysem_type au_fs_type = {
  .owner = THIS_MODULE,
  .name  = "aufs",
  .get_sb= aufs_get_sb,
  .kill  = kill_litter_super,
};
static int aufs_create_by_name(const char *name, mode_t mode, struct dentry *parent, struct dentry **dentry)
{
  int error = 0;
  if(!parent){
    if(aufs_mount&& aufs_mount->mnt_sb){
      parent = aufs_mount->mnt_sb->s_root
    }
  }

  *dentry = NULL;
  mutex_lock(&parent->d_inode->i_mutex);
  *dentry = lookup_one_len(name, parent, strlen(name));

  if(!IS_ERR(dentry)) {
    if(mode &S_IFMT) == S_IFDIR)
      error = aufs_mkdir(parent->d_inode, *dentry, mode);
    else
      error = PTR_ERR(dentry);
    mutex_unlock( &parent->d_inode->i_mutex);

    return error;
  }
}
struct dentry *aufs_create_file(const char *name, mode_t





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值