From: Sergey Cheremencev Date: Fri, 6 Jul 2018 19:51:14 +0000 (+0300) Subject: LU-11758 osp: remove assertion from statfs X-Git-Tag: 2.12.55~10 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=bcfd0e040d1536410ba6c301f64d4f8ea6a8797a LU-11758 osp: remove assertion from statfs Sequence can't be changed or overflowed in case of IDIF. Thus don't tigger kernel panic for below case: last_created [0x100000001:0x15:0x0], next_fid [0x100000000:0xfffffff6:0x0] The same assertion that excepts IDIFs exists in osp_fid_diff. Also the patch is adding several optimizations in osp_precreate_send. Change-Id: I3966dfc621999d065c9b485d387938085fccb140 Cray-bug-id: LUS-2386 Signed-off-by: Sergey Cheremencev Reviewed-on: https://es-gerrit.dev.cray.com/153571 Reviewed-by: Alexander Boyko Reviewed-by: Alexey Lyashkov Reviewed-on: https://review.whamcloud.com/33832 Reviewed-by: Andreas Dilger Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Alexandr Boyko Reviewed-by: Oleg Drokin --- diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c index a85588d..40e631e 100644 --- a/lustre/osp/osp_dev.c +++ b/lustre/osp/osp_dev.c @@ -754,13 +754,8 @@ static int osp_statfs(const struct lu_env *env, struct dt_device *dev, * how many objects are available for immediate creation */ spin_lock(&d->opd_pre_lock); - LASSERTF(fid_seq(&d->opd_pre_last_created_fid) == - fid_seq(&d->opd_pre_used_fid), - "last_created "DFID", next_fid "DFID"\n", - PFID(&d->opd_pre_last_created_fid), - PFID(&d->opd_pre_used_fid)); - sfs->os_fprecreated = fid_oid(&d->opd_pre_last_created_fid) - - fid_oid(&d->opd_pre_used_fid); + sfs->os_fprecreated = osp_fid_diff(&d->opd_pre_last_created_fid, + &d->opd_pre_used_fid); sfs->os_fprecreated -= d->opd_pre_reserved; LASSERTF(sfs->os_fprecreated <= OST_MAX_PRECREATE * 2, "last_created "DFID", next_fid "DFID", reserved %llu\n", diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c index db6851e..9030aa8 100644 --- a/lustre/osp/osp_precreate.c +++ b/lustre/osp/osp_precreate.c @@ -625,15 +625,9 @@ static int osp_precreate_send(const struct lu_env *env, struct osp_device *d) *fid = d->opd_pre_last_created_fid; rc = osp_precreate_fids(env, d, fid, &grow); - if (rc == 1) { + if (rc == 1) /* Current seq has been used up*/ - if (!osp_is_fid_client(d)) { - osp_pre_update_status(d, -ENOSPC); - rc = -ENOSPC; - } - wake_up(&d->opd_pre_waitq); - GOTO(out_req, rc); - } + GOTO(out_req, rc = -ENOSPC); if (!osp_is_fid_client(d)) { /* Non-FID client will always send seq 0 because of