#include "filesys/free-map.h"
#include "filesys/inode.h"
#include "filesys/directory.h"
-#include "devices/disk.h"
-/* The disk that contains the filesystem. */
-struct disk *filesys_disk;
+/* Partition that contains the file system. */
+struct block *fs_device;
static void do_format (void);
-/* Initializes the filesystem module.
- If FORMAT is true, reformats the filesystem. */
+/* Initializes the file system module.
+ If FORMAT is true, reformats the file system. */
void
filesys_init (bool format)
{
- filesys_disk = disk_get (0, 1);
- if (filesys_disk == NULL)
- PANIC ("hd0:1 (hdb) not present, filesystem initialization failed");
+ fs_device = block_get_role (BLOCK_FILESYS);
+ if (fs_device == NULL)
+ PANIC ("No file system device found, can't initialize file system.");
inode_init ();
free_map_init ();
free_map_open ();
}
-/* Shuts down the filesystem module, writing any unwritten data
+/* Shuts down the file system module, writing any unwritten data
to disk. */
void
filesys_done (void)
bool
filesys_create (const char *name, off_t initial_size)
{
- disk_sector_t inode_sector = 0;
+ block_sector_t inode_sector = 0;
struct dir *dir = dir_open_root ();
bool success = (dir != NULL
&& free_map_allocate (1, &inode_sector)
return success;
}
-
-/* Prints a list of files in the filesystem to the system
- console.
- Returns true if successful, false on failure,
- which occurs only if an internal memory allocation fails. */
-bool
-filesys_list (void)
-{
- struct dir *dir = dir_open_root ();
- if (dir != NULL)
- {
- dir_list (dir);
- dir_close (dir);
- return true;
- }
- else
- return false;
-}
-\f
-static void must_succeed_function (int, bool) NO_INLINE;
-#define MUST_SUCCEED(EXPR) must_succeed_function (__LINE__, EXPR)
-
-/* Performs basic sanity checks on the filesystem.
- The filesystem should not contain a file named `foo' when
- called. */
-void
-filesys_self_test (void)
-{
- static const char s[] = "This is a test string.";
- static const char zeros[sizeof s] = {0};
- struct file *file;
- char s2[sizeof s];
- int i;
-
- filesys_remove ("foo");
- for (i = 0; i < 2; i++)
- {
- /* Create file and check that it contains zeros
- throughout the created length. */
- MUST_SUCCEED (filesys_create ("foo", sizeof s));
- MUST_SUCCEED ((file = filesys_open ("foo")) != NULL);
- MUST_SUCCEED (file_read (file, s2, sizeof s2) == sizeof s2);
- MUST_SUCCEED (memcmp (s2, zeros, sizeof s) == 0);
- MUST_SUCCEED (file_tell (file) == sizeof s);
- MUST_SUCCEED (file_length (file) == sizeof s);
- file_close (file);
-
- /* Reopen file and write to it. */
- MUST_SUCCEED ((file = filesys_open ("foo")) != NULL);
- MUST_SUCCEED (file_write (file, s, sizeof s) == sizeof s);
- MUST_SUCCEED (file_tell (file) == sizeof s);
- MUST_SUCCEED (file_length (file) == sizeof s);
- file_close (file);
-
- /* Reopen file and verify that it reads back correctly.
- Delete file while open to check proper semantics. */
- MUST_SUCCEED ((file = filesys_open ("foo")) != NULL);
- MUST_SUCCEED (filesys_remove ("foo"));
- MUST_SUCCEED (filesys_open ("foo") == NULL);
- MUST_SUCCEED (file_read (file, s2, sizeof s) == sizeof s);
- MUST_SUCCEED (memcmp (s, s2, sizeof s) == 0);
- MUST_SUCCEED (file_tell (file) == sizeof s);
- MUST_SUCCEED (file_length (file) == sizeof s);
- file_close (file);
- }
-
- printf ("filesys: self test ok\n");
-}
-
-/* If SUCCESS is false, panics with an error complaining about
- LINE_NO. */
-static void
-must_succeed_function (int line_no, bool success)
-{
- if (!success)
- PANIC ("filesys_self_test: operation failed on line %d", line_no);
-}
\f
-/* Formats the filesystem. */
+/* Formats the file system. */
static void
do_format (void)
{
- printf ("Formatting filesystem...");
+ printf ("Formatting file system...");
free_map_create ();
if (!dir_create (ROOT_DIR_SECTOR, 16))
PANIC ("root directory creation failed");