if (rc == sizeof(*ff)) {
/* 2) delete the old XATTR_NAME_FID */
dquot_initialize(inode);
- rc = osd_removexattr(dentry, inode, XATTR_NAME_FID);
+ rc = ll_vfs_removexattr(dentry, inode, XATTR_NAME_FID);
if (rc)
GOTO(stop, rc);
GOTO(out, rc = 0);
}
- if (!scrub->os_partial_scan)
+ if (!scrub->os_partial_scan) {
+ spin_lock(&scrub->os_lock);
scrub->os_full_speed = 1;
+ spin_unlock(&scrub->os_lock);
+ }
switch (val) {
case SCRUB_NEXT_NOLMA:
GOTO(out, rc = 0);
} else {
- if (!scrub->os_partial_scan)
+ if (!scrub->os_partial_scan) {
+ spin_lock(&scrub->os_lock);
scrub->os_full_speed = 1;
-
+ spin_unlock(&scrub->os_lock);
+ }
sf->sf_flags |= SF_INCONSISTENT;
/* XXX: If the device is restored from file-level backup, then
if (flags & SS_RESET)
scrub_file_reset(scrub, dev->od_uuid, 0);
+ spin_lock(&scrub->os_lock);
if (flags & SS_AUTO_FULL) {
scrub->os_full_speed = 1;
scrub->os_partial_scan = 0;
scrub->os_partial_scan = 0;
}
- spin_lock(&scrub->os_lock);
scrub->os_in_prior = 0;
scrub->os_waiting = 0;
scrub->os_paused = 0;
oii = list_entry(scrub->os_inconsistent_items.next,
struct osd_inconsistent_item, oii_list);
- spin_unlock(&scrub->os_lock);
*oic = &oii->oii_cache;
scrub->os_in_prior = 1;
+ spin_unlock(&scrub->os_lock);
return 0;
}
rc = osd_scrub_check_update(info, dev, oic, rc);
if (rc != 0) {
+ spin_lock(&scrub->os_lock);
scrub->os_in_prior = 0;
+ spin_unlock(&scrub->os_lock);
return rc;
}
}
if (scrub->os_in_prior) {
+ spin_lock(&scrub->os_lock);
scrub->os_in_prior = 0;
+ spin_unlock(&scrub->os_lock);
return 0;
}
LASSERT(!(flags & SS_AUTO_PARTIAL));
down_write(&scrub->os_rwsem);
+ spin_lock(&scrub->os_lock);
scrub->os_in_join = 1;
if (flags & SS_SET_FAILOUT)
sf->sf_param |= SP_FAILOUT;
sf->sf_flags |= SF_AUTO;
scrub->os_full_speed = 1;
}
+ spin_unlock(&scrub->os_lock);
scrub->os_new_checked = 0;
if (sf->sf_pos_last_checkpoint != 0)
if (rc == 0) {
__u64 used = ksfs->f_files - ksfs->f_ffree;
- do_div(used, sf->sf_items_updated_prior);
+ used = div64_u64(used, sf->sf_items_updated_prior);
/* If we hit too much inconsistent OI
* mappings during the partial scan,
* then scan the device completely. */
filp->f_op = fops;
filp->private_data = NULL;
filp->f_cred = current_cred();
- set_file_inode(filp, inode);
+ filp->f_inode = inode;
rc = osd_security_file_alloc(filp);
if (rc)
RETURN(rc);
* FID directly, instead, the OI scrub will scan the OI structure
* and try to re-generate the LMA from the OI mapping. But if the
* OI mapping crashed or lost also, then we have to give up under
- * double failure cases. */
+ * double failure cases.
+ */
+ spin_lock(&scrub->os_lock);
scrub->os_convert_igif = 1;
+ spin_unlock(&scrub->os_lock);
child = osd_lookup_one_len_unlocked(dev, dot_lustre_name, dentry,
strlen(dot_lustre_name));
if (IS_ERR(child)) {
/* od_otable_mutex: prevent curcurrent start/stop */
mutex_lock(&dev->od_otable_mutex);
+ spin_lock(&scrub->os_lock);
scrub->os_paused = 1;
+ spin_unlock(&scrub->os_lock);
scrub_stop(scrub);
mutex_unlock(&dev->od_otable_mutex);
}
}
inode = file_inode(filp);
+ ldiskfs_set_inode_flag(inode, LDISKFS_INODE_JOURNAL_DATA);
if (!dev->od_dt_dev.dd_rdonly) {
/* 'What the @fid is' is not imporatant, because the object
* has no OI mapping, and only is visible inside the OSD.*/
RETURN(obj ? PTR_ERR(obj) : -ENOENT);
#ifndef HAVE_S_UUID_AS_UUID_T
- memcpy(dev->od_uuid.b, sb->s_uuid, UUID_SIZE);
+ memcpy(dev->od_uuid.b, sb->s_uuid, sizeof(dev->od_uuid));
#else
uuid_copy(&dev->od_uuid, &sb->s_uuid);
#endif
dt_object_put_nocache(env, scrub->os_obj);
scrub->os_obj = NULL;
}
- if (dev->od_oi_table != NULL)
- osd_oi_fini(osd_oti_get(env), dev);
}
/* object table based iteration APIs */
oii->oii_cache = *oic;
oii->oii_insert = insert;
+ spin_lock(&lscrub->os_lock);
if (lscrub->os_partial_scan) {
__u64 now = ktime_get_real_seconds();
lscrub->os_full_scrub = 1;
}
- spin_lock(&lscrub->os_lock);
if (unlikely(!thread_is_running(thread))) {
spin_unlock(&lscrub->os_lock);
OBD_FREE_PTR(oii);