.d_compare      = exfat_cmp,
 };
 
-static DEFINE_SEMAPHORE(z_sem);
+static DEFINE_MUTEX(z_mutex);
 
 static inline void fs_sync(struct super_block *sb, bool do_sync)
 {
 
        pr_info("[EXFAT] trying to mount...\n");
 
-       down(&z_sem);
+       mutex_lock(&z_mutex);
 
        buf_init(sb);
 
-       sema_init(&p_fs->v_sem, 1);
+       mutex_init(&p_fs->v_mutex);
        p_fs->dev_ejected = 0;
 
        /* open the block device */
        pr_info("[EXFAT] mounted successfully\n");
 
 out:
-       up(&z_sem);
+       mutex_unlock(&z_mutex);
 
        return ret;
 }
 
        pr_info("[EXFAT] trying to unmount...\n");
 
-       down(&z_sem);
+       mutex_lock(&z_mutex);
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
        buf_shutdown(sb);
 
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
-       up(&z_sem);
+       mutex_unlock(&p_fs->v_mutex);
+       mutex_unlock(&z_mutex);
 
        pr_info("[EXFAT] unmounted successfully\n");
 
                return FFS_ERROR;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        if (p_fs->used_clusters == UINT_MAX)
                p_fs->used_clusters = p_fs->fs_func->count_used_clusters(sb);
                err = FFS_MEDIAERR;
 
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return err;
 }
        struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        /* synchronize the file system */
        fs_sync(sb, do_sync);
                err = FFS_MEDIAERR;
 
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return err;
 }
                return FFS_ERROR;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        /* check the validity of directory name in the given pathname */
        ret = resolve_path(inode, path, &dir, &uni_name);
                ret = FFS_MEDIAERR;
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                return FFS_ERROR;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        /* check the validity of directory name in the given pathname */
        ret = resolve_path(inode, path, &dir, &uni_name);
 
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                return FFS_ERROR;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        /* check if the given file ID is opened */
        if (fid->type != TYPE_FILE) {
 
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                return FFS_ERROR;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        /* check if the given file ID is opened */
        if (fid->type != TYPE_FILE) {
 
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                 new_size);
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        /* check if the given file ID is opened */
        if (fid->type != TYPE_FILE) {
 out:
        pr_debug("%s exited (%d)\n", __func__, ret);
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                return FFS_ERROR;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        update_parent_info(fid, old_parent_inode);
 
                ret = FFS_MEDIAERR;
 out2:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                return FFS_INVALIDFID;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        dir.dir = fid->dir.dir;
        dir.size = fid->dir.size;
                ret = FFS_MEDIAERR;
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
        }
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        /* get the directory entry of given file */
        if (p_fs->vol_type == EXFAT) {
                ret = FFS_MEDIAERR;
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
        pr_debug("%s entered\n", __func__);
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        if (is_dir) {
                if ((fid->dir.dir == p_fs->root_dir) &&
 
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        pr_debug("%s exited successfully\n", __func__);
        return ret;
        pr_debug("%s entered (inode %p info %p\n", __func__, inode, info);
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        if (is_dir) {
                if ((fid->dir.dir == p_fs->root_dir) &&
 
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        pr_debug("%s exited (%d)\n", __func__, ret);
 
                return FFS_ERROR;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        fid->rwoffset = (s64)(clu_offset) << p_fs->cluster_size_bits;
 
 
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                return FFS_ERROR;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        /* check the validity of directory name in the given old pathname */
        ret = resolve_path(inode, path, &dir, &uni_name);
                ret = FFS_MEDIAERR;
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                return -EPERM;
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        if (fid->entry == -1) {
                dir.dir = p_fs->root_dir;
 
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
        }
 
        /* acquire the lock for file system critical section */
-       down(&p_fs->v_sem);
+       mutex_lock(&p_fs->v_mutex);
 
        clu_to_free.dir = fid->start_clu;
        clu_to_free.size = (s32)((fid->size - 1) >> p_fs->cluster_size_bits) + 1;
 
 out:
        /* release the lock for file system critical section */
-       up(&p_fs->v_sem);
+       mutex_unlock(&p_fs->v_mutex);
 
        return ret;
 }
                         * invalidate_bdev drops all device cache include
                         * dirty. We use this to simulate device removal.
                         */
-                       down(&p_fs->v_sem);
+                       mutex_lock(&p_fs->v_mutex);
                        FAT_release_all(sb);
                        buf_release_all(sb);
-                       up(&p_fs->v_sem);
+                       mutex_unlock(&p_fs->v_mutex);
 
                        invalidate_bdev(bdev);
                }