From bfd1129c2833094cee2952a019f594a0a0bb599c Mon Sep 17 00:00:00 2001
From: Tom Larsson <tomla035@student.liu.se>
Date: Wed, 1 Apr 2020 02:09:29 +0200
Subject: [PATCH] updates

---
 src/filesys/filesys.c  | 14 ++++++++------
 src/filesys/free-map.c | 25 ++++++++++++-------------
 src/filesys/inode.c    | 35 ++++++++++++++++-------------------
 3 files changed, 36 insertions(+), 38 deletions(-)

diff --git a/src/filesys/filesys.c b/src/filesys/filesys.c
index a0d5b28..4af53fc 100755
--- a/src/filesys/filesys.c
+++ b/src/filesys/filesys.c
@@ -2,12 +2,12 @@
 #include <debug.h>
 #include <stdio.h>
 #include <string.h>
-#include "filesys/file.h"
-#include "filesys/free-map.h"
-#include "filesys/inode.h"
-#include "filesys/directory.h"
-#include "devices/disk.h"
-#include "threads/synch.h"
+#include "../filesys/file.h"
+#include "../filesys/free-map.h"
+#include "../filesys/inode.h"
+#include "../filesys/directory.h"
+#include "../devices/disk.h"
+#include "../threads/synch.h"
 
 /* The disk that contains the file system. */
 struct disk *filesys_disk;
@@ -75,6 +75,7 @@ struct file *
 filesys_open (const char *name)
 {
   lock_acquire(&lock_filesys);
+
   struct dir *dir = dir_open_root ();
   struct inode *inode = NULL;
 
@@ -83,6 +84,7 @@ filesys_open (const char *name)
   dir_close (dir);
 
   struct file *file = file_open(inode);
+
   lock_release(&lock_filesys);
   return file;
 }
diff --git a/src/filesys/free-map.c b/src/filesys/free-map.c
index e0a5c43..27bd433 100755
--- a/src/filesys/free-map.c
+++ b/src/filesys/free-map.c
@@ -8,7 +8,7 @@
 
 static struct file *free_map_file;   /* Free map file. */
 static struct bitmap *free_map;      /* Free map, one bit per disk sector. */
-struct lock map_lock;
+struct lock lock;
 /* Initializes the free map. */
 void
 free_map_init (void)
@@ -18,7 +18,7 @@ free_map_init (void)
     PANIC ("bitmap creation failed--disk is too large");
   bitmap_mark (free_map, FREE_MAP_SECTOR);
   bitmap_mark (free_map, ROOT_DIR_SECTOR);
-  lock_init(&map_lock);
+  lock_init(&lock);
 }
 
 /* Allocates CNT consecutive sectors from the free map and stores
@@ -28,7 +28,8 @@ free_map_init (void)
 bool
 free_map_allocate (size_t cnt, disk_sector_t *sectorp)
 {
-  lock_acquire(&map_lock);
+  lock_acquire(&lock);
+
   disk_sector_t sector = bitmap_scan_and_flip (free_map, 0, cnt, false);
   if (sector != BITMAP_ERROR
       && free_map_file != NULL
@@ -37,17 +38,13 @@ free_map_allocate (size_t cnt, disk_sector_t *sectorp)
       bitmap_set_multiple (free_map, sector, cnt, false);
       sector = BITMAP_ERROR;
     }
-  bool sector_error = sector == BITMAP_ERROR;
-    if (!sector_error)
+
+    if (sector != BITMAP_ERROR)
       *sectorp = sector;
 
-  lock_release(&map_lock);
-  return !sector_error;
+  lock_release(&lock);
+  return (sector != BITMAP_ERROR);
 
-  /*if (sector != BITMAP_ERROR)
-    *sectorp = sector;
-  lock_release(&map_lock);
-  return sector != BITMAP_ERROR;*/
 }
 
 /* Makes CNT sectors starting at SECTOR available for use. */
@@ -55,10 +52,12 @@ void
 free_map_release (disk_sector_t sector, size_t cnt)
 {
   ASSERT (bitmap_all (free_map, sector, cnt));
-  lock_acquire(&map_lock);
+  lock_acquire(&lock);
+
   bitmap_set_multiple (free_map, sector, cnt, false);
   bitmap_write (free_map, free_map_file);
-  lock_release(&map_lock);
+
+  lock_release(&lock);
 }
 
 /* Opens the free map file and reads it from disk. */
diff --git a/src/filesys/inode.c b/src/filesys/inode.c
index 53c9f8a..97e61a1 100755
--- a/src/filesys/inode.c
+++ b/src/filesys/inode.c
@@ -41,10 +41,9 @@ struct inode
 
     //labb6
     int read;                           // Holds the amount of readers/
+    struct semaphore sema_file_access;  // Semaphore to handle the access to resources
     struct lock read_count_lock;        // lock to handle the access to /*read*/
     struct lock file_queue_lock;        // lock queue to prevent starvation
-    struct semaphore sema_file_access;  // Semaphore to handle the access to resources
-
   };
 
 /* Returns the disk sector that contains byte offset POS within
@@ -64,15 +63,15 @@ byte_to_sector (const struct inode *inode, off_t pos)
 /* List of open inodes, so that opening a single inode twice
    returns the same `struct inode'. */
 static struct list open_inodes;
-// Lock to protect the list of open inodes
-struct lock lock;
+
+struct lock lock_open;
 
 /* Initializes the inode module. */
 void
 inode_init (void)
 {
   list_init (&open_inodes);
-  lock_init(&lock);
+  lock_init(&lock_open);
 }
 
 /* Initializes an inode with LENGTH bytes of data and
@@ -125,7 +124,7 @@ inode_open (disk_sector_t sector)
   struct list_elem *e;
   struct inode *inode;
 
-  lock_acquire(&lock);
+  lock_acquire(&lock_open);
 
   /* Check whether this inode is already open. */
   for (e = list_begin (&open_inodes); e != list_end (&open_inodes);
@@ -135,12 +134,14 @@ inode_open (disk_sector_t sector)
       if (inode->sector == sector)
         {
           if (inode->removed) {
-            lock_release(&lock);
+            lock_release(&lock_open);
+
             return NULL;
           }
+          lock_release(&lock_open);
 
-          lock_release(&lock);
           inode_reopen (inode);
+
           return inode;
         }
     }
@@ -148,7 +149,7 @@ inode_open (disk_sector_t sector)
   /* Allocate memory. */
   inode = malloc (sizeof *inode);
   if (inode == NULL){
-    lock_release(&lock);
+    lock_release(&lock_open);
     return NULL;
   }
 
@@ -160,14 +161,13 @@ inode_open (disk_sector_t sector)
   inode->removed = false;
 
   inode->read = 0;
+  sema_init(&inode->sema_file_access, 1);
   lock_init(&inode->read_count_lock);
   lock_init(&inode->file_queue_lock);
-  sema_init(&inode->sema_file_access, 1);
-
 
 
   disk_read (filesys_disk, inode->sector, &inode->data);
-  lock_release(&lock);
+  lock_release(&lock_open);
   return inode;
 }
 
@@ -175,13 +175,13 @@ inode_open (disk_sector_t sector)
 struct inode *
 inode_reopen (struct inode *inode)
 {
-  lock_acquire(&lock);
+  lock_acquire(&lock_open);
   if (inode != NULL)
     {
       ASSERT(inode->open_cnt != 0);
       inode->open_cnt++;
     }
-  lock_release(&lock);
+  lock_release(&lock_open);
   return inode;
 }
 
@@ -203,7 +203,7 @@ inode_close (struct inode *inode)
   if (inode == NULL)
     return;
 
-  lock_acquire(&lock);
+  lock_acquire(&lock_open);
 
   /* Release resources if this was the last opener. */
   if (--inode->open_cnt == 0)
@@ -222,7 +222,7 @@ inode_close (struct inode *inode)
       free (inode);
     }
 
-  lock_release(&lock);
+  lock_release(&lock_open);
 }
 
 /* Marks INODE to be deleted when it is closed by the last caller who
@@ -297,7 +297,6 @@ inode_read_at (struct inode *inode, void *buffer_, off_t size, off_t offset)
       bytes_read += chunk_size;
     }
   free (bounce);
-
   lock_acquire(&inode->read_count_lock);
   inode->read--;
   if (inode->read == 0){
@@ -322,9 +321,7 @@ inode_write_at (struct inode *inode, const void *buffer_, off_t size,
   uint8_t *bounce = NULL;
 
   lock_acquire(&inode->file_queue_lock);
-
   sema_down(&inode->sema_file_access);
-
   lock_release(&inode->file_queue_lock);
 
   if (inode->deny_write_cnt) {
-- 
GitLab