Browse Source

remove: some redundant code

greatbridf 11 tháng trước cách đây
mục cha
commit
f67d993913
3 tập tin đã thay đổi với 21 bổ sung50 xóa
  1. 3 26
      include/kernel/vfs.hpp
  2. 4 1
      src/fs/fat.cpp
  3. 14 23
      src/kernel/vfs.cpp

+ 3 - 26
include/kernel/vfs.hpp

@@ -23,27 +23,10 @@
 #include <types/lock.hpp>
 #include <types/types.h>
 
-#define INODE_FILE (1 << 0)
-#define INODE_DIR (1 << 1)
-#define INODE_MNT (1 << 2)
-#define INODE_NODE (1 << 3)
-
-// dirent file types
-#define DT_UNKNOWN 0
-#define DT_FIFO 1
-#define DT_CHR 2
-#define DT_DIR 4
-#define DT_BLK 6
-#define DT_REG 8
-#define DT_LNK 10
-#define DT_SOCK 12
-#define DT_WHT 14
-
-#define DT_MAX (S_DT_MASK + 1) /* 16 */
+#define NODE_MAJOR(node) ((node) >> 16)
+#define NODE_MINOR(node) ((node) & 0xffffU)
 
 namespace fs {
-using blksize_t = size_t;
-using blkcnt_t = size_t;
 
 class vfs;
 
@@ -59,10 +42,6 @@ struct inode {
     gid_t gid;
 };
 
-#define NODE_MAJOR(node) ((node) >> 16)
-#define NODE_MINOR(node) ((node) & 0xffff)
-constexpr dev_t NODE_INVALID = -1U;
-
 constexpr dev_t make_device(uint32_t major, uint32_t minor)
 {
     return (major << 16) | (minor & 0xffff);
@@ -168,8 +147,6 @@ public:
 
         // out_dst SHOULD be empty
         void path(const dentry& root, types::path& out_dst) const;
-
-        void invalidate(void);
     };
 
 public:
@@ -217,7 +194,7 @@ public:
     virtual int inode_mkdir(dentry* dir, const char* dirname, mode_t mode);
     virtual int inode_statx(dentry* dent, statx* buf, unsigned int mask);
     virtual int inode_stat(dentry* dent, struct stat* stat);
-    virtual dev_t inode_devid(inode* file);
+    virtual int inode_devid(inode* file, dev_t& out_dev);
 
     virtual int truncate(inode* file, size_t size);
 

+ 4 - 1
src/fs/fat.cpp

@@ -131,9 +131,12 @@ int fat32::inode_readdir(fs::inode* dir, size_t offset, const fs::vfs::filldir_f
 }
 
 fat32::fat32(inode* _device)
-    : device(_device->fs->inode_devid(_device))
+    : device { 0 }
     , label { 0 }
 {
+    // TODO: error handling
+    assert(_device->fs->inode_devid(_device, device) == 0);
+
     auto* buf = new char[SECTOR_SIZE];
     _raw_read_sector(buf, 0);
 

+ 14 - 23
src/kernel/vfs.cpp

@@ -73,12 +73,6 @@ fs::vfs::dentry* fs::vfs::dentry::replace(dentry* val)
     parent->idx_children->find(this->name)->second = val;
     return this;
 }
-void fs::vfs::dentry::invalidate(void)
-{
-    children->clear();
-    idx_children->clear();
-    flags.present = 0;
-}
 
 void fs::vfs::dentry::remove(const name_type& name)
 {
@@ -202,7 +196,7 @@ int fs::vfs::inode_statx(dentry*, statx*, unsigned int)
 { return -EINVAL; }
 int fs::vfs::inode_stat(dentry*, struct stat*)
 { return -EINVAL; }
-dev_t fs::vfs::inode_devid(fs::inode*)
+int fs::vfs::inode_devid(fs::inode*, dev_t&)
 { return -EINVAL; }
 int fs::vfs::truncate(inode*, size_t)
 { return -EINVAL; }
@@ -492,9 +486,10 @@ public:
         return -EIO;
     }
 
-    virtual dev_t inode_devid(fs::inode* file) override
+    virtual int inode_devid(fs::inode* file, dev_t& out_dev) override
     {
-        return as_val(_getdata(file->ino));
+        out_dev = as_val(_getdata(file->ino));
+        return 0;
     }
 
     virtual int truncate(fs::inode* file, size_t size) override
@@ -679,7 +674,11 @@ size_t fs::vfs_read(fs::inode* file, char* buf, size_t buf_size, size_t offset,
         return file->fs->inode_read(file, buf, buf_size, offset, n);
 
     if (S_ISBLK(file->mode) || S_ISCHR(file->mode)) {
-        dev_t dev = file->fs->inode_devid(file);
+        dev_t dev;
+        if (file->fs->inode_devid(file, dev) != 0) {
+            errno = EINVAL;
+            return -1U;
+        }
 
         ssize_t ret;
         if (S_ISBLK(file->mode))
@@ -709,7 +708,11 @@ size_t fs::vfs_write(fs::inode* file, const char* buf, size_t offset, size_t n)
         return file->fs->inode_write(file, buf, offset, n);
 
     if (S_ISBLK(file->mode) || S_ISCHR(file->mode)) {
-        dev_t dev = file->fs->inode_devid(file);
+        dev_t dev;
+        if (file->fs->inode_devid(file, dev) != 0) {
+            errno = EINVAL;
+            return -1U;
+        }
 
         ssize_t ret;
         if (S_ISBLK(file->mode))
@@ -885,9 +888,6 @@ void fs::partprobe()
 
 ssize_t fs::block_device_read(dev_t node, char* buf, size_t buf_size, size_t offset, size_t n)
 {
-    if (node == fs::NODE_INVALID)
-        return -EINVAL;
-
     auto iter = blkdevs.find(node);
     if (!iter || !iter->second.read)
         return -EINVAL;
@@ -897,9 +897,6 @@ ssize_t fs::block_device_read(dev_t node, char* buf, size_t buf_size, size_t off
 
 ssize_t fs::block_device_write(dev_t node, const char* buf, size_t offset, size_t n)
 {
-    if (node == fs::NODE_INVALID)
-        return -EINVAL;
-
     auto iter = blkdevs.find(node);
     if (!iter || !iter->second.write)
         return -EINVAL;
@@ -909,9 +906,6 @@ ssize_t fs::block_device_write(dev_t node, const char* buf, size_t offset, size_
 
 ssize_t fs::char_device_read(dev_t node, char* buf, size_t buf_size, size_t n)
 {
-    if (node == fs::NODE_INVALID)
-        return -EINVAL;
-
     auto iter = chrdevs.find(node);
     if (!iter || !iter->second.read)
         return -EINVAL;
@@ -921,9 +915,6 @@ ssize_t fs::char_device_read(dev_t node, char* buf, size_t buf_size, size_t n)
 
 ssize_t fs::char_device_write(dev_t node, const char* buf, size_t n)
 {
-    if (node == fs::NODE_INVALID)
-        return -EINVAL;
-
     auto iter = chrdevs.find(node);
     if (!iter || !iter->second.read)
         return -EINVAL;