X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fisofs%2Fcompress.c;h=37dbd6404787b72c94513e66e7634166f2ebaa92;hb=852e1f2a2627274102a3c2dc70a6547aeab99cb6;hp=3a39158cca964384e12d73bdbf9b4f7b84c645c6;hpb=a144a5633c1e625c3134c2ce8d549a054468fd98;p=linux-2.6 diff --git a/fs/isofs/compress.c b/fs/isofs/compress.c index 3a39158cca..37dbd64047 100644 --- a/fs/isofs/compress.c +++ b/fs/isofs/compress.c @@ -16,7 +16,6 @@ * Transparent decompression of files on an iso9660 filesystem */ -#include #include #include @@ -34,7 +33,7 @@ static char zisofs_sink_page[PAGE_CACHE_SIZE]; * allocation; this avoids failures at block-decompression time. */ 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 @@ -43,7 +42,7 @@ static struct semaphore zisofs_zlib_semaphore; */ static int zisofs_readpage(struct file *file, struct page *page) { - struct inode *inode = file->f_dentry->d_inode; + struct inode *inode = file->f_path.dentry->d_inode; struct address_space *mapping = inode->i_mapping; unsigned int maxpage, xpage, fpage, blockindex; unsigned long offset; @@ -181,9 +180,9 @@ static int zisofs_readpage(struct file *file, struct page *page) /* First block is special since it may be fractional. 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 - the zlib semaphore longer than necessary. */ + the zlib mutex longer than necessary. */ if ( !bh || (wait_on_buffer(bh), !buffer_uptodate(bh)) ) { printk(KERN_DEBUG "zisofs: Hit null buffer, fpage = %d, xpage = %d, csize = %ld\n", @@ -195,7 +194,7 @@ static int zisofs_readpage(struct file *file, struct page *page) csize -= stream.avail_in; stream.workspace = zisofs_zlib_workspace; - down(&zisofs_zlib_semaphore); + mutex_lock(&zisofs_zlib_lock); zerr = zlib_inflateInit(&stream); if ( zerr != Z_OK ) { @@ -282,7 +281,7 @@ static int zisofs_readpage(struct file *file, struct page *page) zlib_inflateEnd(&stream); z_eio: - up(&zisofs_zlib_semaphore); + mutex_unlock(&zisofs_zlib_lock); b_eio: for ( i = 0 ; i < haveblocks ; i++ ) { @@ -318,31 +317,16 @@ const struct address_space_operations zisofs_aops = { /* No bmap operation supported */ }; -static int initialized; - int __init zisofs_init(void) { - if ( initialized ) { - printk("zisofs_init: called more than once\n"); - return 0; - } - zisofs_zlib_workspace = vmalloc(zlib_inflate_workspacesize()); if ( !zisofs_zlib_workspace ) return -ENOMEM; - init_MUTEX(&zisofs_zlib_semaphore); - initialized = 1; return 0; } void zisofs_cleanup(void) { - if ( !initialized ) { - printk("zisofs_cleanup: called without initialization\n"); - return; - } - vfree(zisofs_zlib_workspace); - initialized = 0; }