Whamcloud - gitweb
LU-11758 osp: remove assertion from statfs 32/33832/6
authorSergey Cheremencev <c17829@cray.com>
Fri, 6 Jul 2018 19:51:14 +0000 (22:51 +0300)
committerOleg Drokin <green@whamcloud.com>
Sun, 16 Jun 2019 03:25:11 +0000 (03:25 +0000)
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 <c17829@cray.com>
Reviewed-on: https://es-gerrit.dev.cray.com/153571
Reviewed-by: Alexander Boyko <c17825@cray.com>
Reviewed-by: Alexey Lyashkov <c17817@cray.com>
Reviewed-on: https://review.whamcloud.com/33832
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Alexandr Boyko <c17825@cray.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osp/osp_dev.c
lustre/osp/osp_precreate.c

index a85588d..40e631e 100644 (file)
@@ -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",
index db6851e..9030aa8 100644 (file)
@@ -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