struct cl_setattr_io {
                        struct ost_lvb   sa_attr;
                        unsigned int     sa_valid;
-                       struct obd_capa *sa_capa;
                } ci_setattr;
                struct cl_fault_io {
                        /** page index within file. */
                struct cl_fsync_io {
                        loff_t       fi_start;
                        loff_t       fi_end;
-                       struct obd_capa   *fi_capa;
                        /** file system level fid */
                        struct lu_fid     *fi_fid;
                        enum cl_fsync_mode fi_mode;
 struct cl_req_attr {
        /** Generic attributes for the server consumption. */
        struct obdo     *cra_oa;
-       /** Capability. */
-       struct obd_capa *cra_capa;
        /** Jobid */
        char             cra_jobid[JOBSTATS_JOBID_SIZE];
 };
 
 struct inode       *ccc_object_inode(const struct cl_object *obj);
 struct ccc_object  *cl_inode2ccc    (struct inode *inode);
 
-int cl_setattr_ost(struct inode *inode, const struct iattr *attr,
-                  struct obd_capa *capa);
+int cl_setattr_ost(struct inode *inode, const struct iattr *attr);
 
 struct cl_page *ccc_vmpage_page_transient(struct page *vmpage);
 int ccc_object_invariant(const struct cl_object *obj);
 
 #define CAPA_OPC_MDS_DEFAULT ~CAPA_OPC_OSS_ONLY
 #define CAPA_OPC_OSS_DEFAULT ~(CAPA_OPC_MDS_ONLY | CAPA_OPC_OSS_ONLY)
 
-/* MDS capability covers object capability for operations of body r/w
- * (dir readpage/sendpage), index lookup/insert/delete and meta data r/w,
- * while OSS capability only covers object capability for operations of
- * oss data(file content) r/w/truncate.
- */
-static inline int capa_for_mds(struct lustre_capa *c)
-{
-       return (c->lc_opc & CAPA_OPC_INDEX_LOOKUP) != 0;
-}
-
-static inline int capa_for_oss(struct lustre_capa *c)
-{
-       return (c->lc_opc & CAPA_OPC_INDEX_LOOKUP) == 0;
-}
-
-/* lustre_capa::lc_hmac_alg */
-enum {
-       CAPA_HMAC_ALG_SHA1 = 1, /**< sha1 algorithm */
-       CAPA_HMAC_ALG_MAX,
-};
-
-#define CAPA_FL_MASK       0x00ffffff
-#define CAPA_HMAC_ALG_MASK      0xff000000
-
 struct lustre_capa_key {
        __u64   lk_seq;       /**< mds# */
        __u32   lk_keyid;     /**< key# */
 
+++ /dev/null
-/*
- * GPL HEADER START
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 only,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License version 2 for more details (a copy is included
- * in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- *
- * GPL HEADER END
- */
-/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- * Use is subject to license terms.
- *
- * Copyright (c) 2012, Intel Corporation.
- */
-/*
- * This file is part of Lustre, http://www.lustre.org/
- * Lustre is a trademark of Sun Microsystems, Inc.
- *
- * lustre/include/lustre_capa.h
- *
- * Author: Lai Siyao <lsy@clusterfs.com>
- */
-
-#ifndef __LINUX_CAPA_H_
-#define __LINUX_CAPA_H_
-
-/** \defgroup capa capa
- *
- * @{
- */
-
-/*
- * capability
- */
-#include <linux/crypto.h>
-#include "lustre/lustre_idl.h"
-
-#define CAPA_TIMEOUT 1800              /* sec, == 30 min */
-#define CAPA_KEY_TIMEOUT (24 * 60 * 60)  /* sec, == 1 days */
-
-struct capa_hmac_alg {
-       const char     *ha_name;
-       int          ha_len;
-       int          ha_keylen;
-};
-
-#define DEF_CAPA_HMAC_ALG(name, type, len, keylen)      \
-[CAPA_HMAC_ALG_ ## type] = {                       \
-       .ha_name         = name,                        \
-       .ha_len   = len,                         \
-       .ha_keylen       = keylen,                    \
-}
-
-struct client_capa {
-       struct inode         *inode;
-       struct list_head                lli_list;     /* link to lli_oss_capas */
-};
-
-struct target_capa {
-       struct hlist_node         c_hash;       /* link to capa hash */
-};
-
-struct obd_capa {
-       struct list_head                c_list;       /* link to capa_list */
-
-       struct lustre_capa      c_capa;       /* capa */
-       atomic_t              c_refc;       /* ref count */
-       unsigned long           c_expiry;     /* jiffies */
-       spinlock_t              c_lock; /* protect capa content */
-       int                     c_site;
-
-       union {
-               struct client_capa      cli;
-               struct target_capa      tgt;
-       } u;
-};
-
-enum {
-       CAPA_SITE_CLIENT = 0,
-       CAPA_SITE_SERVER,
-       CAPA_SITE_MAX
-};
-
-static inline struct lu_fid *capa_fid(struct lustre_capa *capa)
-{
-       return &capa->lc_fid;
-}
-
-static inline __u64 capa_opc(struct lustre_capa *capa)
-{
-       return capa->lc_opc;
-}
-
-static inline __u64 capa_uid(struct lustre_capa *capa)
-{
-       return capa->lc_uid;
-}
-
-static inline __u64 capa_gid(struct lustre_capa *capa)
-{
-       return capa->lc_gid;
-}
-
-static inline __u32 capa_flags(struct lustre_capa *capa)
-{
-       return capa->lc_flags & 0xffffff;
-}
-
-static inline __u32 capa_alg(struct lustre_capa *capa)
-{
-       return (capa->lc_flags >> 24);
-}
-
-static inline __u32 capa_keyid(struct lustre_capa *capa)
-{
-       return capa->lc_keyid;
-}
-
-static inline __u64 capa_key_seq(struct lustre_capa_key *key)
-{
-       return key->lk_seq;
-}
-
-static inline __u32 capa_key_keyid(struct lustre_capa_key *key)
-{
-       return key->lk_keyid;
-}
-
-static inline __u32 capa_timeout(struct lustre_capa *capa)
-{
-       return capa->lc_timeout;
-}
-
-static inline __u32 capa_expiry(struct lustre_capa *capa)
-{
-       return capa->lc_expiry;
-}
-
-void _debug_capa(struct lustre_capa *, struct libcfs_debug_msg_data *,
-                const char *fmt, ...);
-#define DEBUG_CAPA(level, capa, fmt, args...)                            \
-do {                                                                      \
-       if (((level) & D_CANTMASK) != 0 ||                                   \
-           ((libcfs_debug & (level)) != 0 &&                             \
-            (libcfs_subsystem_debug & DEBUG_SUBSYSTEM) != 0)) {               \
-               LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, level, NULL);             \
-               _debug_capa((capa), &msgdata, fmt, ##args);                 \
-       }                                                                     \
-} while (0)
-
-#define DEBUG_CAPA_KEY(level, k, fmt, args...)                          \
-do {                                                                      \
-CDEBUG(level, fmt " capability key@%p seq %llu keyid %u\n",             \
-       ##args, k, capa_key_seq(k), capa_key_keyid(k));                  \
-} while (0)
-
-typedef int (*renew_capa_cb_t)(struct obd_capa *, struct lustre_capa *);
-
-/* obdclass/capa.c */
-extern struct list_head capa_list[];
-extern spinlock_t capa_lock;
-extern int capa_count[];
-extern struct kmem_cache *capa_cachep;
-
-struct hlist_head *init_capa_hash(void);
-void cleanup_capa_hash(struct hlist_head *hash);
-
-struct obd_capa *capa_add(struct hlist_head *hash,
-                         struct lustre_capa *capa);
-struct obd_capa *capa_lookup(struct hlist_head *hash,
-                            struct lustre_capa *capa, int alive);
-
-int capa_hmac(__u8 *hmac, struct lustre_capa *capa, __u8 *key);
-int capa_encrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen);
-int capa_decrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen);
-void capa_cpy(void *dst, struct obd_capa *ocapa);
-static inline struct obd_capa *alloc_capa(int site)
-{
-       struct obd_capa *ocapa;
-
-       if (unlikely(site != CAPA_SITE_CLIENT && site != CAPA_SITE_SERVER))
-               return ERR_PTR(-EINVAL);
-
-       OBD_SLAB_ALLOC_PTR(ocapa, capa_cachep);
-       if (unlikely(!ocapa))
-               return ERR_PTR(-ENOMEM);
-
-       INIT_LIST_HEAD(&ocapa->c_list);
-       atomic_set(&ocapa->c_refc, 1);
-       spin_lock_init(&ocapa->c_lock);
-       ocapa->c_site = site;
-       if (ocapa->c_site == CAPA_SITE_CLIENT)
-               INIT_LIST_HEAD(&ocapa->u.cli.lli_list);
-       else
-               INIT_HLIST_NODE(&ocapa->u.tgt.c_hash);
-
-       return ocapa;
-}
-
-static inline struct obd_capa *capa_get(struct obd_capa *ocapa)
-{
-       if (!ocapa)
-               return NULL;
-
-       atomic_inc(&ocapa->c_refc);
-       return ocapa;
-}
-
-static inline void capa_put(struct obd_capa *ocapa)
-{
-       if (!ocapa)
-               return;
-
-       if (atomic_read(&ocapa->c_refc) == 0) {
-               DEBUG_CAPA(D_ERROR, &ocapa->c_capa, "refc is 0 for");
-               LBUG();
-       }
-
-       if (atomic_dec_and_test(&ocapa->c_refc)) {
-               LASSERT(list_empty(&ocapa->c_list));
-               if (ocapa->c_site == CAPA_SITE_CLIENT) {
-                       LASSERT(list_empty(&ocapa->u.cli.lli_list));
-               } else {
-                       struct hlist_node *hnode;
-
-                       hnode = &ocapa->u.tgt.c_hash;
-                       LASSERT(!hnode->next && !hnode->pprev);
-               }
-               OBD_SLAB_FREE(ocapa, capa_cachep, sizeof(*ocapa));
-       }
-}
-
-static inline int open_flags_to_accmode(int flags)
-{
-       int mode = flags;
-
-       if ((mode + 1) & O_ACCMODE)
-               mode++;
-       if (mode & O_TRUNC)
-               mode |= 2;
-
-       return mode;
-}
-
-static inline __u64 capa_open_opc(int mode)
-{
-       return mode & FMODE_WRITE ? CAPA_OPC_OSS_WRITE : CAPA_OPC_OSS_READ;
-}
-
-static inline void set_capa_expiry(struct obd_capa *ocapa)
-{
-       unsigned long expiry = cfs_time_sub((unsigned long)ocapa->c_capa.lc_expiry,
-                                        get_seconds());
-       ocapa->c_expiry = cfs_time_add(cfs_time_current(),
-                                      cfs_time_seconds(expiry));
-}
-
-static inline int capa_is_expired_sec(struct lustre_capa *capa)
-{
-       return (capa->lc_expiry - get_seconds() <= 0);
-}
-
-static inline int capa_is_expired(struct obd_capa *ocapa)
-{
-       return time_before_eq(ocapa->c_expiry, cfs_time_current());
-}
-
-static inline int capa_opc_supported(struct lustre_capa *capa, __u64 opc)
-{
-       return (capa_opc(capa) & opc) == opc;
-}
-
-struct filter_capa_key {
-       struct list_head              k_list;
-       struct lustre_capa_key  k_key;
-};
-
-enum {
-       LC_ID_NONE      = 0,
-       LC_ID_PLAIN     = 1,
-       LC_ID_CONVERT   = 2
-};
-
-#define BYPASS_CAPA (struct lustre_capa *)ERR_PTR(-ENOENT)
-
-/** @} capa */
-
-#endif /* __LINUX_CAPA_H_ */
 
        int group;
 };
 
-struct mds_capa_info {
-       struct obd_uuid *uuid;
-       struct lustre_capa_key *capa;
-};
-
 #define MDD_OBD_NAME     "mdd_obd"
 #define MDD_OBD_UUID     "mdd_obd_uuid"
 
 
 #include "lustre_export.h"
 #include "lustre_fid.h"
 #include "lustre_fld.h"
-#include "lustre_capa.h"
 
 #define MAX_OBD_DEVICES 8192
 
         * request in osc level for enqueue requests. It is also possible to
         * update some caller data from LOV layer if needed. */
        obd_enqueue_update_f    oi_cb_up;
-       /* oss capability, its type is obd_capa in client to avoid copy.
-        * in contrary its type is lustre_capa in OSS. */
-       void               *oi_capa;
 };
 
 void lov_stripe_lock(struct lov_stripe_md *md);
 #define KEY_ASYNC             "async"
 #define KEY_BLOCKSIZE_BITS      "blocksize_bits"
 #define KEY_BLOCKSIZE     "blocksize"
-#define KEY_CAPA_KEY       "capa_key"
 #define KEY_CHANGELOG_CLEAR     "changelog_clear"
 #define KEY_FID2PATH       "fid2path"
 #define KEY_CHECKSUM       "checksum"
        __u64              op_ioepoch;
        __u32              op_flags;
 
-       /* Capa fields */
-       struct obd_capa *op_capa1;
-       struct obd_capa *op_capa2;
-
        /* Various operation flags. */
        enum mds_op_bias        op_bias;
 
                          struct lov_stripe_md **mem_tgt,
                          struct lov_mds_md *disk_src, int disk_len);
        int (*o_preallocate)(struct lustre_handle *, u32 *req, u64 *ids);
-       /* FIXME: add fid capability support for create & destroy! */
        int (*o_create)(const struct lu_env *env, struct obd_export *exp,
                        struct obdo *oa, struct lov_stripe_md **ea,
                        struct obd_trans_info *oti);
        int (*o_destroy)(const struct lu_env *env, struct obd_export *exp,
                         struct obdo *oa, struct lov_stripe_md *ea,
-                        struct obd_trans_info *oti, struct obd_export *md_exp,
-                        void *capa);
+                        struct obd_trans_info *oti, struct obd_export *md_exp);
        int (*o_setattr)(const struct lu_env *, struct obd_export *exp,
                         struct obd_info *oinfo, struct obd_trans_info *oti);
        int (*o_setattr_async)(struct obd_export *exp, struct obd_info *oinfo,
                        struct obd_export *exp, struct obdo *oa, int objcount,
                        struct obd_ioobj *obj, struct niobuf_remote *remote,
                        int *nr_pages, struct niobuf_local *local,
-                       struct obd_trans_info *oti, struct lustre_capa *capa);
+                       struct obd_trans_info *oti);
        int (*o_commitrw)(const struct lu_env *env, int cmd,
                          struct obd_export *exp, struct obdo *oa,
                          int objcount, struct obd_ioobj *obj,
        struct posix_acl        *posix_acl;
 #endif
        struct mdt_remote_perm  *remote_perm;
-       struct obd_capa  *mds_capa;
-       struct obd_capa  *oss_capa;
 };
 
 struct md_open_data {
 struct lookup_intent;
 
 struct md_ops {
-       int (*m_getstatus)(struct obd_export *, struct lu_fid *,
-                          struct obd_capa **);
+       int (*m_getstatus)(struct obd_export *, struct lu_fid *);
        int (*m_null_inode)(struct obd_export *, const struct lu_fid *);
        int (*m_find_cbdata)(struct obd_export *, const struct lu_fid *,
                             ldlm_iterator_t, void *);
                         int, void *, int, struct ptlrpc_request **,
                         struct md_open_data **mod);
        int (*m_sync)(struct obd_export *, const struct lu_fid *,
-                     struct obd_capa *, struct ptlrpc_request **);
+                     struct ptlrpc_request **);
        int (*m_readpage)(struct obd_export *, struct md_op_data *,
                          struct page **, struct ptlrpc_request **);
 
                        struct ptlrpc_request **);
 
        int (*m_setxattr)(struct obd_export *, const struct lu_fid *,
-                         struct obd_capa *, u64, const char *,
-                         const char *, int, int, int, __u32,
+                         u64, const char *, const char *, int, int, int, __u32,
                          struct ptlrpc_request **);
 
        int (*m_getxattr)(struct obd_export *, const struct lu_fid *,
-                         struct obd_capa *, u64, const char *,
-                         const char *, int, int, int,
+                         u64, const char *, const char *, int, int, int,
                          struct ptlrpc_request **);
 
        int (*m_init_ea_size)(struct obd_export *, int, int, int, int);
        int (*m_cancel_unused)(struct obd_export *, const struct lu_fid *,
                               ldlm_policy_data_t *, ldlm_mode_t,
                               ldlm_cancel_flags_t flags, void *opaque);
-       int (*m_renew_capa)(struct obd_export *, struct obd_capa *oc,
-                           renew_capa_cb_t cb);
-       int (*m_unpack_capa)(struct obd_export *, struct ptlrpc_request *,
-                            const struct req_msg_field *, struct obd_capa **);
 
        int (*m_get_remote_perm)(struct obd_export *, const struct lu_fid *,
-                                struct obd_capa *, __u32,
-                                struct ptlrpc_request **);
+                                __u32, struct ptlrpc_request **);
 
        int (*m_intent_getattr_async)(struct obd_export *,
                                      struct md_enqueue_info *,
 #define OBD_CALC_STRIPE_START   1
 #define OBD_CALC_STRIPE_END     2
 
-static inline struct lustre_capa *oinfo_capa(struct obd_info *oinfo)
-{
-       return oinfo->oi_capa;
-}
-
 static inline struct md_open_data *obd_mod_alloc(void)
 {
        struct md_open_data *mod;
 
 static inline int obd_destroy(const struct lu_env *env, struct obd_export *exp,
                              struct obdo *obdo, struct lov_stripe_md *ea,
                              struct obd_trans_info *oti,
-                             struct obd_export *md_exp, void *capa)
+                             struct obd_export *md_exp)
 {
        int rc;
 
        EXP_CHECK_DT_OP(exp, destroy);
        EXP_COUNTER_INCREMENT(exp, destroy);
 
-       rc = OBP(exp->exp_obd, destroy)(env, exp, obdo, ea, oti, md_exp, capa);
+       rc = OBP(exp->exp_obd, destroy)(env, exp, obdo, ea, oti, md_exp);
        return rc;
 }
 
                             int objcount, struct obd_ioobj *obj,
                             struct niobuf_remote *remote, int *pages,
                             struct niobuf_local *local,
-                            struct obd_trans_info *oti,
-                            struct lustre_capa *capa)
+                            struct obd_trans_info *oti)
 {
        int rc;
 
        EXP_COUNTER_INCREMENT(exp, preprw);
 
        rc = OBP(exp->exp_obd, preprw)(env, cmd, exp, oa, objcount, obj, remote,
-                                      pages, local, oti, capa);
+                                      pages, local, oti);
        return rc;
 }
 
 #endif
 
 /* metadata helpers */
-static inline int md_getstatus(struct obd_export *exp,
-                              struct lu_fid *fid, struct obd_capa **pc)
+static inline int md_getstatus(struct obd_export *exp, struct lu_fid *fid)
 {
        int rc;
 
        EXP_CHECK_MD_OP(exp, getstatus);
        EXP_MD_COUNTER_INCREMENT(exp, getstatus);
-       rc = MDP(exp->exp_obd, getstatus)(exp, fid, pc);
+       rc = MDP(exp->exp_obd, getstatus)(exp, fid);
        return rc;
 }
 
 }
 
 static inline int md_sync(struct obd_export *exp, const struct lu_fid *fid,
-                         struct obd_capa *oc, struct ptlrpc_request **request)
+                         struct ptlrpc_request **request)
 {
        int rc;
 
        EXP_CHECK_MD_OP(exp, sync);
        EXP_MD_COUNTER_INCREMENT(exp, sync);
-       rc = MDP(exp->exp_obd, sync)(exp, fid, oc, request);
+       rc = MDP(exp->exp_obd, sync)(exp, fid, request);
        return rc;
 }
 
        return MDP(exp->exp_obd, free_lustre_md)(exp, md);
 }
 
-static inline int md_setxattr(struct obd_export *exp,
-                             const struct lu_fid *fid, struct obd_capa *oc,
+static inline int md_setxattr(struct obd_export *exp, const struct lu_fid *fid,
                              u64 valid, const char *name,
                              const char *input, int input_size,
                              int output_size, int flags, __u32 suppgid,
 {
        EXP_CHECK_MD_OP(exp, setxattr);
        EXP_MD_COUNTER_INCREMENT(exp, setxattr);
-       return MDP(exp->exp_obd, setxattr)(exp, fid, oc, valid, name, input,
+       return MDP(exp->exp_obd, setxattr)(exp, fid, valid, name, input,
                                           input_size, output_size, flags,
                                           suppgid, request);
 }
 
-static inline int md_getxattr(struct obd_export *exp,
-                             const struct lu_fid *fid, struct obd_capa *oc,
+static inline int md_getxattr(struct obd_export *exp, const struct lu_fid *fid,
                              u64 valid, const char *name,
                              const char *input, int input_size,
                              int output_size, int flags,
 {
        EXP_CHECK_MD_OP(exp, getxattr);
        EXP_MD_COUNTER_INCREMENT(exp, getxattr);
-       return MDP(exp->exp_obd, getxattr)(exp, fid, oc, valid, name, input,
+       return MDP(exp->exp_obd, getxattr)(exp, fid, valid, name, input,
                                           input_size, output_size, flags,
                                           request);
 }
 }
 
 static inline int md_get_remote_perm(struct obd_export *exp,
-                                    const struct lu_fid *fid,
-                                    struct obd_capa *oc, __u32 suppgid,
+                                    const struct lu_fid *fid, __u32 suppgid,
                                     struct ptlrpc_request **request)
 {
        EXP_CHECK_MD_OP(exp, get_remote_perm);
        EXP_MD_COUNTER_INCREMENT(exp, get_remote_perm);
-       return MDP(exp->exp_obd, get_remote_perm)(exp, fid, oc, suppgid,
+       return MDP(exp->exp_obd, get_remote_perm)(exp, fid, suppgid,
                                                  request);
 }
 
-static inline int md_renew_capa(struct obd_export *exp, struct obd_capa *ocapa,
-                               renew_capa_cb_t cb)
-{
-       int rc;
-
-       EXP_CHECK_MD_OP(exp, renew_capa);
-       EXP_MD_COUNTER_INCREMENT(exp, renew_capa);
-       rc = MDP(exp->exp_obd, renew_capa)(exp, ocapa, cb);
-       return rc;
-}
-
-static inline int md_unpack_capa(struct obd_export *exp,
-                                struct ptlrpc_request *req,
-                                const struct req_msg_field *field,
-                                struct obd_capa **oc)
-{
-       int rc;
-
-       EXP_CHECK_MD_OP(exp, unpack_capa);
-       EXP_MD_COUNTER_INCREMENT(exp, unpack_capa);
-       rc = MDP(exp->exp_obd, unpack_capa)(exp, req, field, oc);
-       return rc;
-}
-
 static inline int md_intent_getattr_async(struct obd_export *exp,
                                          struct md_enqueue_info *minfo,
                                          struct ldlm_enqueue_info *einfo)
 
  *
  *    - o_ioepoch,
  *
- *  and capability.
  */
 void ccc_req_attr_set(const struct lu_env *env,
                      const struct cl_req_slice *slice,
        inode = ccc_object_inode(obj);
        valid_flags = OBD_MD_FLTYPE;
 
-       if ((flags & OBD_MD_FLOSSCAPA) != 0) {
-               LASSERT(attr->cra_capa == NULL);
-               attr->cra_capa = cl_capa_lookup(inode,
-                                               slice->crs_req->crq_type);
-       }
-
        if (slice->crs_req->crq_type == CRT_WRITE) {
                if (flags & OBD_MD_FLEPOCH) {
                        oa->o_valid |= OBD_MD_FLEPOCH;
        .cro_completion = ccc_req_completion
 };
 
-int cl_setattr_ost(struct inode *inode, const struct iattr *attr,
-                  struct obd_capa *capa)
+int cl_setattr_ost(struct inode *inode, const struct iattr *attr)
 {
        struct lu_env *env;
        struct cl_io  *io;
        io->u.ci_setattr.sa_attr.lvb_ctime = LTIME_S(attr->ia_ctime);
        io->u.ci_setattr.sa_attr.lvb_size = attr->ia_size;
        io->u.ci_setattr.sa_valid = attr->ia_valid;
-       io->u.ci_setattr.sa_capa = capa;
 
 again:
        if (cl_io_init(env, io, CIT_SETATTR, io->ci_obj) == 0) {
 
 obj-$(CONFIG_LUSTRE_LLITE_LLOOP) += llite_lloop.o
 lustre-y := dcache.o dir.o file.o llite_close.o llite_lib.o llite_nfs.o \
            rw.o namei.o symlink.o llite_mmap.o \
-           xattr.o xattr_cache.o remote_perm.o llite_rmtacl.o llite_capa.o \
+           xattr.o xattr_cache.o remote_perm.o llite_rmtacl.o \
            rw26.o super25.o statahead.o \
            ../lclient/glimpse.o ../lclient/lcommon_cl.o ../lclient/lcommon_misc.o \
            vvp_dev.o vvp_page.o vvp_lock.o vvp_io.o vvp_object.o lproc_llite.o
 
        op_data->op_ioepoch = ll_i2info(inode)->lli_ioepoch;
        if (fh)
                op_data->op_handle = *fh;
-       op_data->op_capa1 = ll_mdscapa_get(inode);
 
        if (ll_i2info(inode)->lli_flags & LLIF_DATA_MODIFIED)
                op_data->op_bias |= MDS_DATA_MODIFIED;
 out:
        LUSTRE_FPRIVATE(file) = NULL;
        ll_file_data_put(fd);
-       ll_capa_close(inode);
 
        return rc;
 }
        if (!S_ISREG(inode->i_mode))
                goto out_och_free;
 
-       ll_capa_open(inode);
-
        if (!lli->lli_has_smd &&
            (cl_is_lov_delay_create(file->f_flags) ||
             (file->f_mode & FMODE_WRITE) == 0)) {
 
 /* Fills the obdo with the attributes for the lsm */
 static int ll_lsm_getattr(struct lov_stripe_md *lsm, struct obd_export *exp,
-                         struct obd_capa *capa, struct obdo *obdo,
-                         __u64 ioepoch, int sync)
+                         struct obdo *obdo, __u64 ioepoch, int sync)
 {
        struct ptlrpc_request_set *set;
        struct obd_info     oinfo = { };
                               OBD_MD_FLMTIME | OBD_MD_FLCTIME |
                               OBD_MD_FLGROUP | OBD_MD_FLEPOCH |
                               OBD_MD_FLDATAVERSION;
-       oinfo.oi_capa = capa;
        if (sync) {
                oinfo.oi_oa->o_valid |= OBD_MD_FLFLAGS;
                oinfo.oi_oa->o_flags |= OBD_FL_SRVLOCK;
 int ll_inode_getattr(struct inode *inode, struct obdo *obdo,
                     __u64 ioepoch, int sync)
 {
-       struct obd_capa      *capa = ll_mdscapa_get(inode);
        struct lov_stripe_md *lsm;
        int rc;
 
        lsm = ccc_inode_lsm_get(inode);
        rc = ll_lsm_getattr(lsm, ll_i2dtexp(inode),
-                           capa, obdo, ioepoch, sync);
-       capa_put(capa);
+                           obdo, ioepoch, sync);
        if (rc == 0) {
                struct ost_id *oi = lsm ? &lsm->lsm_oi : &obdo->o_oi;
 
        struct obdo obdo = { 0 };
        int rc;
 
-       rc = ll_lsm_getattr(lsm, sbi->ll_dt_exp, NULL, &obdo, 0, 0);
+       rc = ll_lsm_getattr(lsm, sbi->ll_dt_exp, &obdo, 0, 0);
        if (rc == 0) {
                st->st_size   = obdo.o_size;
                st->st_blocks = obdo.o_blocks;
                goto out;
        }
 
-       rc = ll_lsm_getattr(lsm, sbi->ll_dt_exp, NULL, obdo, 0, extent_lock);
+       rc = ll_lsm_getattr(lsm, sbi->ll_dt_exp, obdo, 0, extent_lock);
        if (rc == 0) {
                if (!(obdo->o_valid & OBD_MD_FLDATAVERSION))
                        rc = -EOPNOTSUPP;
        struct cl_env_nest nest;
        struct lu_env *env;
        struct cl_io *io;
-       struct obd_capa *capa = NULL;
        struct cl_fsync_io *fio;
        int result;
 
        if (IS_ERR(env))
                return PTR_ERR(env);
 
-       capa = ll_osscapa_get(inode, CAPA_OPC_OSS_WRITE);
-
        io = ccc_env_thread_io(env);
        io->ci_obj = cl_i2info(inode)->lli_clob;
        io->ci_ignore_layout = ignore_layout;
 
        /* initialize parameters for sync */
        fio = &io->u.ci_fsync;
-       fio->fi_capa = capa;
        fio->fi_start = start;
        fio->fi_end = end;
        fio->fi_fid = ll_inode2fid(inode);
        cl_io_fini(env, io);
        cl_env_nested_put(&nest, env);
 
-       capa_put(capa);
-
        return result;
 }
 
        struct inode *inode = file_inode(file);
        struct ll_inode_info *lli = ll_i2info(inode);
        struct ptlrpc_request *req;
-       struct obd_capa *oc;
        int rc, err;
 
        CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p)\n", inode->i_ino,
                        rc = err;
        }
 
-       oc = ll_mdscapa_get(inode);
-       err = md_sync(ll_i2sbi(inode)->ll_md_exp, ll_inode2fid(inode), oc,
-                     &req);
-       capa_put(oc);
+       err = md_sync(ll_i2sbi(inode)->ll_md_exp, ll_inode2fid(inode), &req);
        if (!rc)
                rc = err;
        if (!err)
                        return PTR_ERR(op_data);
 
                op_data->op_valid = valid;
-               /* Once OBD_CONNECT_ATTRFID is not supported, we can't find one
-                * capa for this inode. Because we only keep capas of dirs
-                * fresh. */
                rc = md_getattr(sbi->ll_md_exp, op_data, &req);
                ll_finish_md_op_data(op_data);
                if (rc) {
 
 {
        struct ll_sb_info *sbi = ll_i2sbi(inode);
-       struct obd_capa *oc;
        struct ptlrpc_request *req;
        struct mdt_body *body;
        void *lvbdata;
         * blocked and then granted via completion ast, we have to fetch
         * layout here. Please note that we can't use the LVB buffer in
         * completion AST because it doesn't have a large enough buffer */
-       oc = ll_mdscapa_get(inode);
        rc = ll_get_default_mdsize(sbi, &lmmsize);
        if (rc == 0)
-               rc = md_getxattr(sbi->ll_md_exp, ll_inode2fid(inode), oc,
-                               OBD_MD_FLXATTR, XATTR_NAME_LOV, NULL, 0,
-                               lmmsize, 0, &req);
-       capa_put(oc);
+               rc = md_getxattr(sbi->ll_md_exp, ll_inode2fid(inode),
+                                OBD_MD_FLXATTR, XATTR_NAME_LOV, NULL, 0,
+                                lmmsize, 0, &req);
        if (rc < 0)
                return rc;
 
 
+++ /dev/null
-/*
- * GPL HEADER START
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 only,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License version 2 for more details (a copy is included
- * in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- *
- * GPL HEADER END
- */
-/*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Use is subject to license terms.
- *
- * Copyright (c) 2011, 2012, Intel Corporation.
- */
-/*
- * This file is part of Lustre, http://www.lustre.org/
- * Lustre is a trademark of Sun Microsystems, Inc.
- *
- * lustre/llite/llite_capa.c
- *
- * Author: Lai Siyao <lsy@clusterfs.com>
- */
-
-#define DEBUG_SUBSYSTEM S_LLITE
-
-#include <linux/fs.h>
-#include <linux/uaccess.h>
-#include <linux/file.h>
-#include <linux/kmod.h>
-
-#include "../include/lustre_lite.h"
-#include "llite_internal.h"
-
-/* for obd_capa.c_list, client capa might stay in three places:
- * 1. ll_capa_list.
- * 2. ll_idle_capas.
- * 3. stand alone: just allocated.
- */
-
-/* capas for oss writeback and those failed to renew */
-static LIST_HEAD(ll_idle_capas);
-static struct ptlrpc_thread ll_capa_thread;
-static struct list_head *ll_capa_list = &capa_list[CAPA_SITE_CLIENT];
-
-/* llite capa renewal timer */
-struct timer_list ll_capa_timer;
-/* for debug: indicate whether capa on llite is enabled or not */
-static atomic_t ll_capa_debug = ATOMIC_INIT(0);
-static unsigned long long ll_capa_renewed;
-static unsigned long long ll_capa_renewal_noent;
-static unsigned long long ll_capa_renewal_failed;
-static unsigned long long ll_capa_renewal_retries;
-
-static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa);
-
-static inline void update_capa_timer(struct obd_capa *ocapa,
-                                    unsigned long expiry)
-{
-       if (time_before(expiry, ll_capa_timer.expires) ||
-           !timer_pending(&ll_capa_timer)) {
-               mod_timer(&ll_capa_timer, expiry);
-               DEBUG_CAPA(D_SEC, &ocapa->c_capa,
-                          "ll_capa_timer update: %lu/%lu by", expiry, jiffies);
-       }
-}
-
-static inline unsigned long capa_renewal_time(struct obd_capa *ocapa)
-{
-       return cfs_time_sub(ocapa->c_expiry,
-                           cfs_time_seconds(ocapa->c_capa.lc_timeout) / 2);
-}
-
-static inline int capa_is_to_expire(struct obd_capa *ocapa)
-{
-       return time_before_eq(capa_renewal_time(ocapa), cfs_time_current());
-}
-
-static inline int have_expired_capa(void)
-{
-       struct obd_capa *ocapa = NULL;
-       int expired = 0;
-
-       /* if ll_capa_list has client capa to expire or ll_idle_capas has
-        * expired capa, return 1.
-        */
-       spin_lock(&capa_lock);
-       if (!list_empty(ll_capa_list)) {
-               ocapa = list_entry(ll_capa_list->next, struct obd_capa,
-                                  c_list);
-               expired = capa_is_to_expire(ocapa);
-               if (!expired)
-                       update_capa_timer(ocapa, capa_renewal_time(ocapa));
-       } else if (!list_empty(&ll_idle_capas)) {
-               ocapa = list_entry(ll_idle_capas.next, struct obd_capa,
-                                  c_list);
-               expired = capa_is_expired(ocapa);
-               if (!expired)
-                       update_capa_timer(ocapa, ocapa->c_expiry);
-       }
-       spin_unlock(&capa_lock);
-
-       if (expired)
-               DEBUG_CAPA(D_SEC, &ocapa->c_capa, "expired");
-       return expired;
-}
-
-static void sort_add_capa(struct obd_capa *ocapa, struct list_head *head)
-{
-       struct obd_capa *tmp;
-       struct list_head *before = NULL;
-
-       /* TODO: client capa is sorted by expiry, this could be optimized */
-       list_for_each_entry_reverse(tmp, head, c_list) {
-               if (cfs_time_aftereq(ocapa->c_expiry, tmp->c_expiry)) {
-                       before = &tmp->c_list;
-                       break;
-               }
-       }
-
-       LASSERT(&ocapa->c_list != before);
-       list_add(&ocapa->c_list, before ?: head);
-}
-
-static inline int obd_capa_open_count(struct obd_capa *oc)
-{
-       struct ll_inode_info *lli = ll_i2info(oc->u.cli.inode);
-
-       return atomic_read(&lli->lli_open_count);
-}
-
-static void ll_delete_capa(struct obd_capa *ocapa)
-{
-       struct ll_inode_info *lli = ll_i2info(ocapa->u.cli.inode);
-
-       if (capa_for_mds(&ocapa->c_capa)) {
-               LASSERT(lli->lli_mds_capa == ocapa);
-               lli->lli_mds_capa = NULL;
-       } else if (capa_for_oss(&ocapa->c_capa)) {
-               list_del_init(&ocapa->u.cli.lli_list);
-       }
-
-       DEBUG_CAPA(D_SEC, &ocapa->c_capa, "free client");
-       list_del_init(&ocapa->c_list);
-       capa_count[CAPA_SITE_CLIENT]--;
-       /* release the ref when alloc */
-       capa_put(ocapa);
-}
-
-/* three places where client capa is deleted:
- * 1. capa_thread_main(), main place to delete expired capa.
- * 2. ll_clear_inode_capas() in ll_clear_inode().
- * 3. ll_truncate_free_capa() delete truncate capa explicitly in
- *    ll_setattr_ost().
- */
-static int capa_thread_main(void *unused)
-{
-       struct obd_capa *ocapa, *tmp, *next;
-       struct inode *inode = NULL;
-       struct l_wait_info lwi = { 0 };
-       int rc;
-
-       thread_set_flags(&ll_capa_thread, SVC_RUNNING);
-       wake_up(&ll_capa_thread.t_ctl_waitq);
-
-       while (1) {
-               l_wait_event(ll_capa_thread.t_ctl_waitq,
-                            !thread_is_running(&ll_capa_thread) ||
-                            have_expired_capa(),
-                            &lwi);
-
-               if (!thread_is_running(&ll_capa_thread))
-                       break;
-
-               next = NULL;
-
-               spin_lock(&capa_lock);
-               list_for_each_entry_safe(ocapa, tmp, ll_capa_list, c_list) {
-                       __u64 ibits;
-
-                       LASSERT(ocapa->c_capa.lc_opc != CAPA_OPC_OSS_TRUNC);
-
-                       if (!capa_is_to_expire(ocapa)) {
-                               next = ocapa;
-                               break;
-                       }
-
-                       list_del_init(&ocapa->c_list);
-
-                       /* for MDS capability, only renew those which belong to
-                        * dir, or its inode is opened, or client holds LOOKUP
-                        * lock.
-                        */
-                       /* ibits may be changed by ll_have_md_lock() so we have
-                        * to set it each time
-                        */
-                       ibits = MDS_INODELOCK_LOOKUP;
-                       if (capa_for_mds(&ocapa->c_capa) &&
-                           !S_ISDIR(ocapa->u.cli.inode->i_mode) &&
-                           obd_capa_open_count(ocapa) == 0 &&
-                           !ll_have_md_lock(ocapa->u.cli.inode,
-                                            &ibits, LCK_MINMODE)) {
-                               DEBUG_CAPA(D_SEC, &ocapa->c_capa,
-                                          "skip renewal for");
-                               sort_add_capa(ocapa, &ll_idle_capas);
-                               continue;
-                       }
-
-                       /* for OSS capability, only renew those whose inode is
-                        * opened.
-                        */
-                       if (capa_for_oss(&ocapa->c_capa) &&
-                           obd_capa_open_count(ocapa) == 0) {
-                               /* oss capa with open count == 0 won't renew,
-                                * move to idle list
-                                */
-                               sort_add_capa(ocapa, &ll_idle_capas);
-                               continue;
-                       }
-
-                       /* NB iput() is in ll_update_capa() */
-                       inode = igrab(ocapa->u.cli.inode);
-                       if (!inode) {
-                               DEBUG_CAPA(D_ERROR, &ocapa->c_capa,
-                                          "igrab failed for");
-                               continue;
-                       }
-
-                       capa_get(ocapa);
-                       ll_capa_renewed++;
-                       spin_unlock(&capa_lock);
-                       rc = md_renew_capa(ll_i2mdexp(inode), ocapa,
-                                          ll_update_capa);
-                       spin_lock(&capa_lock);
-                       if (rc) {
-                               DEBUG_CAPA(D_ERROR, &ocapa->c_capa,
-                                          "renew failed: %d", rc);
-                               ll_capa_renewal_failed++;
-                       }
-               }
-
-               if (next)
-                       update_capa_timer(next, capa_renewal_time(next));
-
-               list_for_each_entry_safe(ocapa, tmp, &ll_idle_capas,
-                                        c_list) {
-                       if (!capa_is_expired(ocapa)) {
-                               if (!next)
-                                       update_capa_timer(ocapa,
-                                                         ocapa->c_expiry);
-                               break;
-                       }
-
-                       if (atomic_read(&ocapa->c_refc) > 1) {
-                               DEBUG_CAPA(D_SEC, &ocapa->c_capa,
-                                          "expired(c_refc %d), don't release",
-                                          atomic_read(&ocapa->c_refc));
-                               /* don't try to renew any more */
-                               list_del_init(&ocapa->c_list);
-                               continue;
-                       }
-
-                       /* expired capa is released. */
-                       DEBUG_CAPA(D_SEC, &ocapa->c_capa, "release expired");
-                       ll_delete_capa(ocapa);
-               }
-
-               spin_unlock(&capa_lock);
-       }
-
-       thread_set_flags(&ll_capa_thread, SVC_STOPPED);
-       wake_up(&ll_capa_thread.t_ctl_waitq);
-       return 0;
-}
-
-void ll_capa_timer_callback(unsigned long unused)
-{
-       wake_up(&ll_capa_thread.t_ctl_waitq);
-}
-
-int ll_capa_thread_start(void)
-{
-       struct task_struct *task;
-
-       init_waitqueue_head(&ll_capa_thread.t_ctl_waitq);
-
-       task = kthread_run(capa_thread_main, NULL, "ll_capa");
-       if (IS_ERR(task)) {
-               CERROR("cannot start expired capa thread: rc %ld\n",
-                      PTR_ERR(task));
-               return PTR_ERR(task);
-       }
-       wait_event(ll_capa_thread.t_ctl_waitq,
-                  thread_is_running(&ll_capa_thread));
-
-       return 0;
-}
-
-void ll_capa_thread_stop(void)
-{
-       thread_set_flags(&ll_capa_thread, SVC_STOPPING);
-       wake_up(&ll_capa_thread.t_ctl_waitq);
-       wait_event(ll_capa_thread.t_ctl_waitq,
-                  thread_is_stopped(&ll_capa_thread));
-}
-
-struct obd_capa *ll_osscapa_get(struct inode *inode, __u64 opc)
-{
-       struct ll_inode_info *lli = ll_i2info(inode);
-       struct obd_capa *ocapa;
-       int found = 0;
-
-       if ((ll_i2sbi(inode)->ll_flags & LL_SBI_OSS_CAPA) == 0)
-               return NULL;
-
-       LASSERT(opc == CAPA_OPC_OSS_WRITE || opc == CAPA_OPC_OSS_RW ||
-               opc == CAPA_OPC_OSS_TRUNC);
-
-       spin_lock(&capa_lock);
-       list_for_each_entry(ocapa, &lli->lli_oss_capas, u.cli.lli_list) {
-               if (capa_is_expired(ocapa))
-                       continue;
-               if ((opc & CAPA_OPC_OSS_WRITE) &&
-                   capa_opc_supported(&ocapa->c_capa, CAPA_OPC_OSS_WRITE)) {
-                       found = 1;
-                       break;
-               } else if ((opc & CAPA_OPC_OSS_READ) &&
-                          capa_opc_supported(&ocapa->c_capa,
-                                             CAPA_OPC_OSS_READ)) {
-                       found = 1;
-                       break;
-               } else if ((opc & CAPA_OPC_OSS_TRUNC) &&
-                          capa_opc_supported(&ocapa->c_capa, opc)) {
-                       found = 1;
-                       break;
-               }
-       }
-
-       if (found) {
-               LASSERT(lu_fid_eq(capa_fid(&ocapa->c_capa),
-                                 ll_inode2fid(inode)));
-               LASSERT(ocapa->c_site == CAPA_SITE_CLIENT);
-
-               capa_get(ocapa);
-
-               DEBUG_CAPA(D_SEC, &ocapa->c_capa, "found client");
-       } else {
-               ocapa = NULL;
-
-               if (atomic_read(&ll_capa_debug)) {
-                       CERROR("no capability for " DFID " opc %#llx\n",
-                              PFID(&lli->lli_fid), opc);
-                       atomic_set(&ll_capa_debug, 0);
-               }
-       }
-       spin_unlock(&capa_lock);
-
-       return ocapa;
-}
-EXPORT_SYMBOL(ll_osscapa_get);
-
-struct obd_capa *ll_mdscapa_get(struct inode *inode)
-{
-       struct ll_inode_info *lli = ll_i2info(inode);
-       struct obd_capa *ocapa;
-
-       LASSERT(inode);
-
-       if ((ll_i2sbi(inode)->ll_flags & LL_SBI_MDS_CAPA) == 0)
-               return NULL;
-
-       spin_lock(&capa_lock);
-       ocapa = capa_get(lli->lli_mds_capa);
-       spin_unlock(&capa_lock);
-       if (!ocapa && atomic_read(&ll_capa_debug)) {
-               CERROR("no mds capability for " DFID "\n", PFID(&lli->lli_fid));
-               atomic_set(&ll_capa_debug, 0);
-       }
-
-       return ocapa;
-}
-
-static struct obd_capa *do_add_mds_capa(struct inode *inode,
-                                       struct obd_capa *ocapa)
-{
-       struct ll_inode_info *lli = ll_i2info(inode);
-       struct obd_capa *old = lli->lli_mds_capa;
-       struct lustre_capa *capa = &ocapa->c_capa;
-
-       if (!old) {
-               ocapa->u.cli.inode = inode;
-               lli->lli_mds_capa = ocapa;
-               capa_count[CAPA_SITE_CLIENT]++;
-
-               DEBUG_CAPA(D_SEC, capa, "add MDS");
-       } else {
-               spin_lock(&old->c_lock);
-               old->c_capa = *capa;
-               spin_unlock(&old->c_lock);
-
-               DEBUG_CAPA(D_SEC, capa, "update MDS");
-
-               capa_put(ocapa);
-               ocapa = old;
-       }
-       return ocapa;
-}
-
-static struct obd_capa *do_lookup_oss_capa(struct inode *inode, int opc)
-{
-       struct ll_inode_info *lli = ll_i2info(inode);
-       struct obd_capa *ocapa;
-
-       /* inside capa_lock */
-       list_for_each_entry(ocapa, &lli->lli_oss_capas, u.cli.lli_list) {
-               if ((capa_opc(&ocapa->c_capa) & opc) != opc)
-                       continue;
-
-               LASSERT(lu_fid_eq(capa_fid(&ocapa->c_capa),
-                                 ll_inode2fid(inode)));
-               LASSERT(ocapa->c_site == CAPA_SITE_CLIENT);
-
-               DEBUG_CAPA(D_SEC, &ocapa->c_capa, "found client");
-               return ocapa;
-       }
-
-       return NULL;
-}
-
-static inline void inode_add_oss_capa(struct inode *inode,
-                                     struct obd_capa *ocapa)
-{
-       struct ll_inode_info *lli = ll_i2info(inode);
-       struct obd_capa *tmp;
-       struct list_head *next = NULL;
-
-       /* capa is sorted in lli_oss_capas so lookup can always find the
-        * latest one
-        */
-       list_for_each_entry(tmp, &lli->lli_oss_capas, u.cli.lli_list) {
-               if (cfs_time_after(ocapa->c_expiry, tmp->c_expiry)) {
-                       next = &tmp->u.cli.lli_list;
-                       break;
-               }
-       }
-       LASSERT(&ocapa->u.cli.lli_list != next);
-       list_move_tail(&ocapa->u.cli.lli_list, next ?: &lli->lli_oss_capas);
-}
-
-static struct obd_capa *do_add_oss_capa(struct inode *inode,
-                                       struct obd_capa *ocapa)
-{
-       struct obd_capa *old;
-       struct lustre_capa *capa = &ocapa->c_capa;
-
-       LASSERTF(S_ISREG(inode->i_mode),
-                "inode has oss capa, but not regular file, mode: %d\n",
-                inode->i_mode);
-
-       /* FIXME: can't replace it so easily with fine-grained opc */
-       old = do_lookup_oss_capa(inode, capa_opc(capa) & CAPA_OPC_OSS_ONLY);
-       if (!old) {
-               ocapa->u.cli.inode = inode;
-               INIT_LIST_HEAD(&ocapa->u.cli.lli_list);
-               capa_count[CAPA_SITE_CLIENT]++;
-
-               DEBUG_CAPA(D_SEC, capa, "add OSS");
-       } else {
-               spin_lock(&old->c_lock);
-               old->c_capa = *capa;
-               spin_unlock(&old->c_lock);
-
-               DEBUG_CAPA(D_SEC, capa, "update OSS");
-
-               capa_put(ocapa);
-               ocapa = old;
-       }
-
-       inode_add_oss_capa(inode, ocapa);
-       return ocapa;
-}
-
-struct obd_capa *ll_add_capa(struct inode *inode, struct obd_capa *ocapa)
-{
-       spin_lock(&capa_lock);
-       ocapa = capa_for_mds(&ocapa->c_capa) ? do_add_mds_capa(inode, ocapa) :
-                                              do_add_oss_capa(inode, ocapa);
-
-       /* truncate capa won't renew */
-       if (ocapa->c_capa.lc_opc != CAPA_OPC_OSS_TRUNC) {
-               set_capa_expiry(ocapa);
-               list_del_init(&ocapa->c_list);
-               sort_add_capa(ocapa, ll_capa_list);
-
-               update_capa_timer(ocapa, capa_renewal_time(ocapa));
-       }
-
-       spin_unlock(&capa_lock);
-
-       atomic_set(&ll_capa_debug, 1);
-       return ocapa;
-}
-
-static inline void delay_capa_renew(struct obd_capa *oc, unsigned long delay)
-{
-       /* NB: set a fake expiry for this capa to prevent it renew too soon */
-       oc->c_expiry = cfs_time_add(oc->c_expiry, cfs_time_seconds(delay));
-}
-
-static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa)
-{
-       struct inode *inode = ocapa->u.cli.inode;
-       int rc = 0;
-
-       LASSERT(ocapa);
-
-       if (IS_ERR(capa)) {
-               /* set error code */
-               rc = PTR_ERR(capa);
-               spin_lock(&capa_lock);
-               if (rc == -ENOENT) {
-                       DEBUG_CAPA(D_SEC, &ocapa->c_capa,
-                                  "renewal canceled because object removed");
-                       ll_capa_renewal_noent++;
-               } else {
-                       ll_capa_renewal_failed++;
-
-                       /* failed capa won't be renewed any longer, but if -EIO,
-                        * client might be doing recovery, retry in 2 min.
-                        */
-                       if (rc == -EIO && !capa_is_expired(ocapa)) {
-                               delay_capa_renew(ocapa, 120);
-                               DEBUG_CAPA(D_ERROR, &ocapa->c_capa,
-                                          "renewal failed: -EIO, retry in 2 mins");
-                               ll_capa_renewal_retries++;
-                               goto retry;
-                       } else {
-                               DEBUG_CAPA(D_ERROR, &ocapa->c_capa,
-                                          "renewal failed(rc: %d) for", rc);
-                       }
-               }
-
-               list_del_init(&ocapa->c_list);
-               sort_add_capa(ocapa, &ll_idle_capas);
-               spin_unlock(&capa_lock);
-
-               capa_put(ocapa);
-               iput(inode);
-               return rc;
-       }
-
-       spin_lock(&ocapa->c_lock);
-       LASSERT(!memcmp(&ocapa->c_capa, capa,
-                       offsetof(struct lustre_capa, lc_opc)));
-       ocapa->c_capa = *capa;
-       set_capa_expiry(ocapa);
-       spin_unlock(&ocapa->c_lock);
-
-       spin_lock(&capa_lock);
-       if (capa_for_oss(capa))
-               inode_add_oss_capa(inode, ocapa);
-       DEBUG_CAPA(D_SEC, capa, "renew");
-retry:
-       list_del_init(&ocapa->c_list);
-       sort_add_capa(ocapa, ll_capa_list);
-       update_capa_timer(ocapa, capa_renewal_time(ocapa));
-       spin_unlock(&capa_lock);
-
-       capa_put(ocapa);
-       iput(inode);
-       return rc;
-}
-
-void ll_capa_open(struct inode *inode)
-{
-       struct ll_inode_info *lli = ll_i2info(inode);
-
-       if ((ll_i2sbi(inode)->ll_flags & (LL_SBI_MDS_CAPA | LL_SBI_OSS_CAPA))
-           == 0)
-               return;
-
-       if (!S_ISREG(inode->i_mode))
-               return;
-
-       atomic_inc(&lli->lli_open_count);
-}
-
-void ll_capa_close(struct inode *inode)
-{
-       struct ll_inode_info *lli = ll_i2info(inode);
-
-       if ((ll_i2sbi(inode)->ll_flags & (LL_SBI_MDS_CAPA | LL_SBI_OSS_CAPA))
-           == 0)
-               return;
-
-       if (!S_ISREG(inode->i_mode))
-               return;
-
-       atomic_dec(&lli->lli_open_count);
-}
-
-/* delete CAPA_OPC_OSS_TRUNC only */
-void ll_truncate_free_capa(struct obd_capa *ocapa)
-{
-       if (!ocapa)
-               return;
-
-       LASSERT(ocapa->c_capa.lc_opc & CAPA_OPC_OSS_TRUNC);
-       DEBUG_CAPA(D_SEC, &ocapa->c_capa, "free truncate");
-
-       /* release ref when find */
-       capa_put(ocapa);
-       if (likely(ocapa->c_capa.lc_opc == CAPA_OPC_OSS_TRUNC)) {
-               spin_lock(&capa_lock);
-               ll_delete_capa(ocapa);
-               spin_unlock(&capa_lock);
-       }
-}
-
-void ll_clear_inode_capas(struct inode *inode)
-{
-       struct ll_inode_info *lli = ll_i2info(inode);
-       struct obd_capa *ocapa, *tmp;
-
-       spin_lock(&capa_lock);
-       ocapa = lli->lli_mds_capa;
-       if (ocapa)
-               ll_delete_capa(ocapa);
-
-       list_for_each_entry_safe(ocapa, tmp, &lli->lli_oss_capas,
-                                u.cli.lli_list)
-               ll_delete_capa(ocapa);
-       spin_unlock(&capa_lock);
-}
-
-void ll_print_capa_stat(struct ll_sb_info *sbi)
-{
-       if (sbi->ll_flags & (LL_SBI_MDS_CAPA | LL_SBI_OSS_CAPA))
-               LCONSOLE_INFO("Fid capabilities renewed: %llu\n"
-                             "Fid capabilities renewal ENOENT: %llu\n"
-                             "Fid capabilities failed to renew: %llu\n"
-                             "Fid capabilities renewal retries: %llu\n",
-                             ll_capa_renewed, ll_capa_renewal_noent,
-                             ll_capa_renewal_failed, ll_capa_renewal_retries);
-}
 
        struct lu_fid              lli_pfid;
 
        struct list_head                      lli_close_list;
-       struct list_head                      lli_oss_capas;
        /* open count currently used by capability only, indicate whether
         * capability needs renewal */
        atomic_t                    lli_open_count;
-       struct obd_capa         *lli_mds_capa;
        unsigned long                 lli_rmtperm_time;
 
        /* handle is to be sent to MDS later on done_writing and setattr.
 #define LL_SBI_USER_XATTR      0x08 /* support user xattr */
 #define LL_SBI_ACL            0x10 /* support ACL */
 #define LL_SBI_RMT_CLIENT      0x40 /* remote client */
-#define LL_SBI_MDS_CAPA          0x80 /* support mds capa */
-#define LL_SBI_OSS_CAPA         0x100 /* support oss capa */
+#define LL_SBI_MDS_CAPA                 0x80 /* support mds capa, obsolete */
+#define LL_SBI_OSS_CAPA                0x100 /* support oss capa, obsolete */
 #define LL_SBI_LOCALFLOCK       0x200 /* Local flocks support by kernel */
 #define LL_SBI_LRU_RESIZE       0x400 /* lru resize support */
 #define LL_SBI_LAZYSTATFS       0x800 /* lazystatfs mount option */
 int ll_update_remote_perm(struct inode *inode, struct mdt_remote_perm *perm);
 int lustre_check_remote_perm(struct inode *inode, int mask);
 
-/* llite/llite_capa.c */
-extern struct timer_list ll_capa_timer;
-
-int ll_capa_thread_start(void);
-void ll_capa_thread_stop(void);
-void ll_capa_timer_callback(unsigned long unused);
-
-struct obd_capa *ll_add_capa(struct inode *inode, struct obd_capa *ocapa);
-
-void ll_capa_open(struct inode *inode);
-void ll_capa_close(struct inode *inode);
-
-struct obd_capa *ll_mdscapa_get(struct inode *inode);
-struct obd_capa *ll_osscapa_get(struct inode *inode, __u64 opc);
-
-void ll_truncate_free_capa(struct obd_capa *ocapa);
-void ll_clear_inode_capas(struct inode *inode);
-void ll_print_capa_stat(struct ll_sb_info *sbi);
-
 /* llite/llite_cl.c */
 extern struct lu_device_type vvp_device_type;
 
 #define cl_inode_ctime(inode) LTIME_S((inode)->i_ctime)
 #define cl_inode_mtime(inode) LTIME_S((inode)->i_mtime)
 
-struct obd_capa *cl_capa_lookup(struct inode *inode, enum cl_req_type crt);
-
 int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end,
                       enum cl_fsync_mode mode, int ignore_layout);
 
 
        struct inode *root = NULL;
        struct ll_sb_info *sbi = ll_s2sbi(sb);
        struct obd_device *obd;
-       struct obd_capa *oc = NULL;
        struct obd_statfs *osfs = NULL;
        struct ptlrpc_request *request = NULL;
        struct obd_connect_data *data = NULL;
        data->ocd_connect_flags = OBD_CONNECT_IBITS    | OBD_CONNECT_NODEVOH  |
                                  OBD_CONNECT_ATTRFID  |
                                  OBD_CONNECT_VERSION  | OBD_CONNECT_BRW_SIZE |
-                                 OBD_CONNECT_MDS_CAPA | OBD_CONNECT_OSS_CAPA |
                                  OBD_CONNECT_CANCELSET | OBD_CONNECT_FID     |
                                  OBD_CONNECT_AT       | OBD_CONNECT_LOV_V3   |
                                  OBD_CONNECT_RMT_CLIENT | OBD_CONNECT_VBR    |
                }
        }
 
-       if (data->ocd_connect_flags & OBD_CONNECT_MDS_CAPA) {
-               LCONSOLE_INFO("client enabled MDS capability!\n");
-               sbi->ll_flags |= LL_SBI_MDS_CAPA;
-       }
-
-       if (data->ocd_connect_flags & OBD_CONNECT_OSS_CAPA) {
-               LCONSOLE_INFO("client enabled OSS capability!\n");
-               sbi->ll_flags |= LL_SBI_OSS_CAPA;
-       }
-
        if (data->ocd_connect_flags & OBD_CONNECT_64BITHASH)
                sbi->ll_flags |= LL_SBI_64BIT_HASH;
 
        mutex_unlock(&sbi->ll_lco.lco_lock);
 
        fid_zero(&sbi->ll_root_fid);
-       err = md_getstatus(sbi->ll_md_exp, &sbi->ll_root_fid, &oc);
+       err = md_getstatus(sbi->ll_md_exp, &sbi->ll_root_fid);
        if (err) {
                CERROR("cannot mds_connect: rc = %d\n", err);
                goto out_lock_cn_cb;
 
        /* make root inode
         * XXX: move this to after cbd setup? */
-       valid = OBD_MD_FLGETATTR | OBD_MD_FLBLOCKS | OBD_MD_FLMDSCAPA;
+       valid = OBD_MD_FLGETATTR | OBD_MD_FLBLOCKS;
        if (sbi->ll_flags & LL_SBI_RMT_CLIENT)
                valid |= OBD_MD_FLRMTPERM;
        else if (sbi->ll_flags & LL_SBI_ACL)
 
        op_data->op_fid1 = sbi->ll_root_fid;
        op_data->op_mode = 0;
-       op_data->op_capa1 = oc;
        op_data->op_valid = valid;
 
        err = md_getattr(sbi->ll_md_exp, op_data, &request);
-       if (oc)
-               capa_put(oc);
        kfree(op_data);
        if (err) {
                CERROR("%s: md_getattr failed for root: rc = %d\n",
        /* Do not set lli_fid, it has been initialized already. */
        fid_zero(&lli->lli_pfid);
        INIT_LIST_HEAD(&lli->lli_close_list);
-       INIT_LIST_HEAD(&lli->lli_oss_capas);
        atomic_set(&lli->lli_open_count, 0);
-       lli->lli_mds_capa = NULL;
        lli->lli_rmtperm_time = 0;
        lli->lli_pending_och = NULL;
        lli->lli_mds_read_och = NULL;
 
        CDEBUG(D_VFSTRACE, "VFS Op: sb %p - %s\n", sb, profilenm);
 
-       ll_print_capa_stat(sbi);
-
        cfg.cfg_instance = sb;
        lustre_end_log(sb, profilenm, &cfg);
 
 #endif
        lli->lli_inode_magic = LLI_INODE_DEAD;
 
-       ll_clear_inode_capas(inode);
        if (!S_ISDIR(inode->i_mode))
                LASSERT(list_empty(&lli->lli_agl_list));
 
        }
 
        ia_valid = op_data->op_attr.ia_valid;
-       /* inode size will be in ll_setattr_ost, can't do it now since dirty
+       /* inode size will be in cl_setattr_ost, can't do it now since dirty
         * cache is not cleared yet. */
        op_data->op_attr.ia_valid &= ~(TIMES_SET_FLAGS | ATTR_SIZE);
        rc = simple_setattr(dentry, &op_data->op_attr);
        return rc;
 }
 
-static int ll_setattr_ost(struct inode *inode, struct iattr *attr)
-{
-       struct obd_capa *capa;
-       int rc;
-
-       if (attr->ia_valid & ATTR_SIZE)
-               capa = ll_osscapa_get(inode, CAPA_OPC_OSS_TRUNC);
-       else
-               capa = ll_mdscapa_get(inode);
-
-       rc = cl_setattr_ost(inode, attr, capa);
-
-       if (attr->ia_valid & ATTR_SIZE)
-               ll_truncate_free_capa(capa);
-       else
-               capa_put(capa);
-
-       return rc;
-}
-
-
 /* If this inode has objects allocated to it (lsm != NULL), then the OST
  * object(s) determine the file size and mtime.  Otherwise, the MDS will
  * keep these values until such a time that objects are allocated for it.
                 * time de-synchronization between MDT inode and OST objects */
                if (attr->ia_valid & ATTR_SIZE)
                        down_write(&lli->lli_trunc_sem);
-               rc = ll_setattr_ost(inode, attr);
+               rc = cl_setattr_ost(inode, attr);
                if (attr->ia_valid & ATTR_SIZE)
                        up_write(&lli->lli_trunc_sem);
        }
                        inode->i_blocks = body->blocks;
        }
 
-       if (body->valid & OBD_MD_FLMDSCAPA) {
-               LASSERT(md->mds_capa);
-               ll_add_capa(inode, md->mds_capa);
-       }
-       if (body->valid & OBD_MD_FLOSSCAPA) {
-               LASSERT(md->oss_capa);
-               ll_add_capa(inode, md->oss_capa);
-       }
-
        if (body->valid & OBD_MD_TSTATE) {
                if (body->t_state & MS_RESTORE)
                        lli->lli_flags |= LLIF_FILE_RESTORING;
                oinfo.oi_oa->o_flags = flags;
                oinfo.oi_oa->o_valid = OBD_MD_FLID | OBD_MD_FLFLAGS |
                                       OBD_MD_FLGROUP;
-               oinfo.oi_capa = ll_mdscapa_get(inode);
                obdo_set_parent_fid(oinfo.oi_oa, &ll_i2info(inode)->lli_fid);
                rc = obd_setattr_rqset(sbi->ll_dt_exp, &oinfo, NULL);
-               capa_put(oinfo.oi_capa);
                OBDO_FREE(oinfo.oi_oa);
                ccc_inode_lsm_put(inode, lsm);
 
 
        ll_i2gids(op_data->op_suppgids, i1, i2);
        op_data->op_fid1 = *ll_inode2fid(i1);
-       op_data->op_capa1 = ll_mdscapa_get(i1);
 
-       if (i2) {
+       if (i2)
                op_data->op_fid2 = *ll_inode2fid(i2);
-               op_data->op_capa2 = ll_mdscapa_get(i2);
-       } else {
+       else
                fid_zero(&op_data->op_fid2);
-               op_data->op_capa2 = NULL;
-       }
 
        op_data->op_name = name;
        op_data->op_namelen = namelen;
                if (likely(!lli->lli_has_smd && !fid_is_zero(&lli->lli_pfid)))
                        op_data->op_fid1 = lli->lli_pfid;
                spin_unlock(&lli->lli_lock);
-               /** We ignore parent's capability temporary. */
        }
 
        /* When called by ll_setattr_raw, file is i1. */
 
 void ll_finish_md_op_data(struct md_op_data *op_data)
 {
-       capa_put(op_data->op_capa1);
-       capa_put(op_data->op_capa2);
        kfree(op_data);
 }
 
 
        struct lov_stripe_md *lsm = NULL;
        struct obd_trans_info oti = { 0 };
        struct obdo *oa;
-       struct obd_capa *oc = NULL;
        int rc;
 
        /* req is swabbed so this is safe */
                }
        }
 
-       if (body->valid & OBD_MD_FLOSSCAPA) {
-               rc = md_unpack_capa(ll_i2mdexp(dir), request, &RMF_CAPA2, &oc);
-               if (rc)
-                       goto out_free_memmd;
-       }
-
        rc = obd_destroy(NULL, ll_i2dtexp(dir), oa, lsm, &oti,
-                        ll_i2mdexp(dir), oc);
-       capa_put(oc);
+                        ll_i2mdexp(dir));
        if (rc)
                CERROR("obd destroy objid "DOSTID" error %d\n",
                       POSTID(&lsm->lsm_oi), rc);
 
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct ptlrpc_request *req = NULL;
        struct mdt_remote_perm *perm;
-       struct obd_capa *oc;
        unsigned long save;
        int i = 0, rc;
 
                        LBUG();
                }
 
-               oc = ll_mdscapa_get(inode);
-               rc = md_get_remote_perm(sbi->ll_md_exp, ll_inode2fid(inode), oc,
+               rc = md_get_remote_perm(sbi->ll_md_exp, ll_inode2fid(inode),
                                        ll_i2suppgid(inode), &req);
-               capa_put(oc);
                if (rc) {
                        mutex_unlock(&lli->lli_rmtperm_mutex);
                        break;
 
        return result;
 }
 
-struct obd_capa *cl_capa_lookup(struct inode *inode, enum cl_req_type crt)
-{
-       __u64 opc;
-
-       opc = crt == CRT_WRITE ? CAPA_OPC_OSS_WRITE : CAPA_OPC_OSS_RW;
-       return ll_osscapa_get(inode, opc);
-}
-
 static void ll_ra_stats_inc_sbi(struct ll_sb_info *sbi, enum ra_stat which);
 
 /**
 
 {
        LASSERT(minfo && einfo);
        iput(minfo->mi_dir);
-       capa_put(minfo->mi_data.op_capa1);
-       capa_put(minfo->mi_data.op_capa2);
        kfree(minfo);
        kfree(einfo);
 }
 
 /**
- * There is race condition between "capa_put" and "ll_statahead_interpret" for
- * accessing "op_data.op_capa[1,2]" as following:
- * "capa_put" releases "op_data.op_capa[1,2]"'s reference count after calling
- * "md_intent_getattr_async". But "ll_statahead_interpret" maybe run first, and
- * fill "op_data.op_capa[1,2]" as POISON, then cause "capa_put" access invalid
- * "ocapa". So here reserve "op_data.op_capa[1,2]" in "pcapa" before calling
- * "md_intent_getattr_async".
+ * prepare arguments for async stat RPC.
  */
 static int sa_args_init(struct inode *dir, struct inode *child,
                        struct ll_sa_entry *entry, struct md_enqueue_info **pmi,
-                       struct ldlm_enqueue_info **pei,
-                       struct obd_capa **pcapa)
+                       struct ldlm_enqueue_info **pei)
 {
        struct qstr           *qstr = &entry->se_qstr;
        struct ll_inode_info     *lli  = ll_i2info(dir);
 
        *pmi = minfo;
        *pei = einfo;
-       pcapa[0] = op_data->op_capa1;
-       pcapa[1] = op_data->op_capa2;
 
        return 0;
 }
 {
        struct md_enqueue_info   *minfo;
        struct ldlm_enqueue_info *einfo;
-       struct obd_capa   *capas[2];
        int                    rc;
 
-       rc = sa_args_init(dir, NULL, entry, &minfo, &einfo, capas);
+       rc = sa_args_init(dir, NULL, entry, &minfo, &einfo);
        if (rc)
                return rc;
 
        rc = md_intent_getattr_async(ll_i2mdexp(dir), minfo, einfo);
-       if (!rc) {
-               capa_put(capas[0]);
-               capa_put(capas[1]);
-       } else {
+       if (rc < 0)
                sa_args_fini(minfo, einfo);
-       }
 
        return rc;
 }
                                         .d.lustre.it_lock_handle = 0 };
        struct md_enqueue_info   *minfo;
        struct ldlm_enqueue_info *einfo;
-       struct obd_capa   *capas[2];
        int rc;
 
        if (unlikely(inode == NULL))
                return 1;
        }
 
-       rc = sa_args_init(dir, inode, entry, &minfo, &einfo, capas);
+       rc = sa_args_init(dir, inode, entry, &minfo, &einfo);
        if (rc) {
                entry->se_inode = NULL;
                iput(inode);
        }
 
        rc = md_intent_getattr_async(ll_i2mdexp(dir), minfo, einfo);
-       if (!rc) {
-               capa_put(capas[0]);
-               capa_put(capas[1]);
-       } else {
+       if (rc < 0) {
                entry->se_inode = NULL;
                iput(inode);
                sa_args_fini(minfo, einfo);
 
 
        ktime_get_ts64(&ts);
        cfs_srand(ts.tv_sec ^ seed[0], ts.tv_nsec ^ seed[1]);
-       setup_timer(&ll_capa_timer, ll_capa_timer_callback, 0);
-       rc = ll_capa_thread_start();
-       if (rc != 0)
-               goto out_sysfs;
 
        rc = vvp_global_init();
        if (rc != 0)
-               goto out_capa;
+               goto out_sysfs;
 
        rc = ll_xattr_init();
        if (rc != 0)
 
 out_vvp:
        vvp_global_fini();
-out_capa:
-       del_timer(&ll_capa_timer);
-       ll_capa_thread_stop();
 out_sysfs:
        kset_unregister(llite_kset);
 out_debugfs:
 
        ll_xattr_fini();
        vvp_global_fini();
-       del_timer(&ll_capa_timer);
-       ll_capa_thread_stop();
-       LASSERTF(capa_count[CAPA_SITE_CLIENT] == 0,
-                "client remaining capa count %d\n",
-                capa_count[CAPA_SITE_CLIENT]);
 
        kmem_cache_destroy(ll_inode_cachep);
        kmem_cache_destroy(ll_rmtperm_hash_cachep);
 
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct ptlrpc_request *req = NULL;
        int xattr_type, rc;
-       struct obd_capa *oc;
 #ifdef CONFIG_FS_POSIX_ACL
        struct rmtacl_ctl_entry *rce = NULL;
        posix_acl_xattr_header *new_value = NULL;
                valid |= rce_ops2valid(rce->rce_ops);
        }
 #endif
-       oc = ll_mdscapa_get(inode);
-       rc = md_setxattr(sbi->ll_md_exp, ll_inode2fid(inode), oc,
+       rc = md_setxattr(sbi->ll_md_exp, ll_inode2fid(inode),
                         valid, name, pv, size, 0, flags,
                         ll_i2suppgid(inode), &req);
-       capa_put(oc);
 #ifdef CONFIG_FS_POSIX_ACL
        if (new_value != NULL)
                lustre_posix_acl_xattr_free(new_value, size);
        struct mdt_body *body;
        int xattr_type, rc;
        void *xdata;
-       struct obd_capa *oc;
        struct rmtacl_ctl_entry *rce = NULL;
        struct ll_inode_info *lli = ll_i2info(inode);
 
                }
        } else {
 getxattr_nocache:
-               oc = ll_mdscapa_get(inode);
-               rc = md_getxattr(sbi->ll_md_exp, ll_inode2fid(inode), oc,
+               rc = md_getxattr(sbi->ll_md_exp, ll_inode2fid(inode),
                                valid | (rce ? rce_ops2valid(rce->rce_ops) : 0),
                                name, NULL, 0, size, 0, &req);
-               capa_put(oc);
 
                if (rc < 0)
                        goto out_xattr;
 
 }
 
 static int lmv_getstatus(struct obd_export *exp,
-                        struct lu_fid *fid,
-                        struct obd_capa **pc)
+                        struct lu_fid *fid)
 {
        struct obd_device    *obd = exp->exp_obd;
        struct lmv_obd       *lmv = &obd->u.lmv;
        if (rc)
                return rc;
 
-       rc = md_getstatus(lmv->tgts[0]->ltd_exp, fid, pc);
+       rc = md_getstatus(lmv->tgts[0]->ltd_exp, fid);
        return rc;
 }
 
 static int lmv_getxattr(struct obd_export *exp, const struct lu_fid *fid,
-                       struct obd_capa *oc, u64 valid, const char *name,
+                       u64 valid, const char *name,
                        const char *input, int input_size, int output_size,
                        int flags, struct ptlrpc_request **request)
 {
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
-       rc = md_getxattr(tgt->ltd_exp, fid, oc, valid, name, input,
+       rc = md_getxattr(tgt->ltd_exp, fid, valid, name, input,
                         input_size, output_size, flags, request);
 
        return rc;
 }
 
 static int lmv_setxattr(struct obd_export *exp, const struct lu_fid *fid,
-                       struct obd_capa *oc, u64 valid, const char *name,
+                       u64 valid, const char *name,
                        const char *input, int input_size, int output_size,
                        int flags, __u32 suppgid,
                        struct ptlrpc_request **request)
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
-       rc = md_setxattr(tgt->ltd_exp, fid, oc, valid, name, input,
+       rc = md_setxattr(tgt->ltd_exp, fid, valid, name, input,
                         input_size, output_size, flags, suppgid,
                         request);
 
 }
 
 static int lmv_sync(struct obd_export *exp, const struct lu_fid *fid,
-                   struct obd_capa *oc, struct ptlrpc_request **request)
+                   struct ptlrpc_request **request)
 {
        struct obd_device        *obd = exp->exp_obd;
        struct lmv_obd      *lmv = &obd->u.lmv;
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
-       rc = md_sync(tgt->ltd_exp, fid, oc, request);
+       rc = md_sync(tgt->ltd_exp, fid, request);
        return rc;
 }
 
 
 static int lmv_get_remote_perm(struct obd_export *exp,
                               const struct lu_fid *fid,
-                              struct obd_capa *oc, __u32 suppgid,
-                              struct ptlrpc_request **request)
+                              __u32 suppgid, struct ptlrpc_request **request)
 {
        struct obd_device       *obd = exp->exp_obd;
        struct lmv_obd    *lmv = &obd->u.lmv;
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
-       rc = md_get_remote_perm(tgt->ltd_exp, fid, oc, suppgid, request);
-       return rc;
-}
-
-static int lmv_renew_capa(struct obd_export *exp, struct obd_capa *oc,
-                         renew_capa_cb_t cb)
-{
-       struct obd_device       *obd = exp->exp_obd;
-       struct lmv_obd    *lmv = &obd->u.lmv;
-       struct lmv_tgt_desc     *tgt;
-       int                   rc;
-
-       rc = lmv_check_connect(obd);
-       if (rc)
-               return rc;
-
-       tgt = lmv_find_target(lmv, &oc->c_capa.lc_fid);
-       if (IS_ERR(tgt))
-               return PTR_ERR(tgt);
-
-       rc = md_renew_capa(tgt->ltd_exp, oc, cb);
+       rc = md_get_remote_perm(tgt->ltd_exp, fid, suppgid, request);
        return rc;
 }
 
-static int lmv_unpack_capa(struct obd_export *exp, struct ptlrpc_request *req,
-                          const struct req_msg_field *field,
-                          struct obd_capa **oc)
-{
-       struct lmv_obd *lmv = &exp->exp_obd->u.lmv;
-
-       return md_unpack_capa(lmv->tgts[0]->ltd_exp, req, field, oc);
-}
-
 static int lmv_intent_getattr_async(struct obd_export *exp,
                                    struct md_enqueue_info *minfo,
                                    struct ldlm_enqueue_info *einfo)
        .m_free_lustre_md       = lmv_free_lustre_md,
        .m_set_open_replay_data = lmv_set_open_replay_data,
        .m_clear_open_replay_data = lmv_clear_open_replay_data,
-       .m_renew_capa      = lmv_renew_capa,
-       .m_unpack_capa    = lmv_unpack_capa,
        .m_get_remote_perm      = lmv_get_remote_perm,
        .m_intent_getattr_async = lmv_intent_getattr_async,
        .m_revalidate_lock      = lmv_revalidate_lock
 
        case CIT_SETATTR: {
                io->u.ci_setattr.sa_attr = parent->u.ci_setattr.sa_attr;
                io->u.ci_setattr.sa_valid = parent->u.ci_setattr.sa_valid;
-               io->u.ci_setattr.sa_capa = parent->u.ci_setattr.sa_capa;
                if (cl_io_is_trunc(io)) {
                        loff_t new_size = parent->u.ci_setattr.sa_attr.lvb_size;
 
        case CIT_FSYNC: {
                io->u.ci_fsync.fi_start = start;
                io->u.ci_fsync.fi_end = end;
-               io->u.ci_fsync.fi_capa = parent->u.ci_fsync.fi_capa;
                io->u.ci_fsync.fi_fid = parent->u.ci_fsync.fi_fid;
                io->u.ci_fsync.fi_mode = parent->u.ci_fsync.fi_mode;
                break;
 
 
 static int lov_destroy(const struct lu_env *env, struct obd_export *exp,
                       struct obdo *oa, struct lov_stripe_md *lsm,
-                      struct obd_trans_info *oti, struct obd_export *md_exp,
-                      void *capa)
+                      struct obd_trans_info *oti, struct obd_export *md_exp)
 {
        struct lov_request_set *set;
        struct obd_info oinfo;
                        oti->oti_logcookies = set->set_cookies + req->rq_stripe;
 
                err = obd_destroy(env, lov->lov_tgts[req->rq_idx]->ltd_exp,
-                                 req->rq_oi.oi_oa, NULL, oti, NULL, capa);
+                                 req->rq_oi.oi_oa, NULL, oti, NULL);
                err = lov_update_common_set(set, req, err);
                if (err) {
                        CERROR("%s: destroying objid "DOSTID" subobj "
        struct lov_tgt_desc *tgt;
        unsigned incr, check_uuid,
                 do_inactive, no_set;
-       unsigned next_id = 0,  mds_con = 0, capa = 0;
+       unsigned next_id = 0,  mds_con = 0;
 
        incr = check_uuid = do_inactive = no_set = 0;
        if (set == NULL) {
                /* use defaults:  do_inactive = incr = 0; */
        } else if (KEY_IS(KEY_MDS_CONN)) {
                mds_con = 1;
-       } else if (KEY_IS(KEY_CAPA_KEY)) {
-               capa = 1;
        } else if (KEY_IS(KEY_CACHE_SET)) {
                LASSERT(lov->lov_cache == NULL);
                lov->lov_cache = val;
                        err = obd_set_info_async(env, tgt->ltd_exp,
                                         keylen, key, vallen,
                                         ((struct obd_id_info *)val)->data, set);
-               } else if (capa) {
-                       struct mds_capa_info *info = (struct mds_capa_info *)val;
-
-                       LASSERT(vallen == sizeof(*info));
-
-                        /* Only want a specific OSC */
-                       if (info->uuid &&
-                           !obd_uuid_equals(info->uuid, &tgt->ltd_uuid))
-                               continue;
-
-                       err = obd_set_info_async(env, tgt->ltd_exp, keylen,
-                                                key, sizeof(*info->capa),
-                                                info->capa, set);
                } else {
                        /* Only want a specific OSC */
                        if (check_uuid &&
 
                       sizeof(*req->rq_oi.oi_oa));
                req->rq_oi.oi_oa->o_oi = loi->loi_oi;
                req->rq_oi.oi_cb_up = cb_getattr_update;
-               req->rq_oi.oi_capa = oinfo->oi_capa;
 
                lov_set_add_req(req, set);
        }
                req->rq_oi.oi_oa->o_oi = loi->loi_oi;
                req->rq_oi.oi_oa->o_stripe_idx = i;
                req->rq_oi.oi_cb_up = cb_setattr_update;
-               req->rq_oi.oi_capa = oinfo->oi_capa;
 
                if (oinfo->oi_oa->o_valid & OBD_MD_FLSIZE) {
                        int off = lov_stripe_offset(oinfo->oi_md,
 
 void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars);
 
 void mdc_pack_body(struct ptlrpc_request *req, const struct lu_fid *fid,
-                  struct obd_capa *oc, __u64 valid, int ea_size,
-                  __u32 suppgid, int flags);
-void mdc_pack_capa(struct ptlrpc_request *req,
-                  const struct req_msg_field *field, struct obd_capa *oc);
+                  __u64 valid, int ea_size, __u32 suppgid, int flags);
 int mdc_pack_req(struct ptlrpc_request *req, int version, int opc);
 void mdc_is_subdir_pack(struct ptlrpc_request *req, const struct lu_fid *pfid,
                        const struct lu_fid *cfid, int flags);
 void mdc_swap_layouts_pack(struct ptlrpc_request *req,
                           struct md_op_data *op_data);
 void mdc_readdir_pack(struct ptlrpc_request *req, __u64 pgoff, __u32 size,
-                     const struct lu_fid *fid, struct obd_capa *oc);
+                     const struct lu_fid *fid);
 void mdc_getattr_pack(struct ptlrpc_request *req, __u64 valid, int flags,
                      struct md_op_data *data, int ea_size);
 void mdc_setattr_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
                      ldlm_policy_data_t *policy, ldlm_mode_t mode,
                      ldlm_cancel_flags_t flags, void *opaque);
 
-static inline void mdc_set_capa_size(struct ptlrpc_request *req,
-                                    const struct req_msg_field *field,
-                                    struct obd_capa *oc)
-{
-       if (oc == NULL)
-               req_capsule_set_size(&req->rq_pill, field, RCL_CLIENT, 0);
-       else
-               /* it is already calculated as sizeof struct obd_capa */
-               ;
-}
-
 int mdc_revalidate_lock(struct obd_export *exp, struct lookup_intent *it,
                        struct lu_fid *fid, __u64 *bits);
 
 
        b->capability = cfs_curproc_cap_pack();
 }
 
-void mdc_pack_capa(struct ptlrpc_request *req,
-                  const struct req_msg_field *field,
-                  struct obd_capa *oc)
-{
-       struct req_capsule *pill = &req->rq_pill;
-       struct lustre_capa *c;
-
-       if (oc == NULL) {
-               LASSERT(req_capsule_get_size(pill, field, RCL_CLIENT) == 0);
-               return;
-       }
-
-       c = req_capsule_client_get(pill, field);
-       LASSERT(c != NULL);
-       capa_cpy(c, oc);
-       DEBUG_CAPA(D_SEC, c, "pack");
-}
-
 void mdc_is_subdir_pack(struct ptlrpc_request *req, const struct lu_fid *pfid,
                        const struct lu_fid *cfid, int flags)
 {
        b->fid1 = op_data->op_fid1;
        b->fid2 = op_data->op_fid2;
        b->valid |= OBD_MD_FLID;
-
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
-       mdc_pack_capa(req, &RMF_CAPA2, op_data->op_capa2);
 }
 
-void mdc_pack_body(struct ptlrpc_request *req,
-                  const struct lu_fid *fid, struct obd_capa *oc,
+void mdc_pack_body(struct ptlrpc_request *req, const struct lu_fid *fid,
                   __u64 valid, int ea_size, __u32 suppgid, int flags)
 {
        struct mdt_body *b = req_capsule_client_get(&req->rq_pill,
        if (fid) {
                b->fid1 = *fid;
                b->valid |= OBD_MD_FLID;
-               mdc_pack_capa(req, &RMF_CAPA1, oc);
        }
 }
 
 void mdc_readdir_pack(struct ptlrpc_request *req, __u64 pgoff,
-                     __u32 size, const struct lu_fid *fid, struct obd_capa *oc)
+                     __u32 size, const struct lu_fid *fid)
 {
        struct mdt_body *b = req_capsule_client_get(&req->rq_pill,
                                                    &RMF_MDT_BODY);
        b->nlink = size;                        /* !! */
        __mdc_pack_body(b, -1);
        b->mode = LUDA_FID | LUDA_TYPE;
-
-       mdc_pack_capa(req, &RMF_CAPA1, oc);
 }
 
 /* packing of MDS records */
        rec->cr_bias     = op_data->op_bias;
        rec->cr_umask    = current_umask();
 
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
-
        tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
        LOGL0(op_data->op_name, op_data->op_namelen, tmp);
 
        rec->cr_umask    = current_umask();
        rec->cr_old_handle = op_data->op_handle;
 
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
-       /* the next buffer is child capa, which is used for replay,
-        * will be packed from the data in reply message. */
-
        if (op_data->op_name) {
                tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
                LOGL0(op_data->op_name, op_data->op_namelen, tmp);
        rec = req_capsule_client_get(&req->rq_pill, &RMF_REC_REINT);
        mdc_setattr_pack_rec(rec, op_data);
 
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
-
        if (op_data->op_flags & (MF_SOM_CHANGE | MF_EPOCH_OPEN)) {
                epoch = req_capsule_client_get(&req->rq_pill, &RMF_MDT_EPOCH);
                mdc_ioepoch_pack(epoch, op_data);
        rec->ul_time     = op_data->op_mod_time;
        rec->ul_bias     = op_data->op_bias;
 
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
-
        tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
        LASSERT(tmp != NULL);
        LOGL0(op_data->op_name, op_data->op_namelen, tmp);
        rec->lk_time     = op_data->op_mod_time;
        rec->lk_bias     = op_data->op_bias;
 
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
-       mdc_pack_capa(req, &RMF_CAPA2, op_data->op_capa2);
-
        tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
        LOGL0(op_data->op_name, op_data->op_namelen, tmp);
 }
        rec->rn_mode     = op_data->op_mode;
        rec->rn_bias     = op_data->op_bias;
 
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
-       mdc_pack_capa(req, &RMF_CAPA2, op_data->op_capa2);
-
        tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
        LOGL0(old, oldlen, tmp);
 
        b->fid2 = op_data->op_fid2;
        b->valid |= OBD_MD_FLID;
 
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
-
        if (op_data->op_name) {
                char *tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
 
        rec = req_capsule_client_get(&req->rq_pill, &RMF_REC_REINT);
 
        mdc_setattr_pack_rec(rec, op_data);
-       mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1);
        mdc_ioepoch_pack(epoch, op_data);
        mdc_hsm_release_pack(req, op_data);
 }
 
                return ERR_PTR(-ENOMEM);
        }
 
-       /* parent capability */
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-       /* child capability, reserve the size according to parent capa, it will
-        * be filled after we get the reply */
-       mdc_set_capa_size(req, &RMF_CAPA2, op_data->op_capa1);
-
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                             op_data->op_namelen + 1);
        req_capsule_set_size(&req->rq_pill, &RMF_EADATA, RCL_CLIENT,
        if (req == NULL)
                return ERR_PTR(-ENOMEM);
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ldlm_prep_enqueue_req(exp, req, &cancels, count);
        if (rc) {
                ptlrpc_request_free(req);
        maxdata = class_exp2cliimp(exp)->imp_connect_data.ocd_max_easize;
 
        /* pack the intended request */
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                       op_data->op_valid, maxdata, -1, 0);
+       mdc_pack_body(req, &op_data->op_fid1, op_data->op_valid, maxdata, -1,
+                     0);
 
        req_capsule_set_size(&req->rq_pill, &RMF_EADATA,
                                RCL_SERVER, maxdata);
        if (req == NULL)
                return ERR_PTR(-ENOMEM);
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                             op_data->op_namelen + 1);
 
        struct obd_device     *obddev = class_exp2obd(exp);
        u64                    valid = OBD_MD_FLGETATTR | OBD_MD_FLEASIZE |
                                       OBD_MD_FLMODEASIZE | OBD_MD_FLDIREA |
-                                      OBD_MD_FLMDSCAPA | OBD_MD_MEA |
+                                      OBD_MD_MEA |
                                       (client_is_remote(exp) ?
                                               OBD_MD_FLRMTPERM : OBD_MD_FLACL);
        struct ldlm_intent    *lit;
        if (req == NULL)
                return ERR_PTR(-ENOMEM);
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                             op_data->op_namelen + 1);
 
                        if (perm == NULL)
                                return -EPROTO;
                }
-               if (body->valid & OBD_MD_FLMDSCAPA) {
-                       struct lustre_capa *capa, *p;
-
-                       capa = req_capsule_server_get(pill, &RMF_CAPA1);
-                       if (capa == NULL)
-                               return -EPROTO;
-
-                       if (it->it_op & IT_OPEN) {
-                               /* client fid capa will be checked in replay */
-                               p = req_capsule_client_get(pill, &RMF_CAPA2);
-                               LASSERT(p);
-                               *p = *capa;
-                       }
-               }
-               if (body->valid & OBD_MD_FLOSSCAPA) {
-                       struct lustre_capa *capa;
-
-                       capa = req_capsule_server_get(pill, &RMF_CAPA2);
-                       if (capa == NULL)
-                               return -EPROTO;
-               }
        } else if (it->it_op & IT_LAYOUT) {
                /* maybe the lock was granted right away and layout
                 * is packed into RMF_DLM_LVB of req */
 
                ldlm_lock_list_put(&cancels, l_bl_ast, count);
                return -ENOMEM;
        }
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
        if ((op_data->op_flags & (MF_SOM_CHANGE | MF_EPOCH_OPEN)) == 0)
                req_capsule_set_size(&req->rq_pill, &RMF_MDT_EPOCH, RCL_CLIENT,
                                     0);
                ldlm_lock_list_put(&cancels, l_bl_ast, count);
                return -ENOMEM;
        }
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                             op_data->op_namelen + 1);
        req_capsule_set_size(&req->rq_pill, &RMF_EADATA, RCL_CLIENT,
                        CDEBUG(D_HA, "resend cross eviction\n");
                        return -EIO;
                }
-       } else if (rc == 0) {
-               struct mdt_body *body;
-               struct lustre_capa *capa;
-
-               body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-               LASSERT(body);
-               if (body->valid & OBD_MD_FLMDSCAPA) {
-                       capa = req_capsule_server_get(&req->rq_pill,
-                                                     &RMF_CAPA1);
-                       if (capa == NULL)
-                               rc = -EPROTO;
-               }
        }
 
        *request = req;
                ldlm_lock_list_put(&cancels, l_bl_ast, count);
                return -ENOMEM;
        }
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                             op_data->op_namelen + 1);
 
                ldlm_lock_list_put(&cancels, l_bl_ast, count);
                return -ENOMEM;
        }
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-       mdc_set_capa_size(req, &RMF_CAPA2, op_data->op_capa2);
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                             op_data->op_namelen + 1);
 
                return -ENOMEM;
        }
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-       mdc_set_capa_size(req, &RMF_CAPA2, op_data->op_capa2);
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT, oldlen + 1);
        req_capsule_set_size(&req->rq_pill, &RMF_SYMTGT, RCL_CLIENT, newlen+1);
 
 
 
 #define REQUEST_MINOR 244
 
-struct mdc_renew_capa_args {
-       struct obd_capa *ra_oc;
-       renew_capa_cb_t  ra_cb;
-};
-
 static int mdc_cleanup(struct obd_device *obd);
 
-static int mdc_unpack_capa(struct obd_export *exp, struct ptlrpc_request *req,
-                   const struct req_msg_field *field, struct obd_capa **oc)
-{
-       struct lustre_capa *capa;
-       struct obd_capa *c;
-
-       /* swabbed already in mdc_enqueue */
-       capa = req_capsule_server_get(&req->rq_pill, field);
-       if (capa == NULL)
-               return -EPROTO;
-
-       c = alloc_capa(CAPA_SITE_CLIENT);
-       if (IS_ERR(c)) {
-               CDEBUG(D_INFO, "alloc capa failed!\n");
-               return PTR_ERR(c);
-       }
-
-       c->c_capa = *capa;
-       *oc = c;
-       return 0;
-}
-
 static inline int mdc_queue_wait(struct ptlrpc_request *req)
 {
        struct client_obd *cli = &req->rq_import->imp_obd->u.cli;
        return rc;
 }
 
-/* Helper that implements most of mdc_getstatus and signal_completed_replay. */
-/* XXX this should become mdc_get_info("key"), sending MDS_GET_INFO RPC */
-static int send_getstatus(struct obd_import *imp, struct lu_fid *rootfid,
-                         struct obd_capa **pc, int level, int msg_flags)
+static int mdc_getstatus(struct obd_export *exp, struct lu_fid *rootfid)
 {
        struct ptlrpc_request *req;
        struct mdt_body       *body;
        int                 rc;
 
-       req = ptlrpc_request_alloc_pack(imp, &RQF_MDS_GETSTATUS,
+       req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp),
+                                       &RQF_MDS_GETSTATUS,
                                        LUSTRE_MDS_VERSION, MDS_GETSTATUS);
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_pack_body(req, NULL, NULL, 0, 0, -1, 0);
-       lustre_msg_add_flags(req->rq_reqmsg, msg_flags);
-       req->rq_send_state = level;
+       mdc_pack_body(req, NULL, 0, 0, -1, 0);
+       req->rq_send_state = LUSTRE_IMP_FULL;
 
        ptlrpc_request_set_replen(req);
 
                goto out;
        }
 
-       if (body->valid & OBD_MD_FLMDSCAPA) {
-               rc = mdc_unpack_capa(NULL, req, &RMF_CAPA1, pc);
-               if (rc)
-                       goto out;
-       }
-
        *rootfid = body->fid1;
        CDEBUG(D_NET,
               "root fid="DFID", last_committed=%llu\n",
        return rc;
 }
 
-/* This should be mdc_get_info("rootfid") */
-static int mdc_getstatus(struct obd_export *exp, struct lu_fid *rootfid,
-                 struct obd_capa **pc)
-{
-       return send_getstatus(class_exp2cliimp(exp), rootfid, pc,
-                             LUSTRE_IMP_FULL, 0);
-}
-
 /*
  * This function now is known to always saying that it will receive 4 buffers
  * from server. Even for cases when acl_size and md_size is zero, RPC header
                        return -EPROTO;
        }
 
-       if (body->valid & OBD_MD_FLMDSCAPA) {
-               struct lustre_capa *capa;
-
-               capa = req_capsule_server_get(pill, &RMF_CAPA1);
-               if (capa == NULL)
-                       return -EPROTO;
-       }
-
        return 0;
 }
 
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_GETATTR);
        if (rc) {
                ptlrpc_request_free(req);
                return rc;
        }
 
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                     op_data->op_valid, op_data->op_mode, -1, 0);
+       mdc_pack_body(req, &op_data->op_fid1, op_data->op_valid,
+                     op_data->op_mode, -1, 0);
 
        req_capsule_set_size(&req->rq_pill, &RMF_MDT_MD, RCL_SERVER,
                             op_data->op_mode);
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                             op_data->op_namelen + 1);
 
                return rc;
        }
 
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                     op_data->op_valid, op_data->op_mode,
-                     op_data->op_suppgids[0], 0);
+       mdc_pack_body(req, &op_data->op_fid1, op_data->op_valid,
+                     op_data->op_mode, op_data->op_suppgids[0], 0);
 
        if (op_data->op_name) {
                char *name = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
 static int mdc_xattr_common(struct obd_export *exp,
                            const struct req_format *fmt,
                            const struct lu_fid *fid,
-                           struct obd_capa *oc, int opcode, u64 valid,
+                           int opcode, u64 valid,
                            const char *xattr_name, const char *input,
                            int input_size, int output_size, int flags,
                            __u32 suppgid, struct ptlrpc_request **request)
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, oc);
        if (xattr_name) {
                xattr_namelen = strlen(xattr_name) + 1;
                req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                rec->sx_size   = output_size;
                rec->sx_flags  = flags;
 
-               mdc_pack_capa(req, &RMF_CAPA1, oc);
        } else {
-               mdc_pack_body(req, fid, oc, valid, output_size, suppgid, flags);
+               mdc_pack_body(req, fid, valid, output_size, suppgid, flags);
        }
 
        if (xattr_name) {
 }
 
 static int mdc_setxattr(struct obd_export *exp, const struct lu_fid *fid,
-                struct obd_capa *oc, u64 valid, const char *xattr_name,
-                const char *input, int input_size, int output_size,
-                int flags, __u32 suppgid, struct ptlrpc_request **request)
+                       u64 valid, const char *xattr_name,
+                       const char *input, int input_size, int output_size,
+                       int flags, __u32 suppgid,
+                       struct ptlrpc_request **request)
 {
        return mdc_xattr_common(exp, &RQF_MDS_REINT_SETXATTR,
-                               fid, oc, MDS_REINT, valid, xattr_name,
+                               fid, MDS_REINT, valid, xattr_name,
                                input, input_size, output_size, flags,
                                suppgid, request);
 }
 
 static int mdc_getxattr(struct obd_export *exp, const struct lu_fid *fid,
-                struct obd_capa *oc, u64 valid, const char *xattr_name,
-                const char *input, int input_size, int output_size,
-                int flags, struct ptlrpc_request **request)
+                       u64 valid, const char *xattr_name,
+                       const char *input, int input_size, int output_size,
+                       int flags, struct ptlrpc_request **request)
 {
        return mdc_xattr_common(exp, &RQF_MDS_GETXATTR,
-                               fid, oc, MDS_GETXATTR, valid, xattr_name,
+                               fid, MDS_GETXATTR, valid, xattr_name,
                                input, input_size, output_size, flags,
                                -1, request);
 }
 #endif
                }
        }
-       if (md->body->valid & OBD_MD_FLMDSCAPA) {
-               struct obd_capa *oc = NULL;
-
-               rc = mdc_unpack_capa(NULL, req, &RMF_CAPA1, &oc);
-               if (rc)
-                       goto out;
-               md->mds_capa = oc;
-       }
-
-       if (md->body->valid & OBD_MD_FLOSSCAPA) {
-               struct obd_capa *oc = NULL;
-
-               rc = mdc_unpack_capa(NULL, req, &RMF_CAPA2, &oc);
-               if (rc)
-                       goto out;
-               md->oss_capa = oc;
-       }
 
 out:
        if (rc) {
-               if (md->oss_capa) {
-                       capa_put(md->oss_capa);
-                       md->oss_capa = NULL;
-               }
-               if (md->mds_capa) {
-                       capa_put(md->mds_capa);
-                       md->mds_capa = NULL;
-               }
 #ifdef CONFIG_FS_POSIX_ACL
                posix_acl_release(md->posix_acl);
 #endif
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_CLOSE);
        if (rc) {
                ptlrpc_request_free(req);
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_DONE_WRITING);
        if (rc) {
                ptlrpc_request_free(req);
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_READPAGE);
        if (rc) {
                ptlrpc_request_free(req);
 
        mdc_readdir_pack(req, op_data->op_offset,
                         PAGE_CACHE_SIZE * op_data->op_npages,
-                        &op_data->op_fid1, op_data->op_capa1);
+                        &op_data->op_fid1);
 
        ptlrpc_request_set_replen(req);
        rc = ptlrpc_queue_wait(req);
                goto out;
        }
 
-       mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0);
+       mdc_pack_body(req, NULL, OBD_MD_FLRMTPERM, 0, 0, 0);
 
        /* Copy hsm_progress struct */
        req_hpk = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_PROGRESS);
                goto out;
        }
 
-       mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0);
+       mdc_pack_body(req, NULL, OBD_MD_FLRMTPERM, 0, 0, 0);
 
        /* Copy hsm_progress struct */
        archive_mask = req_capsule_client_get(&req->rq_pill,
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_HSM_ACTION);
        if (rc) {
                ptlrpc_request_free(req);
                return rc;
        }
 
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                     OBD_MD_FLRMTPERM, 0, op_data->op_suppgids[0], 0);
+       mdc_pack_body(req, &op_data->op_fid1, OBD_MD_FLRMTPERM, 0,
+                     op_data->op_suppgids[0], 0);
 
        ptlrpc_request_set_replen(req);
 
                goto out;
        }
 
-       mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0);
+       mdc_pack_body(req, NULL, OBD_MD_FLRMTPERM, 0, 0, 0);
 
        ptlrpc_request_set_replen(req);
 
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_HSM_STATE_GET);
        if (rc != 0) {
                ptlrpc_request_free(req);
                return rc;
        }
 
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                     OBD_MD_FLRMTPERM, 0, op_data->op_suppgids[0], 0);
+       mdc_pack_body(req, &op_data->op_fid1, OBD_MD_FLRMTPERM, 0,
+                     op_data->op_suppgids[0], 0);
 
        ptlrpc_request_set_replen(req);
 
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_HSM_STATE_SET);
        if (rc) {
                ptlrpc_request_free(req);
                return rc;
        }
 
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                     OBD_MD_FLRMTPERM, 0, op_data->op_suppgids[0], 0);
+       mdc_pack_body(req, &op_data->op_fid1, OBD_MD_FLRMTPERM, 0,
+                     op_data->op_suppgids[0], 0);
 
        /* Copy states */
        req_hss = req_capsule_client_get(&req->rq_pill, &RMF_HSM_STATE_SET);
                return rc;
        }
 
-       mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0);
+       mdc_pack_body(req, NULL, OBD_MD_FLRMTPERM, 0, 0, 0);
 
        /* Copy hsm_request struct */
        req_hr = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_REQUEST);
                return -ENOMEM;
        }
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-       mdc_set_capa_size(req, &RMF_CAPA2, op_data->op_capa2);
-
        rc = mdc_prep_elc_req(exp, req, MDS_SWAP_LAYOUTS, &cancels, count);
        if (rc) {
                ptlrpc_request_free(req);
 }
 
 static int mdc_sync(struct obd_export *exp, const struct lu_fid *fid,
-                   struct obd_capa *oc, struct ptlrpc_request **request)
+                   struct ptlrpc_request **request)
 {
        struct ptlrpc_request *req;
        int                 rc;
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, oc);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_SYNC);
        if (rc) {
                ptlrpc_request_free(req);
                return rc;
        }
 
-       mdc_pack_body(req, fid, oc, 0, 0, -1, 0);
+       mdc_pack_body(req, fid, 0, 0, -1, 0);
 
        ptlrpc_request_set_replen(req);
 
 
 /* get remote permission for current user on fid */
 static int mdc_get_remote_perm(struct obd_export *exp, const struct lu_fid *fid,
-                              struct obd_capa *oc, __u32 suppgid,
-                              struct ptlrpc_request **request)
+                              __u32 suppgid, struct ptlrpc_request **request)
 {
        struct ptlrpc_request  *req;
        int                 rc;
        if (req == NULL)
                return -ENOMEM;
 
-       mdc_set_capa_size(req, &RMF_CAPA1, oc);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_GETATTR);
        if (rc) {
                ptlrpc_request_free(req);
                return rc;
        }
 
-       mdc_pack_body(req, fid, oc, OBD_MD_FLRMTPERM, 0, suppgid, 0);
+       mdc_pack_body(req, fid, OBD_MD_FLRMTPERM, 0, suppgid, 0);
 
        req_capsule_set_size(&req->rq_pill, &RMF_ACL, RCL_SERVER,
                             sizeof(struct mdt_remote_perm));
        return rc;
 }
 
-static int mdc_interpret_renew_capa(const struct lu_env *env,
-                                   struct ptlrpc_request *req, void *args,
-                                   int status)
-{
-       struct mdc_renew_capa_args *ra = args;
-       struct mdt_body *body = NULL;
-       struct lustre_capa *capa;
-
-       if (status) {
-               capa = ERR_PTR(status);
-               goto out;
-       }
-
-       body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-       if (body == NULL) {
-               capa = ERR_PTR(-EFAULT);
-               goto out;
-       }
-
-       if ((body->valid & OBD_MD_FLOSSCAPA) == 0) {
-               capa = ERR_PTR(-ENOENT);
-               goto out;
-       }
-
-       capa = req_capsule_server_get(&req->rq_pill, &RMF_CAPA2);
-       if (!capa) {
-               capa = ERR_PTR(-EFAULT);
-               goto out;
-       }
-out:
-       ra->ra_cb(ra->ra_oc, capa);
-       return 0;
-}
-
-static int mdc_renew_capa(struct obd_export *exp, struct obd_capa *oc,
-                         renew_capa_cb_t cb)
-{
-       struct ptlrpc_request *req;
-       struct mdc_renew_capa_args *ra;
-
-       req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp), &RQF_MDS_GETATTR,
-                                       LUSTRE_MDS_VERSION, MDS_GETATTR);
-       if (req == NULL)
-               return -ENOMEM;
-
-       /* NB, OBD_MD_FLOSSCAPA is set here, but it doesn't necessarily mean the
-        * capa to renew is oss capa.
-        */
-       mdc_pack_body(req, &oc->c_capa.lc_fid, oc, OBD_MD_FLOSSCAPA, 0, -1, 0);
-       ptlrpc_request_set_replen(req);
-
-       CLASSERT(sizeof(*ra) <= sizeof(req->rq_async_args));
-       ra = ptlrpc_req_async_args(req);
-       ra->ra_oc = oc;
-       ra->ra_cb = cb;
-       req->rq_interpret_reply = mdc_interpret_renew_capa;
-       ptlrpcd_add_req(req);
-       return 0;
-}
-
 static struct obd_ops mdc_obd_ops = {
        .o_owner            = THIS_MODULE,
        .o_setup            = mdc_setup,
        .m_free_lustre_md   = mdc_free_lustre_md,
        .m_set_open_replay_data = mdc_set_open_replay_data,
        .m_clear_open_replay_data = mdc_clear_open_replay_data,
-       .m_renew_capa       = mdc_renew_capa,
-       .m_unpack_capa      = mdc_unpack_capa,
        .m_get_remote_perm  = mdc_get_remote_perm,
        .m_intent_getattr_async = mdc_intent_getattr_async,
        .m_revalidate_lock      = mdc_revalidate_lock
 
              genops.o uuid.o lprocfs_status.o \
              lustre_handles.o lustre_peer.o \
              statfs_pack.o obdo.o obd_config.o obd_mount.o \
-             lu_object.o capa.o cl_object.o   \
+             lu_object.o cl_object.o   \
              cl_page.o cl_lock.o cl_io.o lu_ref.o acl.o lprocfs_counters.o
 
+++ /dev/null
-/*
- * GPL HEADER START
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 only,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License version 2 for more details (a copy is included
- * in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- *
- * GPL HEADER END
- */
-/*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Use is subject to license terms.
- *
- * Copyright (c) 2012, Intel Corporation.
- */
-/*
- * This file is part of Lustre, http://www.lustre.org/
- * Lustre is a trademark of Sun Microsystems, Inc.
- *
- * lustre/obdclass/capa.c
- *
- * Lustre Capability Hash Management
- *
- * Author: Lai Siyao<lsy@clusterfs.com>
- */
-
-#define DEBUG_SUBSYSTEM S_SEC
-
-#include <linux/fs.h>
-#include <asm/unistd.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-#include <linux/crypto.h>
-
-#include "../include/obd_class.h"
-#include "../include/lustre_debug.h"
-#include "../include/lustre/lustre_idl.h"
-
-#include <linux/list.h>
-#include "../include/lustre_capa.h"
-
-#define NR_CAPAHASH 32
-#define CAPA_HASH_SIZE 3000          /* for MDS & OSS */
-
-struct kmem_cache *capa_cachep;
-
-/* lock for capa hash/capa_list/fo_capa_keys */
-DEFINE_SPINLOCK(capa_lock);
-
-struct list_head capa_list[CAPA_SITE_MAX];
-
-static struct capa_hmac_alg capa_hmac_algs[] = {
-       DEF_CAPA_HMAC_ALG("sha1", SHA1, 20, 20),
-};
-/* capa count */
-int capa_count[CAPA_SITE_MAX] = { 0, };
-
-EXPORT_SYMBOL(capa_cachep);
-EXPORT_SYMBOL(capa_list);
-EXPORT_SYMBOL(capa_lock);
-EXPORT_SYMBOL(capa_count);
-
-static inline
-unsigned int ll_crypto_tfm_alg_min_keysize(struct crypto_blkcipher *tfm)
-{
-       return crypto_blkcipher_tfm(tfm)->__crt_alg->cra_blkcipher.min_keysize;
-}
-
-struct hlist_head *init_capa_hash(void)
-{
-       struct hlist_head *hash;
-       int nr_hash, i;
-
-       hash = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS);
-       if (!hash)
-               return NULL;
-
-       nr_hash = PAGE_CACHE_SIZE / sizeof(struct hlist_head);
-       LASSERT(nr_hash > NR_CAPAHASH);
-
-       for (i = 0; i < NR_CAPAHASH; i++)
-               INIT_HLIST_HEAD(hash + i);
-       return hash;
-}
-EXPORT_SYMBOL(init_capa_hash);
-
-static inline int capa_on_server(struct obd_capa *ocapa)
-{
-       return ocapa->c_site == CAPA_SITE_SERVER;
-}
-
-static inline void capa_delete(struct obd_capa *ocapa)
-{
-       LASSERT(capa_on_server(ocapa));
-       hlist_del_init(&ocapa->u.tgt.c_hash);
-       list_del_init(&ocapa->c_list);
-       capa_count[ocapa->c_site]--;
-       /* release the ref when alloc */
-       capa_put(ocapa);
-}
-
-void cleanup_capa_hash(struct hlist_head *hash)
-{
-       int i;
-       struct hlist_node *next;
-       struct obd_capa *oc;
-
-       spin_lock(&capa_lock);
-       for (i = 0; i < NR_CAPAHASH; i++) {
-               hlist_for_each_entry_safe(oc, next, hash + i,
-                                             u.tgt.c_hash)
-                       capa_delete(oc);
-       }
-       spin_unlock(&capa_lock);
-
-       kfree(hash);
-}
-EXPORT_SYMBOL(cleanup_capa_hash);
-
-static inline int capa_hashfn(struct lu_fid *fid)
-{
-       return (fid_oid(fid) ^ fid_ver(fid)) *
-              (unsigned long)(fid_seq(fid) + 1) % NR_CAPAHASH;
-}
-
-/* capa renewal time check is earlier than that on client, which is to prevent
- * client renew right after obtaining it. */
-static inline int capa_is_to_expire(struct obd_capa *oc)
-{
-       return time_before(cfs_time_sub(oc->c_expiry,
-                                       cfs_time_seconds(oc->c_capa.lc_timeout)*2/3),
-                          cfs_time_current());
-}
-
-static struct obd_capa *find_capa(struct lustre_capa *capa,
-                                 struct hlist_head *head, int alive)
-{
-       struct obd_capa *ocapa;
-       int len = alive ? offsetof(struct lustre_capa, lc_keyid):sizeof(*capa);
-
-       hlist_for_each_entry(ocapa, head, u.tgt.c_hash) {
-               if (memcmp(&ocapa->c_capa, capa, len))
-                       continue;
-               /* don't return one that will expire soon in this case */
-               if (alive && capa_is_to_expire(ocapa))
-                       continue;
-
-               LASSERT(capa_on_server(ocapa));
-
-               DEBUG_CAPA(D_SEC, &ocapa->c_capa, "found");
-               return ocapa;
-       }
-
-       return NULL;
-}
-
-#define LRU_CAPA_DELETE_COUNT 12
-static inline void capa_delete_lru(struct list_head *head)
-{
-       struct obd_capa *ocapa;
-       struct list_head *node = head->next;
-       int count = 0;
-
-       /* free LRU_CAPA_DELETE_COUNT unused capa from head */
-       while (count++ < LRU_CAPA_DELETE_COUNT) {
-               ocapa = list_entry(node, struct obd_capa, c_list);
-               node = node->next;
-               if (atomic_read(&ocapa->c_refc))
-                       continue;
-
-               DEBUG_CAPA(D_SEC, &ocapa->c_capa, "free lru");
-               capa_delete(ocapa);
-       }
-}
-
-/* add or update */
-struct obd_capa *capa_add(struct hlist_head *hash, struct lustre_capa *capa)
-{
-       struct hlist_head *head = hash + capa_hashfn(&capa->lc_fid);
-       struct obd_capa *ocapa, *old = NULL;
-       struct list_head *list = &capa_list[CAPA_SITE_SERVER];
-
-       ocapa = alloc_capa(CAPA_SITE_SERVER);
-       if (IS_ERR(ocapa))
-               return NULL;
-
-       spin_lock(&capa_lock);
-       old = find_capa(capa, head, 0);
-       if (!old) {
-               ocapa->c_capa = *capa;
-               set_capa_expiry(ocapa);
-               hlist_add_head(&ocapa->u.tgt.c_hash, head);
-               list_add_tail(&ocapa->c_list, list);
-               capa_get(ocapa);
-               capa_count[CAPA_SITE_SERVER]++;
-               if (capa_count[CAPA_SITE_SERVER] > CAPA_HASH_SIZE)
-                       capa_delete_lru(list);
-               spin_unlock(&capa_lock);
-               return ocapa;
-       }
-       capa_get(old);
-       spin_unlock(&capa_lock);
-       capa_put(ocapa);
-       return old;
-}
-EXPORT_SYMBOL(capa_add);
-
-struct obd_capa *capa_lookup(struct hlist_head *hash, struct lustre_capa *capa,
-                            int alive)
-{
-       struct obd_capa *ocapa;
-
-       spin_lock(&capa_lock);
-       ocapa = find_capa(capa, hash + capa_hashfn(&capa->lc_fid), alive);
-       if (ocapa) {
-               list_move_tail(&ocapa->c_list,
-                                  &capa_list[CAPA_SITE_SERVER]);
-               capa_get(ocapa);
-       }
-       spin_unlock(&capa_lock);
-
-       return ocapa;
-}
-EXPORT_SYMBOL(capa_lookup);
-
-static inline int ll_crypto_hmac(struct crypto_hash *tfm,
-                                u8 *key, unsigned int *keylen,
-                                struct scatterlist *sg,
-                                unsigned int size, u8 *result)
-{
-       struct hash_desc desc;
-       int           rv;
-       desc.tfm   = tfm;
-       desc.flags = 0;
-       rv = crypto_hash_setkey(desc.tfm, key, *keylen);
-       if (rv) {
-               CERROR("failed to hash setkey: %d\n", rv);
-               return rv;
-       }
-       return crypto_hash_digest(&desc, sg, size, result);
-}
-
-int capa_hmac(__u8 *hmac, struct lustre_capa *capa, __u8 *key)
-{
-       struct crypto_hash *tfm;
-       struct capa_hmac_alg  *alg;
-       int keylen;
-       struct scatterlist sl;
-
-       if (capa_alg(capa) != CAPA_HMAC_ALG_SHA1) {
-               CERROR("unknown capability hmac algorithm!\n");
-               return -EFAULT;
-       }
-
-       alg = &capa_hmac_algs[capa_alg(capa)];
-
-       tfm = crypto_alloc_hash(alg->ha_name, 0, 0);
-       if (IS_ERR(tfm)) {
-               CERROR("crypto_alloc_tfm failed, check whether your kernel has crypto support!\n");
-               return PTR_ERR(tfm);
-       }
-       keylen = alg->ha_keylen;
-
-       sg_init_table(&sl, 1);
-       sg_set_page(&sl, virt_to_page(capa),
-                   offsetof(struct lustre_capa, lc_hmac),
-                   (unsigned long)(capa) % PAGE_CACHE_SIZE);
-
-       ll_crypto_hmac(tfm, key, &keylen, &sl, sl.length, hmac);
-       crypto_free_hash(tfm);
-
-       return 0;
-}
-EXPORT_SYMBOL(capa_hmac);
-
-int capa_encrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen)
-{
-       struct crypto_blkcipher *tfm;
-       struct scatterlist sd;
-       struct scatterlist ss;
-       struct blkcipher_desc desc;
-       unsigned int min;
-       int rc;
-       char alg[CRYPTO_MAX_ALG_NAME+1] = "aes";
-
-       /* passing "aes" in a variable instead of a constant string keeps gcc
-        * 4.3.2 happy */
-       tfm = crypto_alloc_blkcipher(alg, 0, 0);
-       if (IS_ERR(tfm)) {
-               CERROR("failed to load transform for aes\n");
-               return PTR_ERR(tfm);
-       }
-
-       min = ll_crypto_tfm_alg_min_keysize(tfm);
-       if (keylen < min) {
-               CERROR("keylen at least %d bits for aes\n", min * 8);
-               rc = -EINVAL;
-               goto out;
-       }
-
-       rc = crypto_blkcipher_setkey(tfm, key, min);
-       if (rc) {
-               CERROR("failed to setting key for aes\n");
-               goto out;
-       }
-
-       sg_init_table(&sd, 1);
-       sg_set_page(&sd, virt_to_page(d), 16,
-                   (unsigned long)(d) % PAGE_CACHE_SIZE);
-
-       sg_init_table(&ss, 1);
-       sg_set_page(&ss, virt_to_page(s), 16,
-                   (unsigned long)(s) % PAGE_CACHE_SIZE);
-       desc.tfm   = tfm;
-       desc.info  = NULL;
-       desc.flags = 0;
-       rc = crypto_blkcipher_encrypt(&desc, &sd, &ss, 16);
-       if (rc) {
-               CERROR("failed to encrypt for aes\n");
-               goto out;
-       }
-
-out:
-       crypto_free_blkcipher(tfm);
-       return rc;
-}
-EXPORT_SYMBOL(capa_encrypt_id);
-
-int capa_decrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen)
-{
-       struct crypto_blkcipher *tfm;
-       struct scatterlist sd;
-       struct scatterlist ss;
-       struct blkcipher_desc desc;
-       unsigned int min;
-       int rc;
-       char alg[CRYPTO_MAX_ALG_NAME+1] = "aes";
-
-       /* passing "aes" in a variable instead of a constant string keeps gcc
-        * 4.3.2 happy */
-       tfm = crypto_alloc_blkcipher(alg, 0, 0);
-       if (IS_ERR(tfm)) {
-               CERROR("failed to load transform for aes\n");
-               return PTR_ERR(tfm);
-       }
-
-       min = ll_crypto_tfm_alg_min_keysize(tfm);
-       if (keylen < min) {
-               CERROR("keylen at least %d bits for aes\n", min * 8);
-               rc = -EINVAL;
-               goto out;
-       }
-
-       rc = crypto_blkcipher_setkey(tfm, key, min);
-       if (rc) {
-               CERROR("failed to setting key for aes\n");
-               goto out;
-       }
-
-       sg_init_table(&sd, 1);
-       sg_set_page(&sd, virt_to_page(d), 16,
-                   (unsigned long)(d) % PAGE_CACHE_SIZE);
-
-       sg_init_table(&ss, 1);
-       sg_set_page(&ss, virt_to_page(s), 16,
-                   (unsigned long)(s) % PAGE_CACHE_SIZE);
-
-       desc.tfm   = tfm;
-       desc.info  = NULL;
-       desc.flags = 0;
-       rc = crypto_blkcipher_decrypt(&desc, &sd, &ss, 16);
-       if (rc) {
-               CERROR("failed to decrypt for aes\n");
-               goto out;
-       }
-
-out:
-       crypto_free_blkcipher(tfm);
-       return rc;
-}
-EXPORT_SYMBOL(capa_decrypt_id);
-
-void capa_cpy(void *capa, struct obd_capa *ocapa)
-{
-       spin_lock(&ocapa->c_lock);
-       *(struct lustre_capa *)capa = ocapa->c_capa;
-       spin_unlock(&ocapa->c_lock);
-}
-EXPORT_SYMBOL(capa_cpy);
-
-void _debug_capa(struct lustre_capa *c,
-                struct libcfs_debug_msg_data *msgdata,
-                const char *fmt, ...)
-{
-       va_list args;
-       va_start(args, fmt);
-       libcfs_debug_vmsg2(msgdata, fmt, args,
-                          " capability@%p fid " DFID " opc %#llx uid %llu gid %llu flags %u alg %d keyid %u timeout %u expiry %u\n",
-                          c, PFID(capa_fid(c)), capa_opc(c),
-                          capa_uid(c), capa_gid(c), capa_flags(c),
-                          capa_alg(c), capa_keyid(c), capa_timeout(c),
-                          capa_expiry(c));
-       va_end(args);
-}
-EXPORT_SYMBOL(_debug_capa);
 
        int i, err;
        int lustre_register_fs(void);
 
-       for (i = CAPA_SITE_CLIENT; i < CAPA_SITE_MAX; i++)
-               INIT_LIST_HEAD(&capa_list[i]);
-
        LCONSOLE_INFO("Lustre: Build Version: "BUILD_VERSION"\n");
 
        spin_lock_init(&obd_types_lock);
 
        obdo_cachep = NULL;
        kmem_cache_destroy(import_cachep);
        import_cachep = NULL;
-       kmem_cache_destroy(capa_cachep);
-       capa_cachep = NULL;
 }
 
 int obd_init_caches(void)
        if (!import_cachep)
                goto out;
 
-       LASSERT(!capa_cachep);
-       capa_cachep = kmem_cache_create("capa_cache",
-                                          sizeof(struct obd_capa), 0, 0, NULL);
-       if (!capa_cachep)
-               goto out;
-
        return 0;
  out:
        obd_cleanup_caches();
 
 
  failed:
        if (created && rc)
-               obd_destroy(env, ec->ec_exp, oa, lsm, oti, NULL, NULL);
+               obd_destroy(env, ec->ec_exp, oa, lsm, oti, NULL);
        if (lsm)
                echo_free_memmd(ed, &lsm);
        if (rc)
 
                lpages = npages;
                ret = obd_preprw(env, rw, exp, oa, 1, &ioo, rnb, &lpages,
-                                lnb, oti, NULL);
+                                lnb, oti);
                if (ret != 0)
                        goto out;
                LASSERT(lpages == npages);
                rc = echo_get_object(&eco, ed, oa);
                if (rc == 0) {
                        rc = obd_destroy(env, ec->ec_exp, oa, eco->eo_lsm,
-                                        &dummy_oti, NULL, NULL);
+                                        &dummy_oti, NULL);
                        if (rc == 0)
                                eco->eo_deleted = 1;
                        echo_put_object(eco);
 
                }
 
                oinfo.oi_oa = oa;
-               oinfo.oi_capa = io->u.ci_setattr.sa_capa;
                init_completion(&cbargs->opc_sync);
 
                if (ia_valid & ATTR_SIZE)
 
        memset(oinfo, 0, sizeof(*oinfo));
        oinfo->oi_oa = oa;
-       oinfo->oi_capa = fio->fi_capa;
        init_completion(&cbargs->opc_sync);
 
        rc = osc_sync_base(osc_export(obj), oinfo, osc_async_upcall, cbargs,
 
        struct client_obd *aa_cli;
        struct list_head         aa_oaps;
        struct list_head         aa_exts;
-       struct obd_capa   *aa_ocapa;
        struct cl_req     *aa_clerq;
 };
 
        return lsm_size;
 }
 
-static inline void osc_pack_capa(struct ptlrpc_request *req,
-                                struct ost_body *body, void *capa)
-{
-       struct obd_capa *oc = (struct obd_capa *)capa;
-       struct lustre_capa *c;
-
-       if (!capa)
-               return;
-
-       c = req_capsule_client_get(&req->rq_pill, &RMF_CAPA1);
-       LASSERT(c);
-       capa_cpy(c, oc);
-       body->oa.o_valid |= OBD_MD_FLOSSCAPA;
-       DEBUG_CAPA(D_SEC, c, "pack");
-}
-
 static inline void osc_pack_req_body(struct ptlrpc_request *req,
                                     struct obd_info *oinfo)
 {
 
        lustre_set_wire_obdo(&req->rq_import->imp_connect_data, &body->oa,
                             oinfo->oi_oa);
-       osc_pack_capa(req, body, oinfo->oi_capa);
-}
-
-static inline void osc_set_capa_size(struct ptlrpc_request *req,
-                                    const struct req_msg_field *field,
-                                    struct obd_capa *oc)
-{
-       if (oc == NULL)
-               req_capsule_set_size(&req->rq_pill, field, RCL_CLIENT, 0);
-       else
-               /* it is already calculated as sizeof struct obd_capa */
-               ;
 }
 
 static int osc_getattr_interpret(const struct lu_env *env,
        if (req == NULL)
                return -ENOMEM;
 
-       osc_set_capa_size(req, &RMF_CAPA1, oinfo->oi_capa);
        rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_GETATTR);
        if (rc) {
                ptlrpc_request_free(req);
        if (req == NULL)
                return -ENOMEM;
 
-       osc_set_capa_size(req, &RMF_CAPA1, oinfo->oi_capa);
        rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_GETATTR);
        if (rc) {
                ptlrpc_request_free(req);
        if (req == NULL)
                return -ENOMEM;
 
-       osc_set_capa_size(req, &RMF_CAPA1, oinfo->oi_capa);
        rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_SETATTR);
        if (rc) {
                ptlrpc_request_free(req);
        if (req == NULL)
                return -ENOMEM;
 
-       osc_set_capa_size(req, &RMF_CAPA1, oinfo->oi_capa);
        rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_SETATTR);
        if (rc) {
                ptlrpc_request_free(req);
        if (req == NULL)
                return -ENOMEM;
 
-       osc_set_capa_size(req, &RMF_CAPA1, oinfo->oi_capa);
        rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_PUNCH);
        if (rc) {
                ptlrpc_request_free(req);
        LASSERT(body);
        lustre_set_wire_obdo(&req->rq_import->imp_connect_data, &body->oa,
                             oinfo->oi_oa);
-       osc_pack_capa(req, body, oinfo->oi_capa);
 
        ptlrpc_request_set_replen(req);
 
        if (req == NULL)
                return -ENOMEM;
 
-       osc_set_capa_size(req, &RMF_CAPA1, oinfo->oi_capa);
        rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_SYNC);
        if (rc) {
                ptlrpc_request_free(req);
        LASSERT(body);
        lustre_set_wire_obdo(&req->rq_import->imp_connect_data, &body->oa,
                             oinfo->oi_oa);
-       osc_pack_capa(req, body, oinfo->oi_capa);
 
        ptlrpc_request_set_replen(req);
        req->rq_interpret_reply = osc_sync_interpret;
  * cookies to the MDS after committing destroy transactions. */
 static int osc_destroy(const struct lu_env *env, struct obd_export *exp,
                       struct obdo *oa, struct lov_stripe_md *ea,
-                      struct obd_trans_info *oti, struct obd_export *md_export,
-                      void *capa)
+                      struct obd_trans_info *oti, struct obd_export *md_export)
 {
        struct client_obd *cli = &exp->exp_obd->u.cli;
        struct ptlrpc_request *req;
                return -ENOMEM;
        }
 
-       osc_set_capa_size(req, &RMF_CAPA1, (struct obd_capa *)capa);
        rc = ldlm_prep_elc_req(exp, req, LUSTRE_OST_VERSION, OST_DESTROY,
                               0, &cancels, count);
        if (rc) {
        LASSERT(body);
        lustre_set_wire_obdo(&req->rq_import->imp_connect_data, &body->oa, oa);
 
-       osc_pack_capa(req, body, (struct obd_capa *)capa);
        ptlrpc_request_set_replen(req);
 
        /* If osc_destroy is for destroying the unlink orphan,
                                struct lov_stripe_md *lsm, u32 page_count,
                                struct brw_page **pga,
                                struct ptlrpc_request **reqp,
-                               struct obd_capa *ocapa, int reserve,
+                               int reserve,
                                int resend)
 {
        struct ptlrpc_request *req;
                             sizeof(*ioobj));
        req_capsule_set_size(pill, &RMF_NIOBUF_REMOTE, RCL_CLIENT,
                             niocount * sizeof(*niobuf));
-       osc_set_capa_size(req, &RMF_CAPA1, ocapa);
 
        rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, opc);
        if (rc) {
         * "max - 1" for old client compatibility sending "0", and also so the
         * the actual maximum is a power-of-two number, not one less. LU-1431 */
        ioobj_max_brw_set(ioobj, desc->bd_md_max_brw);
-       osc_pack_capa(req, body, ocapa);
        LASSERT(page_count > 0);
        pg_prev = pga[0];
        for (requested_nob = i = 0; i < page_count; i++, niobuf++) {
        aa->aa_ppga = pga;
        aa->aa_cli = cli;
        INIT_LIST_HEAD(&aa->aa_oaps);
-       if (ocapa && reserve)
-               aa->aa_ocapa = capa_get(ocapa);
 
        *reqp = req;
        return 0;
                                  aa->aa_cli, aa->aa_oa,
                                  NULL /* lsm unused by osc currently */,
                                  aa->aa_page_count, aa->aa_ppga,
-                                 &new_req, aa->aa_ocapa, 0, 1);
+                                 &new_req, 0, 1);
        if (rc)
                return rc;
 
                }
        }
 
-       new_aa->aa_ocapa = aa->aa_ocapa;
-       aa->aa_ocapa = NULL;
-
        /* XXX: This code will run into problem if we're going to support
         * to add a series of BRW RPCs into a self-defined ptlrpc_request_set
         * and wait for all of them to be finished. We should inherit request
                        rc = -EIO;
        }
 
-       if (aa->aa_ocapa) {
-               capa_put(aa->aa_ocapa);
-               aa->aa_ocapa = NULL;
-       }
-
        list_for_each_entry_safe(ext, tmp, &aa->aa_exts, oe_link) {
                if (obj == NULL && rc == 0) {
                        obj = osc2cl(ext->oe_obj);
 
        sort_brw_pages(pga, page_count);
        rc = osc_brw_prep_request(cmd, cli, oa, NULL, page_count,
-                       pga, &req, crattr->cra_capa, 1, 0);
+                       pga, &req, 1, 0);
        if (rc != 0) {
                CERROR("prep_req failed: %d\n", rc);
                goto out;
                cfs_memory_pressure_restore(mpflag);
 
        if (crattr != NULL) {
-               capa_put(crattr->cra_capa);
                kfree(crattr);
        }