From dd2f60baea7bda75ed0e2906061cbb11b3b9b2a9 Mon Sep 17 00:00:00 2001 From: g2px1 Date: Fri, 20 Jun 2025 21:22:33 +0000 Subject: [PATCH] 8 --- libfs.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/libfs.c b/libfs.c index 2c8c7c4..32c91e3 100644 --- a/libfs.c +++ b/libfs.c @@ -33,6 +33,8 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("you"); MODULE_DESCRIPTION("Custom FS with books/authors behavior"); +static int custom_unlink(struct inode *dir, struct dentry *dentry); + static struct super_block *global_sb; static struct inode *books_inode; static const struct inode_operations fs_dir_iops; @@ -108,6 +110,7 @@ static struct inode *get_inode(struct super_block *sb, umode_t mode) { inode->i_ino = get_next_ino(); inode->i_sb = sb; inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); + inode->i_mode = mode; return inode; } @@ -164,10 +167,10 @@ static struct dentry *books_lookup(struct inode *dir, struct dentry *dentry, uns return NULL; // всегда возвращается NULL в lookup } - static const struct inode_operations books_dir_iops = { .lookup = books_lookup, .create = books_create, + .unlink = custom_unlink, }; static void remove_links_to_inode(struct inode *inode) { @@ -422,12 +425,13 @@ static int fill_super(struct super_block *sb, void *data, int silent) { return -ENOMEM; books_inode->i_op = &books_dir_iops; books_inode->i_fop = &simple_dir_operations; + books_inode->i_mode = S_IFDIR | 01777; struct dentry *books = d_alloc_name(root_dentry, "books"); if (!books) return -ENOMEM; d_add(books, books_inode); - inc_nlink(root_inode); // ✅ важно! - inc_nlink(books_inode); // ✅ важно! + inc_nlink(root_inode); + inc_nlink(books_inode); logf("fill_super: books directory instantiated"); // authors @@ -441,8 +445,8 @@ static int fill_super(struct super_block *sb, void *data, int silent) { if (!authors) return -ENOMEM; d_add(authors, authors_inode); - inc_nlink(root_inode); // ✅ важно! - inc_nlink(authors_inode); // ✅ важно! + inc_nlink(root_inode); + inc_nlink(authors_inode); logf("fill_super: authors directory instantiated"); logf("fill_super: books and authors created");