MODULES := osd_zfs
-osd_zfs-objs := osd_handler.o osd_lproc.o udmu.o
+osd_zfs-objs := osd_handler.o osd_lproc.o udmu.o osd_quota.o
osd_zfs-objs += osd_object.o osd_io.o osd_oi.o osd_xattr.o osd_index.o
EXTRA_PRE_CFLAGS += -I@SPL_DIR@ -I@SPL_DIR@/include
static int osd_shutdown(const struct lu_env *env, struct osd_device *o)
{
+ ENTRY;
+
+ /* shutdown quota slave instance associated with the device */
+ if (o->od_quota_slave != NULL) {
+ qsd_fini(env, o->od_quota_slave);
+ o->od_quota_slave = NULL;
+ }
+
RETURN(0);
}
static int osd_prepare(const struct lu_env *env, struct lu_device *pdev,
struct lu_device *dev)
{
- return 0;
+ struct osd_device *osd = osd_dev(dev);
+ int rc = 0;
+ ENTRY;
+
+ /* initialize quota slave instance */
+ osd->od_quota_slave = qsd_init(env, osd->od_svname, &osd->od_dt_dev,
+ osd->od_proc_entry);
+ if (IS_ERR(osd->od_quota_slave)) {
+ rc = PTR_ERR(osd->od_quota_slave);
+ osd->od_quota_slave = NULL;
+ }
+
+ RETURN(rc);
}
struct lu_device_operations osd_lu_ops = {
dt->do_index_ops = &osd_dir_ops;
else
RETURN(-ENOTDIR);
-#if 0
} else if (unlikely(feat == &dt_acct_features)) {
LASSERT(fid_is_acct(lu_object_fid(&dt->do_lu)));
dt->do_index_ops = &osd_acct_index_ops;
-#endif
} else if (udmu_object_is_zap(obj->oo_db) &&
dt->do_index_ops == NULL) {
/* For index file, we don't support variable key & record sizes
#define _OSD_INTERNAL_H
#include <dt_object.h>
+#include <lquota.h>
#include <sys/arc.h>
#include <sys/nvpair.h>
uint64_t od_iusr_oid;
uint64_t od_igrp_oid;
+ /* quota slave instance */
+ struct qsd_instance *od_quota_slave;
+
/* used to debug zerocopy logic: the fields track all
* allocated, loaned and referenced buffers in use.
* to be removed once the change is tested well. */