Whamcloud - gitweb
LU-4588 code: replace semaphores with mutexes 94/9294/5
authorDmitry Eremin <dmitry.eremin@intel.com>
Tue, 18 Feb 2014 20:08:20 +0000 (00:08 +0400)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 28 Mar 2014 04:54:22 +0000 (04:54 +0000)
It's just optimization. The mutex subsystem is slightly faster
and has better scalability for contended workloads.

Remove the lustre_lock and it's accessor functions l_lock(),
l_unlock(), l_lock_init(), and l_has_lock() since they have
not been used by the code since Lustre 1.6.

Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Change-Id: I1b6defe7bdea2f7b33638a98c73277290c10bea1
Reviewed-on: http://review.whamcloud.com/9294
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
17 files changed:
libcfs/libcfs/linux/linux-cpu.c
lnet/klnds/gnilnd/gnilnd.c
lnet/klnds/gnilnd/gnilnd.h
lnet/klnds/gnilnd/gnilnd_conn.c
lnet/klnds/gnilnd/gnilnd_stack.c
lnet/klnds/gnilnd/gnilnd_sysctl.c
lustre/include/lustre_lib.h
lustre/include/obd.h
lustre/ldlm/ldlm_lib.c
lustre/mgc/mgc_request.c
lustre/osd-ldiskfs/osd_compat.c
lustre/osd-ldiskfs/osd_iam.c
lustre/osd-ldiskfs/osd_iam.h
lustre/osd-ldiskfs/osd_internal.h
lustre/quota/qsd_config.c
lustre/quota/qsd_internal.h
lustre/quota/qsd_lib.c

index ffdc440..7318d81 100644 (file)
@@ -69,7 +69,7 @@ struct cfs_cpt_data {
        /* reserved for hotplug */
        unsigned long           cpt_version;
        /* mutex to protect cpt_cpumask */
-       struct semaphore        cpt_mutex;
+       struct mutex            cpt_mutex;
        /* scratch buffer for set/unset_node */
        cpumask_t               *cpt_cpumask;
 };
@@ -90,12 +90,12 @@ cfs_cpu_core_nsiblings(int cpu)
 {
        int     num;
 
-       down(&cpt_data.cpt_mutex);
+       mutex_lock(&cpt_data.cpt_mutex);
 
        cfs_cpu_core_siblings(cpu, cpt_data.cpt_cpumask);
        num = cpus_weight(*cpt_data.cpt_cpumask);
 
-       up(&cpt_data.cpt_mutex);
+       mutex_unlock(&cpt_data.cpt_mutex);
 
        return num;
 }
@@ -115,12 +115,12 @@ cfs_cpu_ht_nsiblings(int cpu)
 {
        int     num;
 
-       down(&cpt_data.cpt_mutex);
+       mutex_lock(&cpt_data.cpt_mutex);
 
        cfs_cpu_ht_siblings(cpu, cpt_data.cpt_cpumask);
        num = cpus_weight(*cpt_data.cpt_cpumask);
 
-       up(&cpt_data.cpt_mutex);
+       mutex_unlock(&cpt_data.cpt_mutex);
 
        return num;
 }
@@ -458,14 +458,14 @@ cfs_cpt_set_node(struct cfs_cpt_table *cptab, int cpt, int node)
                return 0;
        }
 
-       down(&cpt_data.cpt_mutex);
+       mutex_lock(&cpt_data.cpt_mutex);
 
        mask = cpt_data.cpt_cpumask;
        cfs_node_to_cpumask(node, mask);
 
        rc = cfs_cpt_set_cpumask(cptab, cpt, mask);
 
-       up(&cpt_data.cpt_mutex);
+       mutex_unlock(&cpt_data.cpt_mutex);
 
        return rc;
 }
@@ -482,14 +482,14 @@ cfs_cpt_unset_node(struct cfs_cpt_table *cptab, int cpt, int node)
                return;
        }
 
-       down(&cpt_data.cpt_mutex);
+       mutex_lock(&cpt_data.cpt_mutex);
 
        mask = cpt_data.cpt_cpumask;
        cfs_node_to_cpumask(node, mask);
 
        cfs_cpt_unset_cpumask(cptab, cpt, mask);
 
-       up(&cpt_data.cpt_mutex);
+       mutex_unlock(&cpt_data.cpt_mutex);
 }
 EXPORT_SYMBOL(cfs_cpt_unset_node);
 
@@ -1011,11 +1011,11 @@ cfs_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu)
                        break;
                }
 
-               down(&cpt_data.cpt_mutex);
+               mutex_lock(&cpt_data.cpt_mutex);
                /* if all HTs in a core are offline, it may break affinity */
                cfs_cpu_ht_siblings(cpu, cpt_data.cpt_cpumask);
                warn = any_online_cpu(*cpt_data.cpt_cpumask) >= nr_cpu_ids;
-               up(&cpt_data.cpt_mutex);
+               mutex_unlock(&cpt_data.cpt_mutex);
                CDEBUG(warn ? D_WARNING : D_INFO,
                       "Lustre: can't support CPU plug-out well now, "
                       "performance and stability could be impacted"
@@ -1059,7 +1059,7 @@ cfs_cpu_init(void)
        }
 
        spin_lock_init(&cpt_data.cpt_lock);
-       sema_init(&cpt_data.cpt_mutex, 1);
+       mutex_init(&cpt_data.cpt_mutex);
 
 #ifdef CONFIG_HOTPLUG_CPU
        register_hotcpu_notifier(&cfs_cpu_notifier);
index fe99809..84829e5 100644 (file)
@@ -2170,7 +2170,7 @@ int kgnilnd_base_startup(void)
                INIT_LIST_HEAD(&dev->gnd_map_tx);
                INIT_LIST_HEAD(&dev->gnd_fma_buffs);
                mutex_init(&dev->gnd_cq_mutex);
-               sema_init(&dev->gnd_fmablk_sem, 1);
+               mutex_init(&dev->gnd_fmablk_mutex);
                spin_lock_init(&dev->gnd_fmablk_lock);
                init_waitqueue_head(&dev->gnd_waitq);
                init_waitqueue_head(&dev->gnd_dgram_waitq);
@@ -2218,7 +2218,7 @@ int kgnilnd_base_startup(void)
        init_waitqueue_head(&kgnilnd_data.kgn_ruhroh_waitq);
        spin_lock_init(&kgnilnd_data.kgn_reaper_lock);
 
-       sema_init(&kgnilnd_data.kgn_quiesce_sem, 1);
+       mutex_init(&kgnilnd_data.kgn_quiesce_mutex);
        atomic_set(&kgnilnd_data.kgn_nquiesce, 0);
        atomic_set(&kgnilnd_data.kgn_npending_conns, 0);
        atomic_set(&kgnilnd_data.kgn_npending_unlink, 0);
@@ -2613,7 +2613,7 @@ kgnilnd_startup(lnet_ni_t *ni)
        }
 
        /* Serialize with shutdown. */
-       down(&kgnilnd_data.kgn_quiesce_sem);
+       mutex_lock(&kgnilnd_data.kgn_quiesce_mutex);
 
        LIBCFS_ALLOC(net, sizeof(*net));
        if (net == NULL) {
@@ -2680,10 +2680,10 @@ kgnilnd_startup(lnet_ni_t *ni)
 
        /* we need a separate thread to call probe_wait_by_id until
         * we get a function callback notifier from kgni */
-       up(&kgnilnd_data.kgn_quiesce_sem);
+       mutex_unlock(&kgnilnd_data.kgn_quiesce_mutex);
        RETURN(0);
  failed:
-       up(&kgnilnd_data.kgn_quiesce_sem);
+       mutex_unlock(&kgnilnd_data.kgn_quiesce_mutex);
        kgnilnd_shutdown(ni);
        RETURN(rc);
 }
@@ -2702,7 +2702,7 @@ kgnilnd_shutdown(lnet_ni_t *ni)
                "init %d\n", kgnilnd_data.kgn_init);
 
        /* Serialize with startup. */
-       down(&kgnilnd_data.kgn_quiesce_sem);
+       mutex_lock(&kgnilnd_data.kgn_quiesce_mutex);
        CDEBUG(D_MALLOC, "before NAL cleanup: kmem %d\n",
               atomic_read(&libcfs_kmemory));
 
@@ -2785,7 +2785,7 @@ out:
        CDEBUG(D_MALLOC, "after NAL cleanup: kmem %d\n",
               atomic_read(&libcfs_kmemory));
 
-       up(&kgnilnd_data.kgn_quiesce_sem);
+       mutex_unlock(&kgnilnd_data.kgn_quiesce_mutex);
        EXIT;
 }
 
index b22fe09..f433247 100644 (file)
@@ -520,7 +520,7 @@ typedef struct kgn_device {
        int                     gnd_id;           /* device id, also index in kgn_devices */
        __u32                   gnd_nid;          /* ph host ID translated to NID */
        struct list_head        gnd_fma_buffs;    /* list of FMA memory blocks */
-       struct semaphore        gnd_fmablk_sem;   /* semaphore for FMA block memory alloc/free */
+       struct mutex            gnd_fmablk_mutex; /* mutex for FMA block memory alloc/free */
        spinlock_t              gnd_fmablk_lock;  /* lock for mbox alloc/release */
        atomic_t                gnd_nfmablk;      /* # of fmablk live */
        atomic_t                gnd_fmablk_vers;  /* gnd_fma_bufs stamp */
@@ -796,7 +796,7 @@ typedef struct kgn_data {
        wait_queue_head_t       kgn_ruhroh_waitq;     /* ruhroh thread wakeup */
        int                     kgn_quiesce_trigger;  /* should we quiesce ? */
        atomic_t                kgn_nquiesce;         /* how many quiesced ? */
-       struct semaphore        kgn_quiesce_sem;      /* serialize ruhroh task, startup and shutdown */
+       struct mutex            kgn_quiesce_mutex;    /* serialize ruhroh task, startup and shutdown */
        int                     kgn_needs_reset;      /* we need stack reset */
 
        /* These next three members implement communication from gnilnd into
index 80cfbdc..4cf2dd2 100644 (file)
@@ -79,9 +79,9 @@ kgnilnd_alloc_fmablk(kgn_device_t *device, int use_phys)
        gni_smsg_attr_t         smsg_attr;
        unsigned long           fmablk_vers;
 
-       /* we'll use fmablk_vers and the gnd_fmablk_sem to gate access
+       /* we'll use fmablk_vers and the gnd_fmablk_mutex to gate access
         * to this allocation code. Everyone will sample the version
-        * before and after getting the semaphore. If it has changed,
+        * before and after getting the mutex. If it has changed,
         * we'll bail out to check the lists again - this indicates that
         * some sort of change was made to the lists and it is possible
         * that there is a mailbox for us to find now. This should prevent
@@ -89,12 +89,12 @@ kgnilnd_alloc_fmablk(kgn_device_t *device, int use_phys)
         * that need a yet-to-be-allocated mailbox for a connection. */
 
        fmablk_vers = atomic_read(&device->gnd_fmablk_vers);
-       down(&device->gnd_fmablk_sem);
+       mutex_lock(&device->gnd_fmablk_mutex);
 
        if (fmablk_vers != atomic_read(&device->gnd_fmablk_vers)) {
                /* version changed while we were waiting for semaphore,
                 * we'll recheck the lists assuming something nice happened */
-               up(&device->gnd_fmablk_sem);
+               mutex_unlock(&device->gnd_fmablk_mutex);
                return 0;
        }
 
@@ -203,7 +203,7 @@ kgnilnd_alloc_fmablk(kgn_device_t *device, int use_phys)
 
        spin_unlock(&device->gnd_fmablk_lock);
 
-       up(&device->gnd_fmablk_sem);
+       mutex_unlock(&device->gnd_fmablk_mutex);
 
        return 0;
 
@@ -220,7 +220,7 @@ free_blk:
 free_desc:
        LIBCFS_FREE(fma_blk, sizeof(kgn_fma_memblock_t));
 out:
-       up(&device->gnd_fmablk_sem);
+       mutex_unlock(&device->gnd_fmablk_mutex);
        return rc;
 }
 
@@ -584,8 +584,8 @@ kgnilnd_map_phys_fmablk(kgn_device_t *device)
        int                     rc = 0;
        kgn_fma_memblock_t     *fma_blk;
 
-       /* use sem to gate access to single thread, just in case */
-       down(&device->gnd_fmablk_sem);
+       /* use mutex to gate access to single thread, just in case */
+       mutex_lock(&device->gnd_fmablk_mutex);
 
        spin_lock(&device->gnd_fmablk_lock);
 
@@ -598,7 +598,7 @@ kgnilnd_map_phys_fmablk(kgn_device_t *device)
        }
        spin_unlock(&device->gnd_fmablk_lock);
 
-       up(&device->gnd_fmablk_sem);
+       mutex_unlock(&device->gnd_fmablk_mutex);
 
        RETURN(rc);
 }
@@ -609,8 +609,8 @@ kgnilnd_unmap_fma_blocks(kgn_device_t *device)
 
        kgn_fma_memblock_t      *fma_blk;
 
-       /* use sem to gate access to single thread, just in case */
-       down(&device->gnd_fmablk_sem);
+       /* use mutex to gate access to single thread, just in case */
+       mutex_lock(&device->gnd_fmablk_mutex);
 
        spin_lock(&device->gnd_fmablk_lock);
 
@@ -619,7 +619,7 @@ kgnilnd_unmap_fma_blocks(kgn_device_t *device)
        }
        spin_unlock(&device->gnd_fmablk_lock);
 
-       up(&device->gnd_fmablk_sem);
+       mutex_unlock(&device->gnd_fmablk_mutex);
 }
 
 void
@@ -628,8 +628,8 @@ kgnilnd_free_phys_fmablk(kgn_device_t *device)
 
        kgn_fma_memblock_t      *fma_blk, *fma_blkN;
 
-       /* use sem to gate access to single thread, just in case */
-       down(&device->gnd_fmablk_sem);
+       /* use mutex to gate access to single thread, just in case */
+       mutex_lock(&device->gnd_fmablk_mutex);
 
        spin_lock(&device->gnd_fmablk_lock);
 
@@ -639,7 +639,7 @@ kgnilnd_free_phys_fmablk(kgn_device_t *device)
        }
        spin_unlock(&device->gnd_fmablk_lock);
 
-       up(&device->gnd_fmablk_sem);
+       mutex_unlock(&device->gnd_fmablk_mutex);
 }
 
 /* kgnilnd dgram nid->struct managment */
index 43d301a..a502ce2 100644 (file)
@@ -387,7 +387,7 @@ kgnilnd_ruhroh_thread(void *arg)
                        break;
 
                /* Serialize with driver startup and shutdown. */
-               down(&kgnilnd_data.kgn_quiesce_sem);
+               mutex_lock(&kgnilnd_data.kgn_quiesce_mutex);
 
               CDEBUG(D_NET, "trigger %d reset %d to_bump %d pause %d\n",
                        kgnilnd_data.kgn_quiesce_trigger,
@@ -452,7 +452,7 @@ kgnilnd_ruhroh_thread(void *arg)
                        set_mb(kgnilnd_data.kgn_needs_reset, 0);
                }
 
-               up(&kgnilnd_data.kgn_quiesce_sem);
+               mutex_unlock(&kgnilnd_data.kgn_quiesce_mutex);
        }
 
        kgnilnd_data.kgn_ruhroh_running = 0;
index 24fd128..4a083a9 100644 (file)
@@ -58,11 +58,11 @@ static int LL_PROC_PROTO(proc_toggle_thread_pause)
        }
 
        if (old_val != kgnilnd_sysctl.ksd_pause_trigger) {
-               down(&kgnilnd_data.kgn_quiesce_sem);
+               mutex_lock(&kgnilnd_data.kgn_quiesce_mutex);
                CDEBUG(D_NET, "setting quiesce_trigger %d\n", old_val);
                kgnilnd_data.kgn_quiesce_trigger = kgnilnd_sysctl.ksd_pause_trigger;
                kgnilnd_quiesce_wait("admin sysctl");
-               up(&kgnilnd_data.kgn_quiesce_sem);
+               mutex_unlock(&kgnilnd_data.kgn_quiesce_mutex);
        }
 
        RETURN(rc);
index 2ea9e15..7ff3671 100644 (file)
@@ -117,19 +117,6 @@ struct obd_client_handle {
 void statfs_pack(struct obd_statfs *osfs, struct kstatfs *sfs);
 void statfs_unpack(struct kstatfs *sfs, struct obd_statfs *osfs);
 
-/* l_lock.c */
-struct lustre_lock {
-       int                     l_depth;
-       struct task_struct      *l_owner;
-       struct semaphore        l_sem;
-       spinlock_t              l_spin;
-};
-
-void l_lock_init(struct lustre_lock *);
-void l_lock(struct lustre_lock *);
-void l_unlock(struct lustre_lock *);
-int l_has_lock(struct lustre_lock *);
-
 /*
  * For md echo client
  */
index d262f63..bb67e43 100644 (file)
@@ -355,7 +355,7 @@ struct client_obd {
         struct mdc_rpc_lock     *cl_close_lock;
 
         /* mgc datastruct */
-       struct semaphore         cl_mgc_sem;
+       struct mutex             cl_mgc_mutex;
        struct local_oid_storage *cl_mgc_los;
        struct dt_object        *cl_mgc_configs_dir;
        atomic_t             cl_mgc_refcount;
index 5006484..4c35cab 100644 (file)
@@ -340,7 +340,7 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg)
         }
 
        init_rwsem(&cli->cl_sem);
-       sema_init(&cli->cl_mgc_sem, 1);
+       mutex_init(&cli->cl_mgc_mutex);
         cli->cl_conn_count = 0;
         memcpy(server_uuid.uuid, lustre_cfg_buf(lcfg, 2),
                min_t(unsigned int, LUSTRE_CFG_BUFLEN(lcfg, 2),
index b282497..8935814 100644 (file)
@@ -707,8 +707,8 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb)
        if (env == NULL)
                RETURN(-ENOMEM);
 
-       /* The mgc fs exclusion sem. Only one fs can be setup at a time. */
-       down(&cli->cl_mgc_sem);
+       /* The mgc fs exclusion mutex. Only one fs can be setup at a time. */
+       mutex_lock(&cli->cl_mgc_mutex);
 
        cfs_cleanup_group_info();
 
@@ -763,7 +763,7 @@ out_los:
        if (rc < 0) {
                local_oid_storage_fini(env, cli->cl_mgc_los);
                cli->cl_mgc_los = NULL;
-               up(&cli->cl_mgc_sem);
+               mutex_unlock(&cli->cl_mgc_mutex);
        }
 out_env:
        lu_env_fini(env);
@@ -797,7 +797,7 @@ static int mgc_fs_cleanup(struct obd_device *obd)
 
 unlock:
        class_decref(obd, "mgc_fs", obd);
-       up(&cli->cl_mgc_sem);
+       mutex_unlock(&cli->cl_mgc_mutex);
 
        RETURN(0);
 }
index e693e8d..8b91b64 100644 (file)
@@ -377,7 +377,7 @@ static int osd_ost_init(const struct lu_env *env, struct osd_device *dev)
 
        CFS_INIT_LIST_HEAD(&dev->od_ost_map->om_seq_list);
        rwlock_init(&dev->od_ost_map->om_seq_list_lock);
-       sema_init(&dev->od_ost_map->om_dir_init_sem, 1);
+       mutex_init(&dev->od_ost_map->om_dir_init_mutex);
 
         osd_push_ctxt(dev, &new, &save);
 
@@ -813,7 +813,7 @@ static struct osd_obj_seq *osd_seq_load(struct osd_thread_info *info,
                RETURN(osd_seq);
 
        /* Serializing init process */
-       down(&map->om_dir_init_sem);
+       mutex_lock(&map->om_dir_init_mutex);
 
        /* Check whether the seq has been added */
        read_lock(&map->om_seq_list_lock);
@@ -842,7 +842,7 @@ static struct osd_obj_seq *osd_seq_load(struct osd_thread_info *info,
        write_unlock(&map->om_seq_list_lock);
 
 cleanup:
-       up(&map->om_dir_init_sem);
+       mutex_unlock(&map->om_dir_init_mutex);
        if (rc != 0) {
                if (osd_seq != NULL)
                        OBD_FREE_PTR(osd_seq);
index 1524e61..009ec9a 100644 (file)
@@ -173,7 +173,7 @@ iam_load_idle_blocks(struct iam_container *c, iam_ptr_t blk)
        struct buffer_head *bh;
        int err;
 
-       LASSERT(down_trylock(&c->ic_idle_sem) != 0);
+       LASSERT(mutex_is_locked(&c->ic_idle_mutex));
 
        if (blk == 0)
                return NULL;
@@ -237,13 +237,13 @@ static int iam_format_guess(struct iam_container *c)
                idle_blocks = (__u32 *)(c->ic_root_bh->b_data +
                                        c->ic_descr->id_root_gap +
                                        sizeof(struct dx_countlimit));
-               down(&c->ic_idle_sem);
+               mutex_lock(&c->ic_idle_mutex);
                bh = iam_load_idle_blocks(c, le32_to_cpu(*idle_blocks));
                if (bh != NULL && IS_ERR(bh))
                        result = PTR_ERR(bh);
                else
                        c->ic_idle_bh = bh;
-               up(&c->ic_idle_sem);
+               mutex_unlock(&c->ic_idle_mutex);
        }
 
        return result;
@@ -260,7 +260,7 @@ int iam_container_init(struct iam_container *c,
        c->ic_object = inode;
        init_rwsem(&c->ic_sem);
        dynlock_init(&c->ic_tree_lock);
-       sema_init(&c->ic_idle_sem, 1);
+       mutex_init(&c->ic_idle_mutex);
        return 0;
 }
 EXPORT_SYMBOL(iam_container_init);
@@ -1665,9 +1665,9 @@ iam_new_node(handle_t *h, struct iam_container *c, iam_ptr_t *b, int *e)
        if (c->ic_idle_bh == NULL)
                goto newblock;
 
-       down(&c->ic_idle_sem);
+       mutex_lock(&c->ic_idle_mutex);
        if (unlikely(c->ic_idle_bh == NULL)) {
-               up(&c->ic_idle_sem);
+               mutex_unlock(&c->ic_idle_mutex);
                goto newblock;
        }
 
@@ -1685,7 +1685,7 @@ iam_new_node(handle_t *h, struct iam_container *c, iam_ptr_t *b, int *e)
                if (*e != 0)
                        goto fail;
 
-               up(&c->ic_idle_sem);
+               mutex_unlock(&c->ic_idle_mutex);
                bh = ldiskfs_bread(NULL, inode, *b, 0, e);
                if (bh == NULL)
                        return NULL;
@@ -1723,7 +1723,7 @@ iam_new_node(handle_t *h, struct iam_container *c, iam_ptr_t *b, int *e)
        }
 
        c->ic_idle_bh = idle;
-       up(&c->ic_idle_sem);
+       mutex_unlock(&c->ic_idle_mutex);
 
 got:
        /* get write access for the found buffer head */
@@ -1744,7 +1744,7 @@ newblock:
        return bh;
 
 fail:
-       up(&c->ic_idle_sem);
+       mutex_unlock(&c->ic_idle_mutex);
        ldiskfs_std_error(inode->i_sb, *e);
        return NULL;
 }
@@ -2382,7 +2382,7 @@ static void iam_recycle_leaf(handle_t *h, struct iam_path *p,
        int count;
        int rc;
 
-       down(&c->ic_idle_sem);
+       mutex_lock(&c->ic_idle_mutex);
        if (unlikely(c->ic_idle_failed)) {
                rc = -EFAULT;
                goto unlock;
@@ -2415,7 +2415,7 @@ static void iam_recycle_leaf(handle_t *h, struct iam_path *p,
        rc = iam_txn_dirty(h, p, c->ic_idle_bh);
 
 unlock:
-       up(&c->ic_idle_sem);
+       mutex_unlock(&c->ic_idle_mutex);
        if (rc != 0)
                CWARN("%.16s: idle blocks failed, will lose the blk %u\n",
                      LDISKFS_SB(inode->i_sb)->s_es->s_volume_name, blk);
index aeccdbc..697dd15 100644 (file)
@@ -485,10 +485,8 @@ struct iam_container {
          */
        struct rw_semaphore     ic_sem;
        struct dynlock       ic_tree_lock;
-       /*
-        * Protect ic_idle_bh
-        */
-       struct semaphore        ic_idle_sem;
+       /* Protect ic_idle_bh */
+       struct mutex         ic_idle_mutex;
        /*
         * BH for idle blocks
         */
index d806a70..185d63d 100644 (file)
@@ -45,6 +45,8 @@
 
 #if defined(__KERNEL__)
 
+/* struct mutex */
+#include <linux/mutex.h>
 /* struct rw_semaphore */
 #include <linux/rwsem.h>
 /* struct dentry */
@@ -152,7 +154,7 @@ struct osd_obj_map {
        rwlock_t         om_seq_list_lock; /* lock for seq_list */
        cfs_list_t       om_seq_list;      /* list head for seq */
        int              om_subdir_count;
-       struct semaphore om_dir_init_sem;
+       struct mutex     om_dir_init_mutex;
 };
 
 struct osd_mdobj {
index 8bb6dbd..1ad6fc9 100644 (file)
@@ -88,7 +88,7 @@ struct qsd_fsinfo *qsd_get_fsinfo(char *name, bool create)
                if (new == NULL)
                        RETURN(NULL);
 
-               sema_init(&new->qfs_sem, 1);
+               mutex_init(&new->qfs_mutex);
                CFS_INIT_LIST_HEAD(&new->qfs_qsd_list);
                strcpy(new->qfs_name, name);
                new->qfs_ref = 1;
@@ -160,7 +160,7 @@ int qsd_process_config(struct lustre_cfg *lcfg)
        if (strchr(valstr, 'g'))
                enabled |= 1 << GRPQUOTA;
 
-       down(&qfs->qfs_sem);
+       mutex_lock(&qfs->qfs_mutex);
        if (qfs->qfs_enabled[pool - LQUOTA_FIRST_RES] == enabled)
                /* no change required */
                GOTO(out, rc = 0);
@@ -205,7 +205,7 @@ int qsd_process_config(struct lustre_cfg *lcfg)
                }
        }
 out:
-       up(&qfs->qfs_sem);
+       mutex_unlock(&qfs->qfs_mutex);
        qsd_put_fsinfo(qfs);
        RETURN(0);
 }
index 05fa589..b533fdd 100644 (file)
@@ -192,7 +192,7 @@ struct qsd_fsinfo {
 
        /* list of all qsd_instance for this fs */
        cfs_list_t              qfs_qsd_list;
-       struct semaphore        qfs_sem;
+       struct mutex            qfs_mutex;
 
        /* link to the global quota fsinfo list.  */
        cfs_list_t              qfs_link;
index bf3dfcc..3e396d5 100644 (file)
@@ -512,10 +512,10 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd)
 
        /* release per-filesystem information */
        if (qsd->qsd_fsinfo != NULL) {
-               down(&qsd->qsd_fsinfo->qfs_sem);
+               mutex_lock(&qsd->qsd_fsinfo->qfs_mutex);
                /* remove from the list of fsinfo */
                cfs_list_del_init(&qsd->qsd_link);
-               up(&qsd->qsd_fsinfo->qfs_sem);
+               mutex_unlock(&qsd->qsd_fsinfo->qfs_mutex);
                qsd_put_fsinfo(qsd->qsd_fsinfo);
                qsd->qsd_fsinfo = NULL;
        }
@@ -612,9 +612,9 @@ struct qsd_instance *qsd_init(const struct lu_env *env, char *svname,
        }
 
        /* add in the list of lquota_fsinfo */
-       down(&qsd->qsd_fsinfo->qfs_sem);
+       mutex_lock(&qsd->qsd_fsinfo->qfs_mutex);
        list_add_tail(&qsd->qsd_link, &qsd->qsd_fsinfo->qfs_qsd_list);
-       up(&qsd->qsd_fsinfo->qfs_sem);
+       mutex_unlock(&qsd->qsd_fsinfo->qfs_mutex);
 
        /* register procfs directory */
        qsd->qsd_proc = lprocfs_seq_register(QSD_DIR, osd_proc,