This commit is contained in:
g2px1 2025-06-20 20:38:26 +00:00
parent 4f815c3ee1
commit e6ebf985b9

15
libfs.c
View File

@ -1,5 +1,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/fs_context.h>
#include <linux/file.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/namei.h> #include <linux/namei.h>
@ -36,6 +38,8 @@ static struct inode *books_inode;
static const struct inode_operations fs_dir_iops; static const struct inode_operations fs_dir_iops;
DEFINE_HASHTABLE(link_table, 6); DEFINE_HASHTABLE(link_table, 6);
static const struct inode_operations custom_file_inode_operations = {};
struct link_entry { struct link_entry {
struct hlist_node node; struct hlist_node node;
struct dentry *link; struct dentry *link;
@ -113,8 +117,13 @@ static int books_create(struct user_namespace *ns, struct inode *dir,
return -ENOMEM; return -ENOMEM;
inode->i_uid = current_fsuid(); inode->i_uid = current_fsuid();
// inode->i_op = &simple_file_inode_operations;
inode->i_op = &custom_file_inode_operations;
inode->i_fop = &custom_file_ops; inode->i_fop = &custom_file_ops;
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
mark_inode_dirty(inode);
logf("books_create: created file %s (ino=%lu)", dentry->d_name.name, inode->i_ino);
return 0; return 0;
} }
@ -352,6 +361,9 @@ static int fill_super(struct super_block *sb, void *data, int silent) {
if (!books) if (!books)
return -ENOMEM; return -ENOMEM;
d_add(books, books_inode); d_add(books, books_inode);
inc_nlink(root_inode); // ✅ важно!
inc_nlink(books_inode); // ✅ важно!
logf("fill_super: books directory instantiated");
// authors // authors
struct inode *authors_inode = get_inode(sb, S_IFDIR | MODE_AUTHORS); struct inode *authors_inode = get_inode(sb, S_IFDIR | MODE_AUTHORS);
@ -364,6 +376,9 @@ static int fill_super(struct super_block *sb, void *data, int silent) {
if (!authors) if (!authors)
return -ENOMEM; return -ENOMEM;
d_add(authors, authors_inode); d_add(authors, authors_inode);
inc_nlink(root_inode); // ✅ важно!
inc_nlink(authors_inode); // ✅ важно!
logf("fill_super: authors directory instantiated");
logf("fill_super: books and authors created"); logf("fill_super: books and authors created");
return 0; return 0;