Selaa lähdekoodia

Kernel/DevFS: Use KString for DevFSDeviceInode::m_name

Andreas Kling 4 vuotta sitten
vanhempi
commit
a3f58a5003
2 muutettua tiedostoa jossa 11 lisäystä ja 9 poistoa
  1. 9 6
      Kernel/FileSystem/DevFS.cpp
  2. 2 3
      Kernel/FileSystem/DevFS.h

+ 9 - 6
Kernel/FileSystem/DevFS.cpp

@@ -30,8 +30,11 @@ DevFS::DevFS()
 
 void DevFS::notify_new_device(Device& device)
 {
+    auto name = KString::try_create(device.device_name());
+    VERIFY(name);
+
     Locker locker(m_lock);
-    auto new_device_inode = adopt_ref(*new DevFSDeviceInode(*this, device));
+    auto new_device_inode = adopt_ref(*new DevFSDeviceInode(*this, device, name.release_nonnull()));
     m_nodes.append(new_device_inode);
     m_root_inode->m_devices.append(new_device_inode);
 }
@@ -335,14 +338,17 @@ KResultOr<size_t> DevFSRootDirectoryInode::directory_entry_count() const
     return m_devices.size() + DevFSDirectoryInode::directory_entry_count().value();
 }
 
-DevFSDeviceInode::DevFSDeviceInode(DevFS& fs, const Device& device)
+DevFSDeviceInode::DevFSDeviceInode(DevFS& fs, Device const& device, NonnullOwnPtr<KString> name)
     : DevFSInode(fs)
     , m_attached_device(device)
+    , m_name(move(name))
 {
 }
+
 DevFSDeviceInode::~DevFSDeviceInode()
 {
 }
+
 KResult DevFSDeviceInode::chown(uid_t uid, gid_t gid)
 {
     Locker locker(m_inode_lock);
@@ -353,10 +359,7 @@ KResult DevFSDeviceInode::chown(uid_t uid, gid_t gid)
 
 StringView DevFSDeviceInode::name() const
 {
-    Locker locker(m_inode_lock);
-    if (m_cached_name.is_null() || m_cached_name.is_empty())
-        const_cast<DevFSDeviceInode&>(*this).m_cached_name = m_attached_device->device_name();
-    return m_cached_name;
+    return m_name->view();
 }
 
 KResultOr<size_t> DevFSDeviceInode::read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, FileDescription* description) const

+ 2 - 3
Kernel/FileSystem/DevFS.h

@@ -73,8 +73,7 @@ public:
     virtual ~DevFSDeviceInode() override;
 
 private:
-    String determine_name() const;
-    DevFSDeviceInode(DevFS&, const Device&);
+    DevFSDeviceInode(DevFS&, Device const&, NonnullOwnPtr<KString> name);
     // ^Inode
     virtual KResultOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer& buffer, FileDescription*) const override;
     virtual InodeMetadata metadata() const override;
@@ -82,7 +81,7 @@ private:
     virtual KResult chown(uid_t, gid_t) override;
 
     NonnullRefPtr<Device> m_attached_device;
-    String m_cached_name;
+    NonnullOwnPtr<KString> m_name;
 
     uid_t m_uid { 0 };
     gid_t m_gid { 0 };