From: Yang Sheng Date: Wed, 18 May 2016 15:52:29 +0000 (+0800) Subject: LU-8147 osd-zfs: fix osd_mount error path X-Git-Tag: 2.8.54~20 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=60270c6488b01db756eb216548f83f2826972854 LU-8147 osd-zfs: fix osd_mount error path The osd_oi_fini will grab osl_seq_list_lock for cleanup. But this lock is not initilized if osd_mount return and failed before osd_oi_init. Signed-off-by: Yang Sheng Change-Id: I8f76a87e22d131e6ab9034d8ecc42b47e301ff25 Reviewed-on: http://review.whamcloud.com/20309 Tested-by: Jenkins Reviewed-by: Mike Pershin Reviewed-by: John L. Hammond Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c index ff4bc58..334310d 100644 --- a/lustre/osd-zfs/osd_handler.c +++ b/lustre/osd-zfs/osd_handler.c @@ -1089,13 +1089,19 @@ static struct lu_device *osd_device_alloc(const struct lu_env *env, struct lu_device_type *type, struct lustre_cfg *cfg) { - struct osd_device *dev; - int rc; + struct osd_device *dev; + struct osd_seq_list *osl; + int rc; OBD_ALLOC_PTR(dev); if (dev == NULL) return ERR_PTR(-ENOMEM); + osl = &dev->od_seq_list; + INIT_LIST_HEAD(&osl->osl_seq_list); + rwlock_init(&osl->osl_seq_list_lock); + sema_init(&osl->osl_seq_init_sem, 1); + rc = dt_device_init(&dev->od_dt_dev, type); if (rc == 0) { rc = osd_device_init0(env, dev, cfg); diff --git a/lustre/osd-zfs/osd_oi.c b/lustre/osd-zfs/osd_oi.c index 6cb2c80..0802bf4 100644 --- a/lustre/osd-zfs/osd_oi.c +++ b/lustre/osd-zfs/osd_oi.c @@ -619,15 +619,6 @@ osd_oi_probe(const struct lu_env *env, struct osd_device *o, int *count) RETURN(0); } -static void osd_ost_seq_init(const struct lu_env *env, struct osd_device *osd) -{ - struct osd_seq_list *osl = &osd->od_seq_list; - - INIT_LIST_HEAD(&osl->osl_seq_list); - rwlock_init(&osl->osl_seq_list_lock); - sema_init(&osl->osl_seq_init_sem, 1); -} - static void osd_ost_seq_fini(const struct lu_env *env, struct osd_device *osd) { struct osd_seq_list *osl = &osd->od_seq_list; @@ -662,7 +653,6 @@ osd_oi_init_compat(const struct lu_env *env, struct osd_device *o) o->od_O_id = sdb; - osd_ost_seq_init(env, o); /* Create on-disk indexes to maintain per-UID/GID inode usage. * Those new indexes are created in the top-level ZAP outside the * namespace in order not to confuse ZPL which might interpret those