4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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.
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).
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
24 * Copyright (c) 2012, Intel, Inc.
25 * Use is subject to license terms.
27 * lustre/mdt/mdt_lvb.c
29 * Author: Jinshan Xiong <jinshan.xiong@intel.com>
32 #define DEBUG_SUBSYSTEM S_MDS
34 #include "mdt_internal.h"
36 /* Called with res->lr_lvb_sem held */
37 static int mdt_lvbo_init(struct ldlm_resource *res)
39 if (IS_LQUOTA_RES(res)) {
40 struct mdt_device *mdt;
42 mdt = ldlm_res_to_ns(res)->ns_lvbp;
43 if (mdt->mdt_qmt_dev == NULL)
46 /* call lvbo init function of quota master */
47 return qmt_hdls.qmth_lvbo_init(mdt->mdt_qmt_dev, res);
53 static int mdt_lvbo_update(struct ldlm_resource *res,
54 struct ptlrpc_request *req,
57 if (IS_LQUOTA_RES(res)) {
58 struct mdt_device *mdt;
60 mdt = ldlm_res_to_ns(res)->ns_lvbp;
61 if (mdt->mdt_qmt_dev == NULL)
64 /* call lvbo update function of quota master */
65 return qmt_hdls.qmth_lvbo_update(mdt->mdt_qmt_dev, res, req,
73 static int mdt_lvbo_size(struct ldlm_lock *lock)
75 if (IS_LQUOTA_RES(lock->l_resource)) {
76 struct mdt_device *mdt;
78 mdt = ldlm_res_to_ns(lock->l_resource)->ns_lvbp;
79 if (mdt->mdt_qmt_dev == NULL)
82 /* call lvbo size function of quota master */
83 return qmt_hdls.qmth_lvbo_size(mdt->mdt_qmt_dev, lock);
89 static int mdt_lvbo_fill(struct ldlm_lock *lock, void *lvb, int lvblen)
91 if (IS_LQUOTA_RES(lock->l_resource)) {
92 struct mdt_device *mdt;
94 mdt = ldlm_res_to_ns(lock->l_resource)->ns_lvbp;
95 if (mdt->mdt_qmt_dev == NULL)
98 /* call lvbo fill function of quota master */
99 return qmt_hdls.qmth_lvbo_fill(mdt->mdt_qmt_dev, lock, lvb,
106 static int mdt_lvbo_free(struct ldlm_resource *res)
108 if (IS_LQUOTA_RES(res)) {
109 struct mdt_device *mdt;
111 mdt = ldlm_res_to_ns(res)->ns_lvbp;
112 if (mdt->mdt_qmt_dev == NULL)
115 /* call lvbo free function of quota master */
116 return qmt_hdls.qmth_lvbo_free(mdt->mdt_qmt_dev, res);
122 struct ldlm_valblock_ops mdt_lvbo = {
123 lvbo_init: mdt_lvbo_init,
124 lvbo_update: mdt_lvbo_update,
125 lvbo_size: mdt_lvbo_size,
126 lvbo_fill: mdt_lvbo_fill,
127 lvbo_free: mdt_lvbo_free