#include <linux/fs.h>
 #include <linux/buffer_head.h>
 #include <linux/amigaffs.h>
+#include <linux/mutex.h>
 
 /* AmigaOS allows file names with up to 30 characters length.
  * Names longer than that will be silently truncated. If you
        gid_t s_gid;                    /* gid to override */
        umode_t s_mode;                 /* mode to override */
        struct buffer_head *s_root_bh;  /* Cached root block. */
-       struct semaphore s_bmlock;      /* Protects bitmap access. */
+       struct mutex s_bmlock;          /* Protects bitmap access. */
        struct affs_bm_info *s_bitmap;  /* Bitmap infos. */
        u32 s_bmap_count;               /* # of bitmap blocks. */
        u32 s_bmap_bits;                /* # of bits in one bitmap blocks */
 
        if (sb->s_flags & MS_RDONLY)
                return 0;
 
-       down(&AFFS_SB(sb)->s_bmlock);
+       mutex_lock(&AFFS_SB(sb)->s_bmlock);
 
        bm = AFFS_SB(sb)->s_bitmap;
        free = 0;
        for (i = AFFS_SB(sb)->s_bmap_count; i > 0; bm++, i--)
                free += bm->bm_free;
 
-       up(&AFFS_SB(sb)->s_bmlock);
+       mutex_unlock(&AFFS_SB(sb)->s_bmlock);
 
        return free;
 }
        bit     = blk % sbi->s_bmap_bits;
        bm      = &sbi->s_bitmap[bmap];
 
-       down(&sbi->s_bmlock);
+       mutex_lock(&sbi->s_bmlock);
 
        bh = sbi->s_bmap_bh;
        if (sbi->s_last_bmap != bmap) {
        sb->s_dirt = 1;
        bm->bm_free++;
 
-       up(&sbi->s_bmlock);
+       mutex_unlock(&sbi->s_bmlock);
        return;
 
 err_free:
        affs_warning(sb,"affs_free_block","Trying to free block %u which is already free", block);
-       up(&sbi->s_bmlock);
+       mutex_unlock(&sbi->s_bmlock);
        return;
 
 err_bh_read:
        affs_error(sb,"affs_free_block","Cannot read bitmap block %u", bm->bm_key);
        sbi->s_bmap_bh = NULL;
        sbi->s_last_bmap = ~0;
-       up(&sbi->s_bmlock);
+       mutex_unlock(&sbi->s_bmlock);
        return;
 
 err_range:
        bmap = blk / sbi->s_bmap_bits;
        bm = &sbi->s_bitmap[bmap];
 
-       down(&sbi->s_bmlock);
+       mutex_lock(&sbi->s_bmlock);
 
        if (bm->bm_free)
                goto find_bmap_bit;
        mark_buffer_dirty(bh);
        sb->s_dirt = 1;
 
-       up(&sbi->s_bmlock);
+       mutex_unlock(&sbi->s_bmlock);
 
        pr_debug("%d\n", blk);
        return blk;
        sbi->s_bmap_bh = NULL;
        sbi->s_last_bmap = ~0;
 err_full:
-       up(&sbi->s_bmlock);
+       mutex_unlock(&sbi->s_bmlock);
        pr_debug("failed\n");
        return 0;
 }
 
        if (!sbi)
                return -ENOMEM;
        sb->s_fs_info = sbi;
-       init_MUTEX(&sbi->s_bmlock);
+       mutex_init(&sbi->s_bmlock);
 
        if (!parse_options(data,&uid,&gid,&i,&reserved,&root_block,
                                &blocksize,&sbi->s_prefix,