diff --git a/src/core/file_sys/fs_filesystem.h b/src/core/file_sys/fs_filesystem.h
index 598b59a74..329b5aca5 100644
--- a/src/core/file_sys/fs_filesystem.h
+++ b/src/core/file_sys/fs_filesystem.h
@@ -38,4 +38,29 @@ enum class CreateOption : u8 {
     BigFile = (1 << 0),
 };
 
+struct FileSystemAttribute {
+    u8 dir_entry_name_length_max_defined;
+    u8 file_entry_name_length_max_defined;
+    u8 dir_path_name_length_max_defined;
+    u8 file_path_name_length_max_defined;
+    INSERT_PADDING_BYTES_NOINIT(0x5);
+    u8 utf16_dir_entry_name_length_max_defined;
+    u8 utf16_file_entry_name_length_max_defined;
+    u8 utf16_dir_path_name_length_max_defined;
+    u8 utf16_file_path_name_length_max_defined;
+    INSERT_PADDING_BYTES_NOINIT(0x18);
+    s32 dir_entry_name_length_max;
+    s32 file_entry_name_length_max;
+    s32 dir_path_name_length_max;
+    s32 file_path_name_length_max;
+    INSERT_PADDING_WORDS_NOINIT(0x5);
+    s32 utf16_dir_entry_name_length_max;
+    s32 utf16_file_entry_name_length_max;
+    s32 utf16_dir_path_name_length_max;
+    s32 utf16_file_path_name_length_max;
+    INSERT_PADDING_WORDS_NOINIT(0x18);
+    INSERT_PADDING_WORDS_NOINIT(0x1);
+};
+static_assert(sizeof(FileSystemAttribute) == 0xC0, "FileSystemAttribute has incorrect size");
+
 } // namespace FileSys
diff --git a/src/core/file_sys/fs_path_utility.h b/src/core/file_sys/fs_path_utility.h
index 51418ee16..cdfd8c772 100644
--- a/src/core/file_sys/fs_path_utility.h
+++ b/src/core/file_sys/fs_path_utility.h
@@ -91,12 +91,8 @@ public:
     }
 
 #define DECLARE_PATH_FLAG_HANDLER(__WHICH__)                                                       \
-    constexpr bool Is##__WHICH__##Allowed() const {                                                \
-        return (m_value & __WHICH__##Flag) != 0;                                                   \
-    }                                                                                              \
-    constexpr void Allow##__WHICH__() {                                                            \
-        m_value |= __WHICH__##Flag;                                                                \
-    }
+    constexpr bool Is##__WHICH__##Allowed() const { return (m_value & __WHICH__##Flag) != 0; }     \
+    constexpr void Allow##__WHICH__() { m_value |= __WHICH__##Flag; }
 
     DECLARE_PATH_FLAG_HANDLER(WindowsPath)
     DECLARE_PATH_FLAG_HANDLER(RelativePath)
diff --git a/src/core/file_sys/fsa/fs_i_directory.h b/src/core/file_sys/fsa/fs_i_directory.h
index fc0407d01..c8e895eab 100644
--- a/src/core/file_sys/fsa/fs_i_directory.h
+++ b/src/core/file_sys/fsa/fs_i_directory.h
@@ -56,7 +56,7 @@ private:
         next_entry_index += actual_entries;
         *out_count = actual_entries;
 
-        std::memcpy(out_entries, entries.data(), range_size);
+        std::memcpy(out_entries, begin, range_size);
 
         R_SUCCEED();
     }
diff --git a/src/core/file_sys/fsa/fs_i_file.h b/src/core/file_sys/fsa/fs_i_file.h
index 8fdd71c80..1188ae8ca 100644
--- a/src/core/file_sys/fsa/fs_i_file.h
+++ b/src/core/file_sys/fsa/fs_i_file.h
@@ -125,10 +125,8 @@ protected:
 
 private:
     Result DoRead(size_t* out, s64 offset, void* buffer, size_t size, const ReadOption& option) {
-        std::vector<u8> output = backend->ReadBytes(size, offset);
-
-        *out = output.size();
-        std::memcpy(buffer, output.data(), size);
+        const auto read_size = backend->Read(static_cast<u8*>(buffer), size, offset);
+        *out = read_size;
 
         R_SUCCEED();
     }
diff --git a/src/core/hle/service/filesystem/fsp/fs_i_filesystem.cpp b/src/core/hle/service/filesystem/fsp/fs_i_filesystem.cpp
index 86dd5b7e9..d881e144d 100644
--- a/src/core/hle/service/filesystem/fsp/fs_i_filesystem.cpp
+++ b/src/core/hle/service/filesystem/fsp/fs_i_filesystem.cpp
@@ -157,10 +157,10 @@ Result IFileSystem::GetFileTimeStampRaw(
     R_SUCCEED();
 }
 
-Result IFileSystem::GetFileSystemAttribute(Out<FileSystemAttribute> out_attribute) {
+Result IFileSystem::GetFileSystemAttribute(Out<FileSys::FileSystemAttribute> out_attribute) {
     LOG_WARNING(Service_FS, "(STUBBED) called");
 
-    FileSystemAttribute savedata_attribute{};
+    FileSys::FileSystemAttribute savedata_attribute{};
     savedata_attribute.dir_entry_name_length_max_defined = true;
     savedata_attribute.file_entry_name_length_max_defined = true;
     savedata_attribute.dir_entry_name_length_max = 0x40;
diff --git a/src/core/hle/service/filesystem/fsp/fs_i_filesystem.h b/src/core/hle/service/filesystem/fsp/fs_i_filesystem.h
index 230ab8d71..113369203 100644
--- a/src/core/hle/service/filesystem/fsp/fs_i_filesystem.h
+++ b/src/core/hle/service/filesystem/fsp/fs_i_filesystem.h
@@ -4,6 +4,7 @@
 #pragma once
 
 #include "common/common_funcs.h"
+#include "core/file_sys/fs_filesystem.h"
 #include "core/file_sys/fsa/fs_i_filesystem.h"
 #include "core/file_sys/vfs/vfs.h"
 #include "core/hle/service/cmif_types.h"
@@ -24,31 +25,6 @@ class IFileSystem final : public ServiceFramework<IFileSystem> {
 public:
     explicit IFileSystem(Core::System& system_, FileSys::VirtualDir dir_, SizeGetter size_getter_);
 
-    struct FileSystemAttribute {
-        u8 dir_entry_name_length_max_defined;
-        u8 file_entry_name_length_max_defined;
-        u8 dir_path_name_length_max_defined;
-        u8 file_path_name_length_max_defined;
-        INSERT_PADDING_BYTES_NOINIT(0x5);
-        u8 utf16_dir_entry_name_length_max_defined;
-        u8 utf16_file_entry_name_length_max_defined;
-        u8 utf16_dir_path_name_length_max_defined;
-        u8 utf16_file_path_name_length_max_defined;
-        INSERT_PADDING_BYTES_NOINIT(0x18);
-        s32 dir_entry_name_length_max;
-        s32 file_entry_name_length_max;
-        s32 dir_path_name_length_max;
-        s32 file_path_name_length_max;
-        INSERT_PADDING_WORDS_NOINIT(0x5);
-        s32 utf16_dir_entry_name_length_max;
-        s32 utf16_file_entry_name_length_max;
-        s32 utf16_dir_path_name_length_max;
-        s32 utf16_file_path_name_length_max;
-        INSERT_PADDING_WORDS_NOINIT(0x18);
-        INSERT_PADDING_WORDS_NOINIT(0x1);
-    };
-    static_assert(sizeof(FileSystemAttribute) == 0xC0, "FileSystemAttribute has incorrect size");
-
     Result CreateFile(const InLargeData<FileSys::Sf::Path, BufferAttr_HipcPointer> path, s32 option,
                       s64 size);
     Result DeleteFile(const InLargeData<FileSys::Sf::Path, BufferAttr_HipcPointer> path);
@@ -74,7 +50,7 @@ public:
                              const InLargeData<FileSys::Sf::Path, BufferAttr_HipcPointer> path);
     Result GetFileTimeStampRaw(Out<FileSys::FileTimeStampRaw> out_timestamp,
                                const InLargeData<FileSys::Sf::Path, BufferAttr_HipcPointer> path);
-    Result GetFileSystemAttribute(Out<FileSystemAttribute> out_attribute);
+    Result GetFileSystemAttribute(Out<FileSys::FileSystemAttribute> out_attribute);
 
 private:
     std::unique_ptr<FileSys::Fsa::IFileSystem> backend;