]> Zhao Yanbai Git Server - kernel.git/commitdiff
添加ramfs_create
authoracevest <zhaoyanbai@126.com>
Tue, 3 Sep 2024 12:37:28 +0000 (20:37 +0800)
committeracevest <zhaoyanbai@126.com>
Tue, 3 Sep 2024 12:37:28 +0000 (20:37 +0800)
fs/dentry.c
fs/ramfs.c
fs/vfs.h

index 33cb782fb8b53aeffd6f66f63e1e7ba3b3ab4726..ab3d8df697ab10ae1e4c386c3fc9c41927277ce5 100644 (file)
@@ -92,7 +92,9 @@ dentry_t *dentry_alloc_root(inode_t *root_inode) {
         dentry->d_sb = root_inode->i_sb;
         dentry->d_parent = dentry;
     }
-    dentry->d_inode = root_inode;
+
+    // dentry->d_inode = root_inode;
+    dentry_add(dentry, root_inode);
 
     return dentry;
 }
index a1df5659b1f89f6bb7095e03d1237f47ed2e968b..f4b15e42a0086351f8861bc97c0023cb856fc5f7 100644 (file)
@@ -52,12 +52,12 @@ static const file_operations_t ramfs_dir_operations = {
 
 };
 
-int ramfs_mkdir(inode_t *dir, dentry_t *dentry, int mode) {
+static int ramfs_mknod(inode_t *dir, dentry_t *dentry, umode_t mode) {
     int ret = 0;
 
     inode_t *inode = NULL;
 
-    inode = ramfs_get_inode(dir->i_sb, mode | S_IFDIR, 0);
+    inode = ramfs_get_inode(dir->i_sb, mode, 0);
     if (inode == NULL) {
         return -ENOSPC;
     }
@@ -69,15 +69,24 @@ int ramfs_mkdir(inode_t *dir, dentry_t *dentry, int mode) {
     return ret;
 }
 
-dentry_t *ramfs_lookup(inode_t *dir, dentry_t *dentry) {
+static int ramfs_create(inode_t *dir, dentry_t *dentry, umode_t mode, namei_t *ni) {
+    return ramfs_mknod(dir, dentry, mode | S_IFREG);
+}
+
+static int ramfs_mkdir(inode_t *dir, dentry_t *dentry, umode_t mode) {
+    return ramfs_mknod(dir, dentry, mode | S_IFDIR);
+}
+
+static dentry_t *ramfs_lookup(inode_t *dir, dentry_t *dentry) {
     dentry_add(dentry, NULL);
 
     return NULL;
 }
 
 static const inode_operations_t ramfs_dir_inode_operations = {
-    .mkdir = ramfs_mkdir,
     .lookup = ramfs_lookup,
+    .create = ramfs_create,
+    .mkdir = ramfs_mkdir,
 };
 
 inode_t *ramfs_get_inode(superblock_t *sb, umode_t mode, dev_t dev) {
index b4936bef6b8f3b401c30bd0f840b19fb5673e630..40f60ffbe32175df0b6913139b06e4831d962d45 100644 (file)
--- a/fs/vfs.h
+++ b/fs/vfs.h
@@ -182,10 +182,10 @@ struct inode_operations {
     dentry_t *(*lookup)(inode_t *, dentry_t *);
 
     // 在inode下创建一个dentry->d_small_name的文件
-    int (*create)(inode_t *, dentry_t *, int, namei_t *);
+    int (*create)(inode_t *, dentry_t *, umode_t, namei_t *);
 
     // 创建文件夹
-    int (*mkdir)(inode_t *, dentry_t *, int);
+    int (*mkdir)(inode_t *, dentry_t *, umode_t);
 
     // link
     // unlink