diff --git a/scst/include/scst.h b/scst/include/scst.h index ded2245be..083484b83 100644 --- a/scst/include/scst.h +++ b/scst/include/scst.h @@ -4210,9 +4210,20 @@ const struct sysfs_ops *scst_sysfs_get_sysfs_ops(void); struct sysfs_ops *scst_sysfs_get_sysfs_ops(void); #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) && defined(CONFIG_LOCKDEP) +#define SCST_SET_DEP_MAP(work, dm) do { (work)->dep_map = dm; } while (0) +#define SCST_KOBJECT_PUT_AND_WAIT(kobj, category, c, dep_map) \ + scst_kobject_put_and_wait(kobj, category, c, dep_map) void scst_kobject_put_and_wait(struct kobject *kobj, const char *category, struct completion *c, struct lockdep_map *dep_map); +#else +#define SCST_SET_DEP_MAP(work, dm) do { } while (0) +#define SCST_KOBJECT_PUT_AND_WAIT(kobj, category, c, dep_map) \ + scst_kobject_put_and_wait(kobj, category, c) +void scst_kobject_put_and_wait(struct kobject *kobj, const char *category, + struct completion *c); +#endif /* * Returns target driver's root sysfs kobject. diff --git a/scst/src/dev_handlers/scst_vdisk.c b/scst/src/dev_handlers/scst_vdisk.c index 2d596f276..7ab5a4dff 100644 --- a/scst/src/dev_handlers/scst_vdisk.c +++ b/scst/src/dev_handlers/scst_vdisk.c @@ -5362,7 +5362,7 @@ static ssize_t vcdrom_sysfs_filename_store(struct kobject *kobj, work->buf = i_buf; work->dev = dev; - work->dep_map = &scst_dev_dep_map; + SCST_SET_DEP_MAP(work, &scst_dev_dep_map); kobject_get(&dev->dev_kobj); res = scst_sysfs_queue_wait_work(work); @@ -5652,7 +5652,7 @@ static ssize_t vdev_sysfs_filename_show(struct kobject *kobj, work->dev = dev; - work->dep_map = &scst_dev_dep_map; + SCST_SET_DEP_MAP(work, &scst_dev_dep_map); kobject_get(&dev->dev_kobj); scst_sysfs_work_get(work); @@ -5709,7 +5709,7 @@ static ssize_t vdisk_sysfs_resync_size_store(struct kobject *kobj, work->dev = dev; - work->dep_map = &scst_dev_dep_map; + SCST_SET_DEP_MAP(work, &scst_dev_dep_map); kobject_get(&dev->dev_kobj); res = scst_sysfs_queue_wait_work(work); diff --git a/scst/src/scst_mem.c b/scst/src/scst_mem.c index fb768f2b3..b14759735 100644 --- a/scst/src/scst_mem.c +++ b/scst/src/scst_mem.c @@ -2093,7 +2093,7 @@ static void scst_sgv_sysfs_del(struct sgv_pool *pool) kobject_del(&pool->sgv_kobj); - scst_kobject_put_and_wait(&pool->sgv_kobj, "SGV pool", &c, + SCST_KOBJECT_PUT_AND_WAIT(&pool->sgv_kobj, "SGV pool", &c, &scst_pool_dep_map); TRACE_EXIT(); diff --git a/scst/src/scst_sysfs.c b/scst/src/scst_sysfs.c index 64f7f192e..747beca14 100644 --- a/scst/src/scst_sysfs.c +++ b/scst/src/scst_sysfs.c @@ -1106,8 +1106,11 @@ out_del: } void scst_kobject_put_and_wait(struct kobject *kobj, const char *category, - struct completion *c, - struct lockdep_map *dep_map) + struct completion *c +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) && defined(CONFIG_LOCKDEP) + , struct lockdep_map *dep_map +#endif + ) { char *name; @@ -1158,7 +1161,7 @@ void scst_tgtt_sysfs_del(struct scst_tgt_template *tgtt) kobject_del(&tgtt->tgtt_kobj); - scst_kobject_put_and_wait(&tgtt->tgtt_kobj, "target template", &c, + SCST_KOBJECT_PUT_AND_WAIT(&tgtt->tgtt_kobj, "target template", &c, &scst_tgtt_dep_map); TRACE_EXIT(); @@ -2178,7 +2181,7 @@ static ssize_t scst_tgt_enable_store(struct kobject *kobj, work->tgt = tgt; work->enable = enable; - work->dep_map = &scst_tgt_dep_map; + SCST_SET_DEP_MAP(work, &scst_tgt_dep_map); kobject_get(&tgt->tgt_kobj); res = scst_sysfs_queue_wait_work(work); @@ -2294,7 +2297,7 @@ static ssize_t scst_rel_tgt_id_store(struct kobject *kobj, work->tgt_r = tgt; work->rel_tgt_id = rel_tgt_id; - work->dep_map = &scst_tgt_dep_map; + SCST_SET_DEP_MAP(work, &scst_tgt_dep_map); kobject_get(&tgt->tgt_kobj); res = scst_sysfs_queue_wait_work(work); @@ -2558,7 +2561,7 @@ void scst_tgt_sysfs_put(struct scst_tgt *tgt) tgt->tgt_kobj_release_cmpl = &c; - scst_kobject_put_and_wait(&tgt->tgt_kobj, "target", &c, + SCST_KOBJECT_PUT_AND_WAIT(&tgt->tgt_kobj, "target", &c, &scst_tgt_dep_map); TRACE_EXIT(); @@ -3070,7 +3073,7 @@ void scst_dev_sysfs_del(struct scst_device *dev) kobject_put(dev->dev_exp_kobj); - scst_kobject_put_and_wait(&dev->dev_kobj, "device", &c, + SCST_KOBJECT_PUT_AND_WAIT(&dev->dev_kobj, "device", &c, &scst_dev_dep_map); TRACE_EXIT(); @@ -3274,7 +3277,7 @@ void scst_tgt_dev_sysfs_del(struct scst_tgt_dev *tgt_dev) kobject_del(&tgt_dev->tgt_dev_kobj); - scst_kobject_put_and_wait(&tgt_dev->tgt_dev_kobj, "tgt_dev", &c, + SCST_KOBJECT_PUT_AND_WAIT(&tgt_dev->tgt_dev_kobj, "tgt_dev", &c, &scst_tgt_dev_dep_map); TRACE_EXIT(); @@ -3501,7 +3504,7 @@ static ssize_t scst_sess_latency_store(struct kobject *kobj, work->sess = sess; - work->dep_map = &sess->dep_map; + SCST_SET_DEP_MAP(work, &sess->dep_map); kobject_get(&sess->sess_kobj); res = scst_sysfs_queue_wait_work(work); @@ -3583,7 +3586,7 @@ static ssize_t scst_sess_sysfs_active_commands_show(struct kobject *kobj, work->sess = sess; - work->dep_map = &scst_sess_dep_map; + SCST_SET_DEP_MAP(work, &scst_sess_dep_map); kobject_get(&sess->sess_kobj); res = scst_sysfs_queue_wait_work(work); @@ -3830,7 +3833,7 @@ void scst_sess_sysfs_del(struct scst_session *sess) kobject_del(&sess->sess_kobj); - scst_kobject_put_and_wait(&sess->sess_kobj, "session", &c, + SCST_KOBJECT_PUT_AND_WAIT(&sess->sess_kobj, "session", &c, &scst_sess_dep_map); out: @@ -3907,7 +3910,7 @@ void scst_acg_dev_sysfs_del(struct scst_acg_dev *acg_dev) kobject_del(&acg_dev->acg_dev_kobj); - scst_kobject_put_and_wait(&acg_dev->acg_dev_kobj, "acg_dev", &c, + SCST_KOBJECT_PUT_AND_WAIT(&acg_dev->acg_dev_kobj, "acg_dev", &c, &scst_acg_dev_dep_map); TRACE_EXIT(); @@ -4292,7 +4295,7 @@ void scst_acg_sysfs_del(struct scst_acg *acg) kobject_put(acg->luns_kobj); kobject_put(acg->initiators_kobj); - scst_kobject_put_and_wait(&acg->acg_kobj, "acg", &c, + SCST_KOBJECT_PUT_AND_WAIT(&acg->acg_kobj, "acg", &c, &scst_acg_dep_map); TRACE_EXIT(); @@ -4933,7 +4936,7 @@ void scst_devt_sysfs_del(struct scst_dev_type *devt) kobject_del(&devt->devt_kobj); - scst_kobject_put_and_wait(&devt->devt_kobj, "dev handler template", &c, + SCST_KOBJECT_PUT_AND_WAIT(&devt->devt_kobj, "dev handler template", &c, &scst_devt_dep_map); TRACE_EXIT(); @@ -5035,7 +5038,7 @@ static ssize_t scst_dg_devs_mgmt_store(struct kobject *kobj, swap(work->buf, cmd); work->kobj = kobj; - work->dep_map = &scst_dg_dep_map; + SCST_SET_DEP_MAP(work, &scst_dg_dep_map); kobject_get(kobj); res = scst_sysfs_queue_wait_work(work); if (res) @@ -5258,7 +5261,7 @@ static ssize_t scst_tg_preferred_store(struct kobject *kobj, swap(work->buf, cmd); work->kobj = kobj; - work->dep_map = &scst_tg_dep_map; + SCST_SET_DEP_MAP(work, &scst_tg_dep_map); kobject_get(kobj); res = scst_sysfs_queue_wait_work(work); if (res) @@ -5339,7 +5342,7 @@ static ssize_t scst_tg_state_store(struct kobject *kobj, swap(work->buf, cmd); work->kobj = kobj; - work->dep_map = &scst_tg_dep_map; + SCST_SET_DEP_MAP(work, &scst_tg_dep_map); kobject_get(kobj); res = scst_sysfs_queue_wait_work(work); if (res) @@ -5424,7 +5427,7 @@ static ssize_t scst_tg_mgmt_store(struct kobject *kobj, swap(work->buf, cmd); work->kobj = kobj; - work->dep_map = &scst_tg_dep_map; + SCST_SET_DEP_MAP(work, &scst_tg_dep_map); kobject_get(kobj); res = scst_sysfs_queue_wait_work(work); if (res) @@ -5548,7 +5551,7 @@ static ssize_t scst_dg_tgs_mgmt_store(struct kobject *kobj, swap(work->buf, cmd); work->kobj = kobj; - work->dep_map = &scst_dg_dep_map; + SCST_SET_DEP_MAP(work, &scst_dg_dep_map); kobject_get(kobj); res = scst_sysfs_queue_wait_work(work); if (res)