Whamcloud - gitweb
LU-1842 quota: define quota records for glb/slv indexes
[fs/lustre-release.git] / lustre / include / lquota.h
1 /*
2  * GPL HEADER START
3  *
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License version 2 for more details (a copy is included
14  * in the LICENSE file that accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License
17  * version 2 along with this program; if not, write to the
18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19  * Boston, MA 021110-1307, USA
20  *
21  * GPL HEADER END
22  */
23 /*
24  * Copyright (c) 2011, 2012, Whamcloud, Inc.
25  * Use is subject to license terms.
26  */
27
28 #include <dt_object.h>
29 #include <lustre_fid.h>
30 #include <lustre_dlm.h>
31
32 #ifndef _LUSTRE_LQUOTA_H
33 #define _LUSTRE_LQUOTA_H
34
35 /* Gather all quota record type in an union that can be used to read any records
36  * from disk. All fields of these records must be 64-bit aligned, otherwise the
37  * OSD layer may swab them incorrectly. */
38 union lquota_rec {
39         struct lquota_glb_rec   lqr_glb_rec;
40         struct lquota_slv_rec   lqr_slv_rec;
41         struct lquota_acct_rec  lqr_acct_rec;
42 };
43
44 /* Name used in the configuration logs to identify the default metadata pool
45  * (composed of all the MDTs, with pool ID 0) and the default data pool (all
46  * the OSTs, with pool ID 0 too). */
47 #define QUOTA_METAPOOL_NAME   "mdt="
48 #define QUOTA_DATAPOOL_NAME   "ost="
49
50 /*
51  * Quota enforcement support on slaves
52  */
53
54 struct qsd_instance;
55
56 /* The quota slave feature is implemented under the form of a library.
57  * The API is the following:
58  *
59  * - qsd_init(): the user (mostly the OSD layer) should first allocate a qsd
60  *               instance via qsd_init(). This sets up on-disk objects
61  *               associated with the quota slave feature and initiates the quota
62  *               reintegration procedure if needed. qsd_init() should typically
63  *               be called when ->ldo_start is invoked.
64  *
65  * - qsd_fini(): is used to release a qsd_instance structure allocated with
66  *               qsd_init(). This releases all quota slave objects and frees the
67  *               structures associated with the qsd_instance.
68  *
69  * Below are the function prototypes to be used by OSD layer to manage quota
70  * enforcement. Arguments are documented where each function is defined.  */
71
72 struct qsd_instance *qsd_init(const struct lu_env *, char *, struct dt_device *,
73                               cfs_proc_dir_entry_t *);
74
75 void qsd_fini(const struct lu_env *, struct qsd_instance *);
76
77 /* helper function used by MDT & OFD to retrieve quota accounting information
78  * on slave */
79 int lquotactl_slv(const struct lu_env *, struct dt_device *,
80                   struct obd_quotactl *);
81
82 #ifdef LPROCFS
83 /* dumb procfs handler which always report success, for backward compatibility
84  * purpose */
85 int lprocfs_quota_rd_type_dumb(char *, char **, off_t, int, int *, void *);
86 int lprocfs_quota_wr_type_dumb(struct file *, const char *, unsigned long,
87                                void *);
88 #endif /* LPROCFS */
89 #endif /* _LUSTRE_LQUOTA_H */