Пример #1
0
/* Must be called under the lov_stripe_lock() */
int lov_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm,
                   obd_off size, int shrink)
{
    struct lov_oinfo *loi;
    int stripe = 0;
    __u64 kms;
    ENTRY;

    LASSERT_SPIN_LOCKED(&lsm->lsm_lock);
#ifdef __KERNEL__
    LASSERT(lsm->lsm_lock_owner == cfs_curproc_pid());
#endif

    if (shrink) {
        for (; stripe < lsm->lsm_stripe_count; stripe++) {
            struct lov_oinfo *loi = lsm->lsm_oinfo[stripe];
            kms = lov_size_to_stripe(lsm, size, stripe);
            CDEBUG(D_INODE,
                   "stripe %d KMS %sing "LPU64"->"LPU64"\n",
                   stripe, kms > loi->loi_kms ? "increas":"shrink",
                   loi->loi_kms, kms);
            loi_kms_set(loi, loi->loi_lvb.lvb_size = kms);
        }
        RETURN(0);
    }

    if (size > 0)
        stripe = lov_stripe_number(lsm, size - 1);
    kms = lov_size_to_stripe(lsm, size, stripe);
    loi = lsm->lsm_oinfo[stripe];

    CDEBUG(D_INODE, "stripe %d KMS %sincreasing "LPU64"->"LPU64"\n",
           stripe, kms > loi->loi_kms ? "" : "not ", loi->loi_kms, kms);
    if (kms > loi->loi_kms)
        loi_kms_set(loi, kms);

    RETURN(0);
}
Пример #2
0
/* Must be called under the lov_stripe_lock() */
int lov_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm,
		   u64 size, int shrink)
{
	struct lov_oinfo *loi;
	int stripe = 0;
	__u64 kms;

	assert_spin_locked(&lsm->lsm_lock);
	LASSERT(lsm->lsm_lock_owner == current_pid());

	if (shrink) {
		for (; stripe < lsm->lsm_stripe_count; stripe++) {
			struct lov_oinfo *loi = lsm->lsm_oinfo[stripe];

			kms = lov_size_to_stripe(lsm, size, stripe);
			CDEBUG(D_INODE,
			       "stripe %d KMS %sing %llu->%llu\n",
			       stripe, kms > loi->loi_kms ? "increase":"shrink",
			       loi->loi_kms, kms);
			loi->loi_lvb.lvb_size = kms;
			loi_kms_set(loi, loi->loi_lvb.lvb_size);
		}
		return 0;
	}

	if (size > 0)
		stripe = lov_stripe_number(lsm, size - 1);
	kms = lov_size_to_stripe(lsm, size, stripe);
	loi = lsm->lsm_oinfo[stripe];

	CDEBUG(D_INODE, "stripe %d KMS %sincreasing %llu->%llu\n",
	       stripe, kms > loi->loi_kms ? "" : "not ", loi->loi_kms, kms);
	if (kms > loi->loi_kms)
		loi_kms_set(loi, kms);

	return 0;
}
Пример #3
0
int osc_attr_set(const struct lu_env *env, struct cl_object *obj,
		 const struct cl_attr *attr, unsigned valid)
{
	struct lov_oinfo *oinfo = cl2osc(obj)->oo_oinfo;
	struct ost_lvb   *lvb   = &oinfo->loi_lvb;

	if (valid & CAT_SIZE)
		lvb->lvb_size = attr->cat_size;
	if (valid & CAT_MTIME)
		lvb->lvb_mtime = attr->cat_mtime;
	if (valid & CAT_ATIME)
		lvb->lvb_atime = attr->cat_atime;
	if (valid & CAT_CTIME)
		lvb->lvb_ctime = attr->cat_ctime;
	if (valid & CAT_BLOCKS)
		lvb->lvb_blocks = attr->cat_blocks;
	if (valid & CAT_KMS) {
		CDEBUG(D_CACHE, "set kms from %llu to %llu\n",
		       oinfo->loi_kms, (__u64)attr->cat_kms);
		loi_kms_set(oinfo, attr->cat_kms);
	}
	return 0;
}