summaryrefslogtreecommitdiff
path: root/storeio
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2012-09-04 00:33:09 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2012-11-27 22:58:15 +0100
commit1de0643c9218db536f5b2e294bbfa653c77438e4 (patch)
treef944e1b023cf0353ca559d22e1f7b701bac04c97 /storeio
parent7648503cd894549874ff13f7ed94a4708cf50f0d (diff)
Switch from cthreads to pthreads
Makefiles, headers, types, macros and function calls are renamed where appropriate. Most of this work was done by Barry deFreese and Thomas DiModica. * auth/Makefile: Switch from cthreads to pthreads. * auth/auth.c: Likewise. * boot/Makefile: Likewise. * boot/boot.c: Likewise. * boot/ux.c: Likewise. * console-client/Makefile: Likewise. * console-client/console.c: Likewise. * console-client/driver.c: Likewise. * console-client/driver.h: Likewise. * console-client/generic-speaker.c: Likewise. * console-client/kbd-repeat.c: Likewise. * console-client/ncursesw.c: Likewise. * console-client/pc-kbd.c: Likewise. * console-client/pc-mouse.c: Likewise. * console-client/timer.c: Likewise. * console-client/trans.c: Likewise. * console-client/vga.c: Likewise. * console/Makefile: Likewise. * console/console.c: Likewise. * console/display.c: Likewise. * console/input.c: Likewise. * console/pager.c: Likewise. * defpager/backing.c: Likewise. * exec/Makefile: Likewise. * exec/exec.c: Likewise. * exec/hashexec.c: Likewise. * exec/priv.h: Likewise. * ext2fs/Makefile: Likewise. * ext2fs/balloc.c: Likewise. * ext2fs/dir.c: Likewise. * ext2fs/ext2fs.c: Likewise. * ext2fs/ext2fs.h: Likewise. * ext2fs/ialloc.c: Likewise. * ext2fs/inode.c: Likewise. * ext2fs/msg.c: Likewise. * ext2fs/pager.c: Likewise. * ext2fs/pokel.c: Likewise. * ext2fs/storeinfo.c: Likewise. * ext2fs/truncate.c: Likewise. * fatfs/Makefile: Likewise. * fatfs/dir.c: Likewise. * fatfs/fat.c: Likewise. * fatfs/fatfs.h: Likewise. * fatfs/inode.c: Likewise. * fatfs/main.c: Likewise. * fatfs/pager.c: Likewise. * fatfs/virt-inode.c: Likewise. * ftpfs/Makefile: Likewise. * ftpfs/ccache.c: Likewise. * ftpfs/ccache.h: Likewise. * ftpfs/conn.c: Likewise. * ftpfs/dir.c: Likewise. * ftpfs/fs.c: Likewise. * ftpfs/ftpfs.c: Likewise. * ftpfs/ftpfs.h: Likewise. * ftpfs/ncache.c: Likewise. * ftpfs/netfs.c: Likewise. * ftpfs/node.c: Likewise. * hostmux/Makefile: Likewise. * hostmux/hostmux.h: Likewise. * hostmux/mux.c: Likewise. * hostmux/node.c: Likewise. * hostmux/stubs.c: Likewise. * hurd/shared.h: Likewise. * isofs/Makefile: Likewise. * isofs/inode.c: Likewise. * isofs/lookup.c: Likewise. * isofs/main.c: Likewise. * isofs/pager.c: Likewise. * libcons/Makefile: Likewise. * libcons/cons-switch.c: Likewise. * libcons/cons.h: Likewise. * libcons/dir-changed.c: Likewise. * libcons/file-changed.c: Likewise. * libcons/init-init.c: Likewise. * libcons/vcons-close.c: Likewise. * libcons/vcons-input.c: Likewise. * libcons/vcons-move-mouse.c: Likewise. * libcons/vcons-open.c: Likewise. * libcons/vcons-scrollback.c: Likewise. * libdiskfs/Makefile: Likewise. * libdiskfs/boot-start.c: Likewise. * libdiskfs/dead-name.c: Likewise. * libdiskfs/dir-chg.c: Likewise. * libdiskfs/dir-link.c: Likewise. * libdiskfs/dir-lookup.c: Likewise. * libdiskfs/dir-mkdir.c: Likewise. * libdiskfs/dir-mkfile.c: Likewise. * libdiskfs/dir-readdir.c: Likewise. * libdiskfs/dir-rename.c: Likewise. * libdiskfs/dir-renamed.c: Likewise. * libdiskfs/dir-rmdir.c: Likewise. * libdiskfs/dir-unlink.c: Likewise. * libdiskfs/disk-pager.c: Likewise. * libdiskfs/diskfs-pager.h: Likewise. * libdiskfs/diskfs.h: Likewise. * libdiskfs/file-access.c: Likewise. * libdiskfs/file-chg.c: Likewise. * libdiskfs/file-exec.c: Likewise. * libdiskfs/file-get-fs-opts.c: Likewise. * libdiskfs/file-get-trans.c: Likewise. * libdiskfs/file-get-transcntl.c: Likewise. * libdiskfs/file-getcontrol.c: Likewise. * libdiskfs/file-getfh.c: Likewise. * libdiskfs/file-lock-stat.c: Likewise. * libdiskfs/file-lock.c: Likewise. * libdiskfs/file-reparent.c: Likewise. * libdiskfs/file-set-trans.c: Likewise. * libdiskfs/file-sync.c: Likewise. * libdiskfs/file-syncfs.c: Likewise. * libdiskfs/fsys-getroot.c: Likewise. * libdiskfs/fsys-options.c: Likewise. * libdiskfs/fsys-syncfs.c: Likewise. * libdiskfs/ifsock.c: Likewise. * libdiskfs/init-first.c: Likewise. * libdiskfs/init-init.c: Likewise. * libdiskfs/init-startup.c: Likewise. * libdiskfs/io-duplicate.c: Likewise. * libdiskfs/io-get-conch.c: Likewise. * libdiskfs/io-identity.c: Likewise. * libdiskfs/io-map-cntl.c: Likewise. * libdiskfs/io-map.c: Likewise. * libdiskfs/io-modes-get.c: Likewise. * libdiskfs/io-modes-off.c: Likewise. * libdiskfs/io-modes-on.c: Likewise. * libdiskfs/io-modes-set.c: Likewise. * libdiskfs/io-owner-get.c: Likewise. * libdiskfs/io-owner-mod.c: Likewise. * libdiskfs/io-prenotify.c: Likewise. * libdiskfs/io-read.c: Likewise. * libdiskfs/io-readable.c: Likewise. * libdiskfs/io-reauthenticate.c: Likewise. * libdiskfs/io-rel-conch.c: Likewise. * libdiskfs/io-restrict-auth.c: Likewise. * libdiskfs/io-revoke.c: Likewise. * libdiskfs/io-seek.c: Likewise. * libdiskfs/io-sigio.c: Likewise. * libdiskfs/io-stat.c: Likewise. * libdiskfs/io-write.c: Likewise. * libdiskfs/lookup.c: Likewise. * libdiskfs/name-cache.c: Likewise. * libdiskfs/node-drop.c: Likewise. * libdiskfs/node-make.c: Likewise. * libdiskfs/node-nput.c: Likewise. * libdiskfs/node-nputl.c: Likewise. * libdiskfs/node-nref.c: Likewise. * libdiskfs/node-nrefl.c: Likewise. * libdiskfs/node-nrele.c: Likewise. * libdiskfs/node-nrelel.c: Likewise. * libdiskfs/peropen-rele.c: Likewise. * libdiskfs/priv.h: Likewise. * libdiskfs/shutdown.c: Likewise. * libdiskfs/sync-interval.c: Likewise. * libfshelp/Makefile: Likewise. * libfshelp/fetch-root.c: Likewise. * libfshelp/fshelp.h: Likewise. * libfshelp/get-identity.c: Likewise. * libfshelp/lock-acquire.c: Likewise. * libfshelp/lock-init.c: Likewise. * libfshelp/locks.h: Likewise. * libfshelp/set-active.c: Likewise. * libfshelp/trans.h: Likewise. * libfshelp/transbox-init.c: Likewise. * libiohelp/Makefile: Likewise. * libiohelp/get_conch.c: Likewise. * libiohelp/handle_io_release_conch.c: Likewise. * libiohelp/initialize_conch.c: Likewise. * libiohelp/iohelp.h: Likewise. * libiohelp/verify_user_conch.c: Likewise. * libnetfs/Makefile: Likewise. * libnetfs/dir-lookup.c: Likewise. * libnetfs/dir-mkdir.c: Likewise. * libnetfs/dir-mkfile.c: Likewise. * libnetfs/dir-readdir.c: Likewise. * libnetfs/dir-rmdir.c: Likewise. * libnetfs/dir-unlink.c: Likewise. * libnetfs/drop-node.c: Likewise. * libnetfs/file-chauthor.c: Likewise. * libnetfs/file-check-access.c: Likewise. * libnetfs/file-chflags.c: Likewise. * libnetfs/file-chmod.c: Likewise. * libnetfs/file-chown.c: Likewise. * libnetfs/file-exec.c: Likewise. * libnetfs/file-get-storage-info.c: Likewise. * libnetfs/file-get-translator.c: Likewise. * libnetfs/file-lock-stat.c: Likewise. * libnetfs/file-lock.c: Likewise. * libnetfs/file-reparent.c: Likewise. * libnetfs/file-set-size.c: Likewise. * libnetfs/file-set-translator.c: Likewise. * libnetfs/file-statfs.c: Likewise. * libnetfs/file-sync.c: Likewise. * libnetfs/file-syncfs.c: Likewise. * libnetfs/file-utimes.c: Likewise. * libnetfs/fsys-getroot.c: Likewise. * libnetfs/fsys-set-options.c: Likewise. * libnetfs/init-init.c: Likewise. * libnetfs/io-clear-some-openmodes.c: Likewise. * libnetfs/io-duplicate.c: Likewise. * libnetfs/io-get-openmodes.c: Likewise. * libnetfs/io-get-owner.c: Likewise. * libnetfs/io-identity.c: Likewise. * libnetfs/io-mod-owner.c: Likewise. * libnetfs/io-read.c: Likewise. * libnetfs/io-readable.c: Likewise. * libnetfs/io-reauthenticate.c: Likewise. * libnetfs/io-restrict-auth.c: Likewise. * libnetfs/io-revoke.c: Likewise. * libnetfs/io-seek.c: Likewise. * libnetfs/io-set-all-openmodes.c: Likewise. * libnetfs/io-set-some-openmodes.c: Likewise. * libnetfs/io-stat.c: Likewise. * libnetfs/io-write.c: Likewise. * libnetfs/make-node.c: Likewise. * libnetfs/netfs.h: Likewise. * libnetfs/nput.c: Likewise. * libnetfs/nref.c: Likewise. * libnetfs/nrele.c: Likewise. * libnetfs/release-peropen.c: Likewise. * libnetfs/shutdown.c: Likewise. * libpager/Makefile: Likewise. * libpager/chg-compl.c: Likewise. * libpager/clean.c: Likewise. * libpager/data-request.c: Likewise. * libpager/data-return.c: Likewise. * libpager/data-unlock.c: Likewise. * libpager/inhibit-term.c: Likewise. * libpager/lock-completed.c: Likewise. * libpager/lock-object.c: Likewise. * libpager/mark-error.c: Likewise. * libpager/no-senders.c: Likewise. * libpager/object-init.c: Likewise. * libpager/object-terminate.c: Likewise. * libpager/offer-page.c: Likewise. * libpager/pager-attr.c: Likewise. * libpager/pager-create.c: Likewise. * libpager/pager-shutdown.c: Likewise. * libpager/priv.h: Likewise. * libpager/seqnos.c: Likewise. * libpipe/Makefile: Likewise. * libpipe/pipe.c: Likewise. * libpipe/pipe.h: Likewise. * libports/Makefile: Likewise. * libports/begin-rpc.c: Likewise. * libports/bucket-iterate.c: Likewise. * libports/claim-right.c: Likewise. * libports/class-iterate.c: Likewise. * libports/complete-deallocate.c: Likewise. * libports/count-bucket.c: Likewise. * libports/count-class.c: Likewise. * libports/create-bucket.c: Likewise. * libports/create-internal.c: Likewise. * libports/destroy-right.c: Likewise. * libports/enable-bucket.c: Likewise. * libports/enable-class.c: Likewise. * libports/end-rpc.c: Likewise. * libports/get-right.c: Likewise. * libports/import-port.c: Likewise. * libports/inhibit-all-rpcs.c: Likewise. * libports/inhibit-bucket-rpcs.c: Likewise. * libports/inhibit-class-rpcs.c: Likewise. * libports/inhibit-port-rpcs.c: Likewise. * libports/init.c: Likewise. * libports/interrupt-notified-rpcs.c: Likewise. * libports/interrupt-on-notify.c: Likewise. * libports/interrupt-operation.c: Likewise. * libports/interrupt-rpcs.c: Likewise. * libports/interrupted.c: Likewise. * libports/lookup-port.c: Likewise. * libports/manage-multithread.c: Likewise. * libports/no-senders.c: Likewise. * libports/port-deref-weak.c: Likewise. * libports/port-deref.c: Likewise. * libports/port-ref-weak.c: Likewise. * libports/port-ref.c: Likewise. * libports/ports.h: Likewise. * libports/reallocate-from-external.c: Likewise. * libports/reallocate-port.c: Likewise. * libports/resume-all-rpcs.c: Likewise. * libports/resume-bucket-rpcs.c: Likewise. * libports/resume-class-rpcs.c: Likewise. * libports/resume-port-rpcs.c: Likewise. * libports/stubs.c: Likewise. * libports/transfer-right.c: Likewise. * libstore/Makefile: Likewise. * libstore/gunzip.c: Likewise. * libstore/part.c: Likewise. * libstore/unzipstore.c: Likewise. * libthreads/Makefile: Likewise. * libtreefs/dir-lookup.c: Likewise. * libtreefs/fsys-getroot.c: Likewise. * libtreefs/fsys-hooks.c: Likewise. * libtreefs/fsys.c: Likewise. * libtreefs/trans-help.c: Likewise. * libtreefs/trans-start.c: Likewise. * libtreefs/treefs.h: Likewise. * libtrivfs/cntl-create.c: Likewise. * libtrivfs/dyn-classes.c: Likewise. * libtrivfs/io-reauthenticate.c: Likewise. * libtrivfs/io-restrict-auth.c: Likewise. * libtrivfs/protid-clean.c: Likewise. * libtrivfs/protid-dup.c: Likewise. * libtrivfs/trivfs.h: Likewise. * mach-defpager/Makefile: Likewise. * mach-defpager/default_pager.c: Likewise. * mach-defpager/kalloc.c: Likewise. * mach-defpager/main.c: Likewise. * nfs/Makefile: Likewise. * nfs/cache.c: Likewise. * nfs/main.c: Likewise. * nfs/mount.c: Likewise. * nfs/name-cache.c: Likewise. * nfs/nfs.h: Likewise. * nfs/ops.c: Likewise. * nfs/rpc.c: Likewise. * nfsd/Makefile: Likewise. * nfsd/cache.c: Likewise. * nfsd/loop.c: Likewise. * nfsd/main.c: Likewise. * nfsd/nfsd.h: Likewise. * pfinet/Makefile: Likewise. * pfinet/ethernet.c: Likewise. * pfinet/glue-include/asm/spinlock.h: Likewise. * pfinet/glue-include/linux/interrupt.h: Likewise. * pfinet/glue-include/linux/sched.h: Likewise. * pfinet/glue-include/linux/timer.h: Likewise. * pfinet/glue-include/linux/wait.h: Likewise. * pfinet/iioctl-ops.c: Likewise. * pfinet/io-ops.c: Likewise. * pfinet/kmem_cache.c: Likewise. * pfinet/main.c: Likewise. * pfinet/options.c: Likewise. * pfinet/pfinet-ops.c: Likewise. * pfinet/pfinet.h: Likewise. * pfinet/sched.c: Likewise. * pfinet/socket-ops.c: Likewise. * pfinet/socket.c: Likewise. * pfinet/timer-emul.c: Likewise. * pfinet/tunnel.c: Likewise. * pflocal/Makefile: Likewise. * pflocal/connq.c: Likewise. * pflocal/io.c: Likewise. * pflocal/sock.c: Likewise. * pflocal/sock.h: Likewise. * pflocal/socket.c: Likewise. * pflocal/sserver.c: Likewise. * proc/Makefile: Likewise. * proc/info.c: Likewise. * proc/main.c: Likewise. * proc/mgt.c: Likewise. * proc/msg.c: Likewise. * proc/proc.h: Likewise. * proc/stubs.c: Likewise. * proc/wait.c: Likewise. * storeio/Makefile: Likewise. * storeio/dev.c: Likewise. * storeio/dev.h: Likewise. * storeio/open.c: Likewise. * storeio/open.h: Likewise. * storeio/pager.c: Likewise. * storeio/storeio.c: Likewise. * term/Makefile: Likewise. * term/devio.c: Likewise. * term/hurdio.c: Likewise. * term/main.c: Likewise. * term/munge.c: Likewise. * term/ptyio.c: Likewise. * term/term.h: Likewise. * term/users.c: Likewise. * tmpfs/Makefile: Likewise. * tmpfs/dir.c: Likewise. * tmpfs/node.c: Likewise. * tmpfs/tmpfs.c: Likewise. * tmpfs/tmpfs.h: Likewise. * trans/Makefile: Likewise. * trans/fakeroot.c: Likewise. * trans/fifo.c: Likewise. * trans/hello-mt.c: Likewise. * trans/new-fifo.c: Likewise. * trans/streamio.c: Likewise. * ufs/Makefile: Likewise. * ufs/alloc.c: Likewise. * ufs/dir.c: Likewise. * ufs/hyper.c: Likewise. * ufs/inode.c: Likewise. * ufs/main.c: Likewise. * ufs/pager.c: Likewise. * ufs/pokeloc.c: Likewise. * ufs/sizes.c: Likewise. * ufs/ufs.h: Likewise. * usermux/Makefile: Likewise. * usermux/mux.c: Likewise. * usermux/node.c: Likewise. * usermux/usermux.h: Likewise. * utils/Makefile: Likewise. * utils/fakeauth.c: Likewise. * utils/rpctrace.c: Likewise.
Diffstat (limited to 'storeio')
-rw-r--r--storeio/Makefile3
-rw-r--r--storeio/dev.c18
-rw-r--r--storeio/dev.h8
-rw-r--r--storeio/open.c14
-rw-r--r--storeio/open.h2
-rw-r--r--storeio/pager.c40
-rw-r--r--storeio/storeio.c20
7 files changed, 60 insertions, 45 deletions
diff --git a/storeio/Makefile b/storeio/Makefile
index 0190be07..c1317587 100644
--- a/storeio/Makefile
+++ b/storeio/Makefile
@@ -23,6 +23,7 @@ target = storeio
SRCS = dev.c storeio.c open.c pager.c io.c
OBJS = $(SRCS:.c=.o)
-HURDLIBS = trivfs pager fshelp iohelp store threads ports ihash shouldbeinlibc
+HURDLIBS = trivfs pager fshelp iohelp store ports ihash shouldbeinlibc
+OTHERLIBS = -lpthread
include ../Makeconf
diff --git a/storeio/dev.c b/storeio/dev.c
index 31b084f9..8f520cd2 100644
--- a/storeio/dev.c
+++ b/storeio/dev.c
@@ -173,10 +173,10 @@ dev_open (struct dev *dev)
if (!dev->inhibit_cache)
{
dev->buf_offs = -1;
- rwlock_init (&dev->io_lock);
+ pthread_rwlock_init (&dev->io_lock, NULL);
dev->block_mask = (1 << dev->store->log2_block_size) - 1;
dev->pager = 0;
- mutex_init (&dev->pager_lock);
+ pthread_mutex_init (&dev->pager_lock, NULL);
}
return 0;
@@ -218,9 +218,9 @@ dev_sync(struct dev *dev, int wait)
if (dev->pager != NULL)
pager_sync (dev->pager, wait);
- rwlock_writer_lock (&dev->io_lock);
+ pthread_rwlock_wrlock (&dev->io_lock);
err = dev_buf_discard (dev);
- rwlock_writer_unlock (&dev->io_lock);
+ pthread_rwlock_unlock (&dev->io_lock);
return err;
}
@@ -243,7 +243,7 @@ buffered_rw (struct dev *dev, off_t offs, size_t len, size_t *amount,
size_t io_offs = 0; /* Offset within this I/O operation. */
unsigned block_offs = offs & block_mask; /* Offset within a block. */
- rwlock_writer_lock (&dev->io_lock);
+ pthread_rwlock_wrlock (&dev->io_lock);
if (block_offs != 0)
/* The start of the I/O isn't block aligned. */
@@ -282,7 +282,7 @@ buffered_rw (struct dev *dev, off_t offs, size_t len, size_t *amount,
if (! err)
*amount = io_offs;
- rwlock_writer_unlock (&dev->io_lock);
+ pthread_rwlock_unlock (&dev->io_lock);
return err;
}
@@ -306,7 +306,7 @@ dev_rw (struct dev *dev, off_t offs, size_t len, size_t *amount,
else if (offs + len > dev->store->size)
len = dev->store->size - offs;
- rwlock_reader_lock (&dev->io_lock);
+ pthread_rwlock_rdlock (&dev->io_lock);
if (dev_buf_is_active (dev)
|| (offs & block_mask) != 0 || (len & block_mask) != 0)
/* Some non-aligned I/O has been done, or is needed, so we need to deal
@@ -314,14 +314,14 @@ dev_rw (struct dev *dev, off_t offs, size_t len, size_t *amount,
{
/* Acquire a writer lock instead of a reader lock. Note that other
writers may have acquired the lock by the time we get it. */
- rwlock_reader_unlock (&dev->io_lock);
+ pthread_rwlock_unlock (&dev->io_lock);
err = buffered_rw (dev, offs, len, amount, buf_rw, raw_rw);
}
else
/* Only block-aligned I/O is being done, so things are easy. */
{
err = (*raw_rw) (offs, 0, len, amount);
- rwlock_reader_unlock (&dev->io_lock);
+ pthread_rwlock_unlock (&dev->io_lock);
}
return err;
diff --git a/storeio/dev.h b/storeio/dev.h
index 23924ca5..139668a7 100644
--- a/storeio/dev.h
+++ b/storeio/dev.h
@@ -22,7 +22,7 @@
#include <mach.h>
#include <device/device.h>
-#include <rwlock.h>
+#include <pthread.h>
#include <hurd/store.h>
#include <hurd/trivfs.h>
@@ -57,7 +57,7 @@ struct dev
/* This lock protects `store', `owner' and `nperopens'. The other
members never change after creation, except for those locked by
io_lock (below). */
- struct mutex lock;
+ pthread_mutex_t lock;
/* Nonzero iff the --no-cache flag was given.
If this is set, the remaining members are not used at all
@@ -71,7 +71,7 @@ struct dev
/* Lock to arbitrate I/O through this device. Block I/O can occur in
parallel, and requires only a reader-lock.
Non-block I/O is always serialized, and requires a writer-lock. */
- struct rwlock io_lock;
+ pthread_rwlock_t io_lock;
/* Non-block I/O is buffered through BUF. BUF_OFFS is the device offset
corresponding to the start of BUF (which holds one block); if it is -1,
@@ -81,7 +81,7 @@ struct dev
int buf_dirty;
struct pager *pager;
- struct mutex pager_lock;
+ pthread_mutex_t pager_lock;
};
static inline int
diff --git a/storeio/open.c b/storeio/open.c
index 805115ce..f6a641d7 100644
--- a/storeio/open.c
+++ b/storeio/open.c
@@ -35,7 +35,7 @@ open_create (struct dev *dev, struct open **open)
(*open)->dev = dev;
(*open)->offs = 0;
- mutex_init (&(*open)->lock);
+ pthread_mutex_init (&(*open)->lock, NULL);
return 0;
}
@@ -59,11 +59,11 @@ open_write (struct open *open, off_t offs, void *buf, size_t len,
if (offs < 0)
/* Use OPEN's offset. */
{
- mutex_lock (&open->lock);
+ pthread_mutex_lock (&open->lock);
err = dev_write (open->dev, open->offs, buf, len, amount);
if (! err)
open->offs += *amount;
- mutex_unlock (&open->lock);
+ pthread_mutex_unlock (&open->lock);
}
else
err = dev_write (open->dev, offs, buf, len, amount);
@@ -81,11 +81,11 @@ open_read (struct open *open, off_t offs, size_t amount,
if (offs < 0)
/* Use OPEN's offset. */
{
- mutex_lock (&open->lock);
+ pthread_mutex_lock (&open->lock);
err = dev_read (open->dev, open->offs, amount, buf, len);
if (! err)
open->offs += *len;
- mutex_unlock (&open->lock);
+ pthread_mutex_unlock (&open->lock);
}
else
err = dev_read (open->dev, offs, amount, buf, len);
@@ -101,7 +101,7 @@ open_seek (struct open *open, off_t offs, int whence, off_t *new_offs)
{
error_t err = 0;
- mutex_lock (&open->lock);
+ pthread_mutex_lock (&open->lock);
switch (whence)
{
@@ -121,7 +121,7 @@ open_seek (struct open *open, off_t offs, int whence, off_t *new_offs)
err = EINVAL;
}
- mutex_unlock (&open->lock);
+ pthread_mutex_unlock (&open->lock);
return err;
}
diff --git a/storeio/open.h b/storeio/open.h
index cbac2a37..78ad95ca 100644
--- a/storeio/open.h
+++ b/storeio/open.h
@@ -36,7 +36,7 @@ struct open
off_t offs;
/* A lock used to control write access to OFFS. */
- struct mutex lock;
+ pthread_mutex_t lock;
};
/* Returns a new per-open structure for the device DEV in OPEN. If an error
diff --git a/storeio/pager.c b/storeio/pager.c
index 1fb1d07e..cbae7eb6 100644
--- a/storeio/pager.c
+++ b/storeio/pager.c
@@ -25,6 +25,7 @@
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>
+#include <stdio.h>
#include "dev.h"
@@ -127,22 +128,26 @@ void
pager_clear_user_data (struct user_pager_info *upi)
{
struct dev *dev = (struct dev *)upi;
- mutex_lock (&dev->pager_lock);
+ pthread_mutex_lock (&dev->pager_lock);
dev->pager = 0;
- mutex_unlock (&dev->pager_lock);
+ pthread_mutex_unlock (&dev->pager_lock);
}
static struct port_bucket *pager_port_bucket = 0;
/* A top-level function for the paging thread that just services paging
requests. */
-static void
-service_paging_requests (any_t arg)
+static void *
+service_paging_requests (void *arg)
{
+ (void) arg;
+
for (;;)
ports_manage_port_operations_multithread (pager_port_bucket,
pager_demuxer,
1000 * 30, 1000 * 60 * 5, 0);
+
+ return NULL;
}
/* Initialize paging for this device. */
@@ -151,18 +156,27 @@ init_dev_paging ()
{
if (! pager_port_bucket)
{
- static struct mutex pager_global_lock = MUTEX_INITIALIZER;
+ static pthread_mutex_t pager_global_lock = PTHREAD_MUTEX_INITIALIZER;
- mutex_lock (&pager_global_lock);
+ pthread_mutex_lock (&pager_global_lock);
if (pager_port_bucket == NULL)
{
+ pthread_t thread;
+ error_t err;
+
pager_port_bucket = ports_create_bucket ();
/* Make a thread to service paging requests. */
- cthread_detach (cthread_fork ((cthread_fn_t)service_paging_requests,
- (any_t)0));
+ err = pthread_create (&thread, NULL, service_paging_requests, NULL);
+ if (!err)
+ pthread_detach (thread);
+ else
+ {
+ errno = err;
+ perror ("pthread_create");
+ }
}
- mutex_unlock (&pager_global_lock);
+ pthread_mutex_unlock (&pager_global_lock);
}
}
@@ -226,7 +240,7 @@ dev_get_memory_object (struct dev *dev, vm_prot_t prot, memory_object_t *memobj)
init_dev_paging ();
- mutex_lock (&dev->pager_lock);
+ pthread_mutex_lock (&dev->pager_lock);
if (dev->pager == NULL)
{
@@ -235,7 +249,7 @@ dev_get_memory_object (struct dev *dev, vm_prot_t prot, memory_object_t *memobj)
1, MEMORY_OBJECT_COPY_DELAY);
if (dev->pager == NULL)
{
- mutex_unlock (&dev->pager_lock);
+ pthread_mutex_unlock (&dev->pager_lock);
return errno;
}
created = 1;
@@ -247,7 +261,7 @@ dev_get_memory_object (struct dev *dev, vm_prot_t prot, memory_object_t *memobj)
/* Pager is currently being destroyed, try again. */
{
dev->pager = 0;
- mutex_unlock (&dev->pager_lock);
+ pthread_mutex_unlock (&dev->pager_lock);
return dev_get_memory_object (dev, prot, memobj);
}
else
@@ -258,7 +272,7 @@ dev_get_memory_object (struct dev *dev, vm_prot_t prot, memory_object_t *memobj)
if (created)
ports_port_deref (dev->pager);
- mutex_unlock (&dev->pager_lock);
+ pthread_mutex_unlock (&dev->pager_lock);
}
return err;
diff --git a/storeio/storeio.c b/storeio/storeio.c
index a88c8e43..3bde9644 100644
--- a/storeio/storeio.c
+++ b/storeio/storeio.c
@@ -128,7 +128,7 @@ main (int argc, char *argv[])
struct storeio_argp_params params;
bzero (&device, sizeof device);
- mutex_init (&device.lock);
+ pthread_mutex_init (&device.lock, NULL);
params.dev = &device;
argp_parse (&argp, argc, argv, 0, 0, &params);
@@ -221,7 +221,7 @@ check_open_hook (struct trivfs_control *trivfs_control,
if (!err && dev_is_readonly (dev) && (flags & O_WRITE))
return EROFS;
- mutex_lock (&dev->lock);
+ pthread_mutex_lock (&dev->lock);
if (dev->store == NULL)
{
/* Try and open the store. */
@@ -231,7 +231,7 @@ check_open_hook (struct trivfs_control *trivfs_control,
error, as this allows stat to work correctly. XXX */
err = 0;
}
- mutex_unlock (&dev->lock);
+ pthread_mutex_unlock (&dev->lock);
return err;
}
@@ -244,10 +244,10 @@ open_hook (struct trivfs_peropen *peropen)
if (dev->store)
{
- mutex_lock (&dev->lock);
+ pthread_mutex_lock (&dev->lock);
if (dev->nperopens++ == 0)
err = store_clear_flags (dev->store, STORE_INACTIVE);
- mutex_unlock (&dev->lock);
+ pthread_mutex_unlock (&dev->lock);
if (!err)
err = open_create (dev, (struct open **)&peropen->hook);
}
@@ -261,10 +261,10 @@ close_hook (struct trivfs_peropen *peropen)
if (peropen->hook)
{
- mutex_lock (&dev->lock);
+ pthread_mutex_lock (&dev->lock);
if (--dev->nperopens == 0)
store_set_flags (dev->store, STORE_INACTIVE);
- mutex_unlock (&dev->lock);
+ pthread_mutex_unlock (&dev->lock);
open_free (peropen->hook);
}
}
@@ -325,7 +325,7 @@ trivfs_goaway (struct trivfs_control *fsys, int flags)
int nosync = (flags & FSYS_GOAWAY_NOSYNC);
struct port_class *root_port_class = fsys->protid_class;
- mutex_lock (&device->lock);
+ pthread_mutex_lock (&device->lock);
if (device->store == NULL)
/* The device is not actually open.
@@ -337,7 +337,7 @@ trivfs_goaway (struct trivfs_control *fsys, int flags)
err = ports_inhibit_class_rpcs (root_port_class);
if (err == EINTR || (err && !force))
{
- mutex_unlock (&device->lock);
+ pthread_mutex_unlock (&device->lock);
return err;
}
@@ -370,7 +370,7 @@ trivfs_goaway (struct trivfs_control *fsys, int flags)
/* Allow normal operations to proceed. */
ports_enable_class (root_port_class);
ports_resume_class_rpcs (root_port_class);
- mutex_unlock (&device->lock);
+ pthread_mutex_unlock (&device->lock);
/* Complain that there are still users. */
return EBUSY;