working list dir
This commit is contained in:
parent
e087715248
commit
794f72d721
5
Makefile
5
Makefile
@ -3,4 +3,7 @@ obj-m += voidfs.o
|
||||
all: voidfs
|
||||
|
||||
voidfs:
|
||||
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
|
||||
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
|
||||
|
||||
clean:
|
||||
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
|
||||
|
50
voidfs.c
50
voidfs.c
@ -17,6 +17,10 @@ static int voidfs_fill_super(struct super_block *sb, void *data, int silent);
|
||||
void voidfs_kill_superblock(struct super_block *sb);
|
||||
|
||||
|
||||
struct dentry *voidfs_lookup(struct inode *dir, struct dentry *dentry, unsigned int);
|
||||
int voidfs_readdir(struct file *fp, struct dir_context *ctx);
|
||||
|
||||
ssize_t voidfs_open(struct file *fp, char __user *buf, size_t len, loff_t *ppos);
|
||||
ssize_t voidfs_read(struct file *fp, char __user *buf, size_t len, loff_t *ppos);
|
||||
ssize_t voidfs_write(struct file *fp, const char __user *buf, size_t len, loff_t *ppos);
|
||||
|
||||
@ -30,19 +34,29 @@ struct file_system_type voidfs_fs_type = {
|
||||
|
||||
struct super_operations voidfs_super_ops = {
|
||||
// null for now
|
||||
}
|
||||
};
|
||||
|
||||
struct super_operations voidfs_inode_ops = {
|
||||
// null for now
|
||||
}
|
||||
struct inode_operations voidfs_inode_ops = {
|
||||
.lookup = voidfs_lookup,
|
||||
};
|
||||
|
||||
struct file_operations voidfs_dir_ops = {
|
||||
.iterate_shared = voidfs_readdir,
|
||||
}
|
||||
};
|
||||
|
||||
struct file_operations voidfs_file_ops = {
|
||||
.open = voidfs_open,
|
||||
.read = voidfs_read,
|
||||
.write = voidfs_write,
|
||||
};
|
||||
|
||||
struct dentry *voidfs_lookup(struct inode *dir, struct dentry *dentry, unsigned int) {
|
||||
struct inode* inode = NULL;
|
||||
|
||||
printk(KERN_INFO "listing directory uwu %s", dentry->d_name.name);
|
||||
|
||||
d_add(dentry, inode);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int voidfs_readdir(struct file *fp, struct dir_context *ctx) {
|
||||
@ -52,7 +66,7 @@ int voidfs_readdir(struct file *fp, struct dir_context *ctx) {
|
||||
|
||||
printk(KERN_INFO "readdir");
|
||||
|
||||
inode = file_inode(file);
|
||||
inode = file_inode(fp);
|
||||
sb = inode->i_sb;
|
||||
|
||||
// if (inode &&
|
||||
@ -67,7 +81,7 @@ ssize_t voidfs_read(struct file *fp, char __user *buf, size_t len, loff_t *ppos)
|
||||
struct inode *inode;
|
||||
struct super_block *sb;
|
||||
|
||||
inode = file_inode(file);
|
||||
inode = file_inode(fp);
|
||||
if (!inode) {
|
||||
return -EFAULT;
|
||||
}
|
||||
@ -83,14 +97,15 @@ ssize_t voidfs_read(struct file *fp, char __user *buf, size_t len, loff_t *ppos)
|
||||
// get as much as we can
|
||||
|
||||
if (copy_to_user(buf, buffer, nbytes)) {
|
||||
brelse(bh);
|
||||
printk(KERN_ERR
|
||||
"Error copying file content to userspace buffer\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
ssize_t voidfs_write(struct file *fp, const char __user *buf, size_t len, loff_t *ppos) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct dentry *voidfs_mount(struct file_system_type *fs_type, int flags, const char *dev_name, void *data) {
|
||||
@ -127,21 +142,22 @@ static int voidfs_fill_super(struct super_block *sb, void *data, int silent) {
|
||||
if (!root_inode) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
inode_init_owner(root_inode, NULL, root_inode->i_mode);
|
||||
root_inode->i_mode = S_IFDIR | 0644;
|
||||
inode_init_owner(&nop_mnt_idmap, root_inode, NULL, root_inode->i_mode);
|
||||
|
||||
root_inode->i_sb = sb;
|
||||
root_inode->i_op = &voidfs_inode_ops;
|
||||
root_inode->i_atime = root_inode->i_mtime
|
||||
= root_inode->i_ctime
|
||||
= CURRENT_TIME;
|
||||
|
||||
root_inode->i_fop = &voidfs_dir_ops;
|
||||
|
||||
// create a dummy file entry point
|
||||
root_inode->i_fop = &voidfs_file_ops;
|
||||
|
||||
sb->s_root = d_make_root(root_inode);
|
||||
|
||||
// create a dummy file entry point
|
||||
// root_inode->i_fop = &voidfs_file_ops;
|
||||
|
||||
|
||||
// create a child file
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -190,5 +206,5 @@ static void __exit voidfs_exit(void)
|
||||
module_init(voidfs_init);
|
||||
module_exit(voidfs_exit);
|
||||
|
||||
MODULE_LICENSE("MIT");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("nganhkhoa");
|
||||
|
Loading…
Reference in New Issue
Block a user