Whamcloud - gitweb
LU-8085 scrub: increase iteration cursor to skip unused inodes
[fs/lustre-release.git] / lustre / osd-ldiskfs / osd_scrub.c
index 8c0c5ec..0e497c3 100644 (file)
@@ -1415,8 +1415,11 @@ full:
                       *count < max) {
                        if (param.offset +
                                ldiskfs_itable_unused_count(param.sb, desc) >
-                           LDISKFS_INODES_PER_GROUP(param.sb))
+                           LDISKFS_INODES_PER_GROUP(param.sb)) {
+                               *pos = 1 + (param.bg + 1) *
+                                       LDISKFS_INODES_PER_GROUP(param.sb);
                                goto next_group;
+                       }
 
                        rc = next(info, dev, &param, &oic, noslot);
                        switch (rc) {
@@ -2394,8 +2397,9 @@ static int do_osd_scrub_start(struct osd_device *dev, __u32 flags)
 again:
        if (thread_is_running(thread)) {
                spin_unlock(&scrub->os_lock);
-               if (!(scrub->os_file.sf_flags & SF_AUTO) ||
-                    (flags & (SS_AUTO_FULL | SS_AUTO_PARTIAL)))
+               if (!(scrub->os_file.sf_flags & SF_AUTO ||
+                     scrub->os_partial_scan) ||
+                    (flags & SS_AUTO_PARTIAL))
                        RETURN(-EALREADY);
 
                osd_scrub_join(dev, flags, false);
@@ -2526,7 +2530,7 @@ int osd_scrub_setup(const struct lu_env *env, struct osd_device *dev)
                RETURN(PTR_ERR(filp));
        }
 
-       inode = filp->f_path.dentry->d_inode;
+       inode = file_inode(filp);
        /* 'What the @fid is' is not imporatant, because the object
         * has no OI mapping, and only is visible inside the OSD.*/
        lu_igif_build(fid, inode->i_ino, inode->i_generation);
@@ -2894,6 +2898,8 @@ static int osd_otable_it_load(const struct lu_env *env,
        if (it->ooi_user_ready)
                RETURN(-EPERM);
 
+       LASSERT(!scrub->os_partial_scan);
+
        if (hash > OSD_OTABLE_MAX_HASH)
                hash = OSD_OTABLE_MAX_HASH;