summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>1995-10-19 20:46:01 +0000
committerMiles Bader <miles@gnu.org>1995-10-19 20:46:01 +0000
commit9adb7010ece9af11a1c3a78c52da91be18c4f1a2 (patch)
tree514222c46c19b73fdb85c755262ce6cb87779382
parent5e0b01fc74a775e56a73094a8077358677040e83 (diff)
(struct user_pager_info): Add max_prot field.
(struct rwlock): Structure deleted. (rwlock_init, rwlock_reader_unlock, rwlock_reader_lock, rwlock_writer_lock, rwlock_writer_unlock): Functions deleted. (zeroblock, sblock, csum): Declare extern. (flush_node_pager, flush_pokes): New declarations.
-rw-r--r--ufs/ufs.h88
1 files changed, 6 insertions, 82 deletions
diff --git a/ufs/ufs.h b/ufs/ufs.h
index d0000e34..8771c372 100644
--- a/ufs/ufs.h
+++ b/ufs/ufs.h
@@ -32,16 +32,6 @@
/* #undef DONT_CACHE_MEMORY_OBJECTS */
-/* Simple reader/writer lock. */
-struct rwlock
-{
- struct mutex master;
- struct condition wakeup;
- int readers;
- int writers_waiting;
- int readers_waiting;
-};
-
struct disknode
{
ino_t number;
@@ -60,23 +50,6 @@ struct disknode
struct user_pager_info *fileinfo;
};
-/* Get a reader lock on reader-writer lock LOCK for disknode DN */
-extern inline void
-rwlock_reader_lock (struct rwlock *lock)
-{
- mutex_lock (&lock->master);
- if (lock->readers == -1 || lock->writers_waiting)
- {
- lock->readers_waiting++;
- do
- condition_wait (&lock->wakeup, &lock->master);
- while (lock->readers == -1 || lock->writers_waiting);
- lock->readers_waiting--;
- }
- lock->readers++;
- mutex_unlock (&lock->master);
-}
-
/* Identifies a particular block and where it's found
when interpreting indirect block structure. */
struct iblock_spec
@@ -96,58 +69,6 @@ struct dirty_indir
struct dirty_indir *next;
};
-/* Get a writer lock on reader-writer lock LOCK for disknode DN */
-extern inline void
-rwlock_writer_lock (struct rwlock *lock)
-{
- mutex_lock (&lock->master);
- if (lock->readers)
- {
- lock->writers_waiting++;
- do
- condition_wait (&lock->wakeup, &lock->master);
- while (lock->readers);
- lock->writers_waiting--;
- }
- lock->readers = -1;
- mutex_unlock (&lock->master);
-}
-
-/* Release a reader lock on reader-writer lock LOCK for disknode DN */
-extern inline void
-rwlock_reader_unlock (struct rwlock *lock)
-{
- mutex_lock (&lock->master);
- assert (lock->readers);
- lock->readers--;
- if (lock->readers_waiting || lock->writers_waiting)
- condition_broadcast (&lock->wakeup);
- mutex_unlock (&lock->master);
-}
-
-/* Release a writer lock on reader-writer lock LOCK for disknode DN */
-extern inline void
-rwlock_writer_unlock (struct rwlock *lock)
-{
- mutex_lock (&lock->master);
- assert (lock->readers == -1);
- lock->readers = 0;
- if (lock->readers_waiting || lock->writers_waiting)
- condition_broadcast (&lock->wakeup);
- mutex_unlock (&lock->master);
-}
-
-/* Initialize reader-writer lock LOCK */
-extern inline void
-rwlock_init (struct rwlock *lock)
-{
- mutex_init (&lock->master);
- condition_init (&lock->wakeup);
- lock->readers = 0;
- lock->readers_waiting = 0;
- lock->writers_waiting = 0;
-}
-
struct user_pager_info
{
struct node *np;
@@ -157,15 +78,16 @@ struct user_pager_info
FILE_DATA,
} type;
struct pager *p;
+ vm_prot_t max_prot;
};
struct user_pager_info *diskpager;
mach_port_t diskpagerport;
-vm_address_t zeroblock;
+extern vm_address_t zeroblock;
-struct fs *sblock;
-struct csum *csum;
+extern struct fs *sblock;
+extern struct csum *csum;
int sblock_dirty;
int csum_dirty;
@@ -278,6 +200,7 @@ void sin_unmap (struct node *);
void din_unmap (struct node *);
void drop_pager_softrefs (struct node *);
void allow_pager_softrefs (struct node *);
+void flush_node_pager (struct node *);
/* From subr.c: */
void ffs_fragacct (struct fs *, int, long [], int);
@@ -290,3 +213,4 @@ int scanc (u_int, u_char *, u_char [], int);
/* From pokeloc.c: */
void record_poke (void *, vm_size_t);
void sync_disk (int);
+void flush_pokes ();