提交 a36a151e 编写于 作者: D Dave Young 提交者: Linus Torvalds

zisofs use mutex instead of semaphore

Use mutex instead of semaphore in fs/isofs/compress.c, and remove an
unnecessary variable.
Signed-off-by: NDave Young <hidave.darkstar@gmail.com>
Acked-by: NH. Peter Anvin <hpa@zytor.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 040b5c6f
...@@ -33,7 +33,7 @@ static char zisofs_sink_page[PAGE_CACHE_SIZE]; ...@@ -33,7 +33,7 @@ static char zisofs_sink_page[PAGE_CACHE_SIZE];
* allocation; this avoids failures at block-decompression time. * allocation; this avoids failures at block-decompression time.
*/ */
static void *zisofs_zlib_workspace; static void *zisofs_zlib_workspace;
static struct semaphore zisofs_zlib_semaphore; static DEFINE_MUTEX(zisofs_zlib_lock);
/* /*
* When decompressing, we typically obtain more than one page * When decompressing, we typically obtain more than one page
...@@ -180,9 +180,9 @@ static int zisofs_readpage(struct file *file, struct page *page) ...@@ -180,9 +180,9 @@ static int zisofs_readpage(struct file *file, struct page *page)
/* First block is special since it may be fractional. /* First block is special since it may be fractional.
We also wait for it before grabbing the zlib We also wait for it before grabbing the zlib
semaphore; odds are that the subsequent blocks are mutex; odds are that the subsequent blocks are
going to come in in short order so we don't hold going to come in in short order so we don't hold
the zlib semaphore longer than necessary. */ the zlib mutex longer than necessary. */
if ( !bh || (wait_on_buffer(bh), !buffer_uptodate(bh)) ) { if ( !bh || (wait_on_buffer(bh), !buffer_uptodate(bh)) ) {
printk(KERN_DEBUG "zisofs: Hit null buffer, fpage = %d, xpage = %d, csize = %ld\n", printk(KERN_DEBUG "zisofs: Hit null buffer, fpage = %d, xpage = %d, csize = %ld\n",
...@@ -194,7 +194,7 @@ static int zisofs_readpage(struct file *file, struct page *page) ...@@ -194,7 +194,7 @@ static int zisofs_readpage(struct file *file, struct page *page)
csize -= stream.avail_in; csize -= stream.avail_in;
stream.workspace = zisofs_zlib_workspace; stream.workspace = zisofs_zlib_workspace;
down(&zisofs_zlib_semaphore); mutex_lock(&zisofs_zlib_lock);
zerr = zlib_inflateInit(&stream); zerr = zlib_inflateInit(&stream);
if ( zerr != Z_OK ) { if ( zerr != Z_OK ) {
...@@ -281,7 +281,7 @@ static int zisofs_readpage(struct file *file, struct page *page) ...@@ -281,7 +281,7 @@ static int zisofs_readpage(struct file *file, struct page *page)
zlib_inflateEnd(&stream); zlib_inflateEnd(&stream);
z_eio: z_eio:
up(&zisofs_zlib_semaphore); mutex_unlock(&zisofs_zlib_lock);
b_eio: b_eio:
for ( i = 0 ; i < haveblocks ; i++ ) { for ( i = 0 ; i < haveblocks ; i++ ) {
...@@ -317,31 +317,16 @@ const struct address_space_operations zisofs_aops = { ...@@ -317,31 +317,16 @@ const struct address_space_operations zisofs_aops = {
/* No bmap operation supported */ /* No bmap operation supported */
}; };
static int initialized;
int __init zisofs_init(void) int __init zisofs_init(void)
{ {
if ( initialized ) {
printk("zisofs_init: called more than once\n");
return 0;
}
zisofs_zlib_workspace = vmalloc(zlib_inflate_workspacesize()); zisofs_zlib_workspace = vmalloc(zlib_inflate_workspacesize());
if ( !zisofs_zlib_workspace ) if ( !zisofs_zlib_workspace )
return -ENOMEM; return -ENOMEM;
init_MUTEX(&zisofs_zlib_semaphore);
initialized = 1;
return 0; return 0;
} }
void zisofs_cleanup(void) void zisofs_cleanup(void)
{ {
if ( !initialized ) {
printk("zisofs_cleanup: called without initialization\n");
return;
}
vfree(zisofs_zlib_workspace); vfree(zisofs_zlib_workspace);
initialized = 0;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册