Revamp file locking

Get rid of the semaphore implementation, no need to carry both.
Add different locking modes (exclusive and readwrite) to enable
a wider range of testing. Also combine lockfile and lockfile_batch,
the latter is now a postfix option to the former.

So to enable readers-excluding-writers locking mode with a lock batch
count of 4, you would write:

lockfile=readwrite:4

instead.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/HOWTO b/HOWTO
index 3e0a31b..3d92293 100644
--- a/HOWTO
+++ b/HOWTO
@@ -219,13 +219,24 @@
 opendir=str	Tell fio to recursively add any file it can find in this
 		directory and down the file system tree.
 
-lockfile=bool	If set, fio will lock a file internally before doing IO to it.
-		This makes it safe to share file descriptors across fio
-		jobs that run at the same time.
+lockfile=str	Fio defaults to not doing any locking files before it does
+		IO to them. If a file or file descriptor is shared, fio
+		can serialize IO to that file to make the end result
+		consistent. This is usual for emulating real workloads that
+		share files. The lock modes are:
 
-lockfile_batch=int	Acquiring a semaphore can be quite expensive, so
-		allow a process to complete this number of IOs before releasing
-		the semaphore again. Defaults to 1.
+			none		No locking. The default.
+			exclusive	Only one thread/process may do IO,
+					excluding all others.
+			readwrite	Read-write locking on the file. Many
+					readers may access the file at the
+					same time, but writes get exclusive
+					access.
+
+		The option may be post-fixed with a lock batch number. If
+		set, then each thread/process may do that amount of IOs to
+		the file before giving up the lock. Since lock acqusition is
+		expensive, batching the lock/unlocks will speed up IO.
 
 readwrite=str
 rw=str		Type of io pattern. Accepted values are: