struct dt_device *dev);
/**
- * Wait pending quota update finish
- *
- * There might be a window that quota usage has been updated,
- * but commit callback to reduce pending write have not been
- * finished, this is used to wait all pending update done.
- *
- * \param[in] dev dt device
- */
- void (*dt_wait_quota_pending)(struct dt_device *dev);
-
- /**
* Start transaction commit asynchronously.
*
return dev->dd_ops->dt_ro(env, dev);
}
-static inline void dt_wait_quota_pending(struct dt_device *dev)
-{
- LASSERT(dev);
- LASSERT(dev->dd_ops);
- if (dev->dd_ops->dt_wait_quota_pending)
- dev->dd_ops->dt_wait_quota_pending(dev);
-}
-
static inline int dt_declare_insert(const struct lu_env *env,
struct dt_object *dt,
const struct dt_rec *rec,
RETURN(0);
}
-static void osd_wait_quota_pending(struct dt_device *d)
-{
- struct osd_device *o = osd_dt_dev(d);
-
- if (o->od_quota_slave_md != NULL ||
- o->od_quota_slave_dt != NULL)
- txg_wait_callbacks(spa_get_dsl(dmu_objset_spa(o->od_os)));
-}
-
static struct dt_device_operations osd_dt_ops = {
.dt_root_get = osd_root_get,
.dt_statfs = osd_statfs,
.dt_sync = osd_sync,
.dt_commit_async = osd_commit_async,
.dt_ro = osd_ro,
- .dt_wait_quota_pending = osd_wait_quota_pending,
};
/*
*/
if (lqe->lqe_pending_write >= space && !wait_pending) {
wait_pending = 1;
- dt_wait_quota_pending(qqi->qqi_qsd->qsd_dev);
+ dt_sync(env, qqi->qqi_qsd->qsd_dev);
goto again;
}