* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#define __LUSTRE_LU_OBJECT_H
#include <stdarg.h>
-
-/*
- * struct lu_fid
- */
#include <libcfs/libcfs.h>
-
#include <lustre/lustre_idl.h>
-
#include <lu_ref.h>
struct seq_file;
void (*ldto_stop)(struct lu_device_type *t);
};
-/**
- * Flags for the object layers.
- */
-enum lu_object_flags {
- /**
- * this flags is set if lu_object_operations::loo_object_init() has
- * been called for this layer. Used by lu_object_alloc().
- */
- LU_OBJECT_ALLOCATED = (1 << 0)
-};
+static inline int lu_device_is_md(const struct lu_device *d)
+{
+ return ergo(d != NULL, d->ld_type->ldt_tags & LU_DEVICE_MD);
+}
/**
* Common object attributes.
* Linkage into list of all layers.
*/
cfs_list_t lo_linkage;
- /**
- * Depth. Top level layer depth is 0.
- */
- int lo_depth;
/**
- * Flags from enum lu_object_flags.
+ * Link to the device, for debugging.
*/
- __u32 lo_flags;
- /**
- * Link to the device, for debugging.
- */
- struct lu_ref_link *lo_dev_ref;
+ struct lu_ref_link lo_dev_ref;
};
enum lu_object_header_flags {
/**
* Mark this object has already been taken out of cache.
*/
- LU_OBJECT_UNHASHED = 1
+ LU_OBJECT_UNHASHED = 1,
};
enum lu_object_header_attr {
return cfs_hash_bd_extra_get(site->ls_obj_hash, &bd);
}
+static inline struct seq_server_site *lu_site2seq(const struct lu_site *s)
+{
+ return s->ld_seq_site;
+}
+
/** \name ctors
* Constructors/destructors.
* @{
struct lu_device *dev,
const struct lu_fid *f,
const struct lu_object_conf *conf);
+void lu_object_purge(const struct lu_env *env, struct lu_device *dev,
+ const struct lu_fid *f);
struct lu_object *lu_object_find_slice(const struct lu_env *env,
struct lu_device *dev,
const struct lu_fid *f,
return o->lo_header->loh_attr;
}
-static inline struct lu_ref_link *lu_object_ref_add(struct lu_object *o,
- const char *scope,
- const void *source)
+static inline void lu_object_ref_add(struct lu_object *o,
+ const char *scope,
+ const void *source)
+{
+ lu_ref_add(&o->lo_header->loh_reference, scope, source);
+}
+
+static inline void lu_object_ref_add_at(struct lu_object *o,
+ struct lu_ref_link *link,
+ const char *scope,
+ const void *source)
{
- return lu_ref_add(&o->lo_header->loh_reference, scope, source);
+ lu_ref_add_at(&o->lo_header->loh_reference, link, scope, source);
}
static inline void lu_object_ref_del(struct lu_object *o,
{ \
type *value; \
\
- CLASSERT(CFS_PAGE_SIZE >= sizeof (*value)); \
+ CLASSERT(PAGE_CACHE_SIZE >= sizeof (*value)); \
\
OBD_ALLOC_PTR(value); \
if (value == NULL) \
/** @} lu_context */
-struct lu_ucred {
- __u32 uc_valid;
- __u32 uc_o_uid;
- __u32 uc_o_gid;
- __u32 uc_o_fsuid;
- __u32 uc_o_fsgid;
- __u32 uc_uid;
- __u32 uc_gid;
- __u32 uc_fsuid;
- __u32 uc_fsgid;
- __u32 uc_suppgids[2];
- cfs_cap_t uc_cap;
- __u32 uc_umask;
- cfs_group_info_t *uc_ginfo;
- struct md_identity *uc_identity;
-};
-struct lu_ucred *lu_ucred(const struct lu_env *env);
-struct lu_ucred *lu_ucred_check(const struct lu_env *env);
-struct lu_ucred *lu_ucred_assert(const struct lu_env *env);
-
/**
* Output site statistical counters into a buffer. Suitable for
* ll_rd_*()-style functions.
ssize_t lb_len;
};
-/** null buffer */
-extern struct lu_buf LU_BUF_NULL;
-
#define DLUBUF "(%p %zu)"
#define PLUBUF(buf) (buf)->lb_buf, (buf)->lb_len
/**
void lu_global_fini(void);
struct lu_kmem_descr {
- cfs_mem_cache_t **ckd_cache;
+ struct kmem_cache **ckd_cache;
const char *ckd_name;
const size_t ckd_size;
};
struct lu_device *dev,
const struct lu_object_conf *conf);
+/** null buffer */
+extern struct lu_buf LU_BUF_NULL;
+
void lu_buf_free(struct lu_buf *buf);
void lu_buf_alloc(struct lu_buf *buf, int size);
void lu_buf_realloc(struct lu_buf *buf, int size);
+int lu_buf_check_and_grow(struct lu_buf *buf, int len);
+struct lu_buf *lu_buf_check_and_alloc(struct lu_buf *buf, int len);
+
/** @} lu */
#endif /* __LUSTRE_LU_OBJECT_H */