#include "xfs.h"
#include "xfs_fs.h"
#include "xfs_format.h"
#include "xfs_trans_resv.h"
#include "xfs_shared.h"
#include "xfs_mount.h"
#include "xfs_defer.h"
#include "xfs_log_format.h"
#include "xfs_trans.h"
#include "xfs_bmap_btree.h"
#include "xfs_trans_priv.h"
#include "xfs_log.h"
#include "xfs_inode.h"
#include "xfs_da_format.h"
#include "xfs_da_btree.h"
#include "xfs_attr.h"
#include "xfs_attr_item.h"
#include "xfs_trace.h"
#include "xfs_trans_space.h"
#include "xfs_errortag.h"
#include "xfs_error.h"
#include "xfs_log_priv.h"
#include "xfs_log_recover.h"
#include "xfs_parent.h"
struct kmem_cache *xfs_attri_cache;
struct kmem_cache *xfs_attrd_cache;
static const struct xfs_item_ops xfs_attri_item_ops;
static const struct xfs_item_ops xfs_attrd_item_ops;
static inline struct xfs_attri_log_item *ATTRI_ITEM(struct xfs_log_item *lip)
{ … }
static inline struct xfs_attri_log_nameval *
xfs_attri_log_nameval_get(
struct xfs_attri_log_nameval *nv)
{ … }
static inline void
xfs_attri_log_nameval_put(
struct xfs_attri_log_nameval *nv)
{ … }
static inline struct xfs_attri_log_nameval *
xfs_attri_log_nameval_alloc(
const void *name,
unsigned int name_len,
const void *new_name,
unsigned int new_name_len,
const void *value,
unsigned int value_len,
const void *new_value,
unsigned int new_value_len)
{ … }
STATIC void
xfs_attri_item_free(
struct xfs_attri_log_item *attrip)
{ … }
STATIC void
xfs_attri_release(
struct xfs_attri_log_item *attrip)
{ … }
STATIC void
xfs_attri_item_size(
struct xfs_log_item *lip,
int *nvecs,
int *nbytes)
{ … }
STATIC void
xfs_attri_item_format(
struct xfs_log_item *lip,
struct xfs_log_vec *lv)
{ … }
STATIC void
xfs_attri_item_unpin(
struct xfs_log_item *lip,
int remove)
{ … }
STATIC void
xfs_attri_item_release(
struct xfs_log_item *lip)
{ … }
STATIC struct xfs_attri_log_item *
xfs_attri_init(
struct xfs_mount *mp,
struct xfs_attri_log_nameval *nv)
{ … }
static inline struct xfs_attrd_log_item *ATTRD_ITEM(struct xfs_log_item *lip)
{ … }
STATIC void
xfs_attrd_item_free(struct xfs_attrd_log_item *attrdp)
{ … }
STATIC void
xfs_attrd_item_size(
struct xfs_log_item *lip,
int *nvecs,
int *nbytes)
{ … }
STATIC void
xfs_attrd_item_format(
struct xfs_log_item *lip,
struct xfs_log_vec *lv)
{ … }
STATIC void
xfs_attrd_item_release(
struct xfs_log_item *lip)
{ … }
static struct xfs_log_item *
xfs_attrd_item_intent(
struct xfs_log_item *lip)
{ … }
static inline unsigned int
xfs_attr_log_item_op(const struct xfs_attri_log_format *attrp)
{ … }
STATIC void
xfs_attr_log_item(
struct xfs_trans *tp,
struct xfs_attri_log_item *attrip,
const struct xfs_attr_intent *attr)
{ … }
static struct xfs_log_item *
xfs_attr_create_intent(
struct xfs_trans *tp,
struct list_head *items,
unsigned int count,
bool sort)
{ … }
static inline void
xfs_attr_free_item(
struct xfs_attr_intent *attr)
{ … }
static inline struct xfs_attr_intent *attri_entry(const struct list_head *e)
{ … }
STATIC int
xfs_attr_finish_item(
struct xfs_trans *tp,
struct xfs_log_item *done,
struct list_head *item,
struct xfs_btree_cur **state)
{ … }
STATIC void
xfs_attr_abort_intent(
struct xfs_log_item *intent)
{ … }
STATIC void
xfs_attr_cancel_item(
struct list_head *item)
{ … }
STATIC bool
xfs_attri_item_match(
struct xfs_log_item *lip,
uint64_t intent_id)
{ … }
static inline bool
xfs_attri_validate_namelen(unsigned int namelen)
{ … }
static inline bool
xfs_attri_validate(
struct xfs_mount *mp,
struct xfs_attri_log_format *attrp)
{ … }
static int
xfs_attri_iread_extents(
struct xfs_inode *ip)
{ … }
static inline struct xfs_attr_intent *
xfs_attri_recover_work(
struct xfs_mount *mp,
struct xfs_defer_pending *dfp,
struct xfs_attri_log_format *attrp,
struct xfs_inode **ipp,
struct xfs_attri_log_nameval *nv)
{ … }
STATIC int
xfs_attr_recover_work(
struct xfs_defer_pending *dfp,
struct list_head *capture_list)
{ … }
static struct xfs_log_item *
xfs_attr_relog_intent(
struct xfs_trans *tp,
struct xfs_log_item *intent,
struct xfs_log_item *done_item)
{ … }
static struct xfs_log_item *
xfs_attr_create_done(
struct xfs_trans *tp,
struct xfs_log_item *intent,
unsigned int count)
{ … }
void
xfs_attr_defer_add(
struct xfs_da_args *args,
enum xfs_attr_defer_op op)
{ … }
const struct xfs_defer_op_type xfs_attr_defer_type = …;
static inline void *
xfs_attri_validate_name_iovec(
struct xfs_mount *mp,
struct xfs_attri_log_format *attri_formatp,
const struct xfs_log_iovec *iovec,
unsigned int name_len)
{ … }
static inline void *
xfs_attri_validate_value_iovec(
struct xfs_mount *mp,
struct xfs_attri_log_format *attri_formatp,
const struct xfs_log_iovec *iovec,
unsigned int value_len)
{ … }
STATIC int
xlog_recover_attri_commit_pass2(
struct xlog *log,
struct list_head *buffer_list,
struct xlog_recover_item *item,
xfs_lsn_t lsn)
{ … }
STATIC int
xlog_recover_attrd_commit_pass2(
struct xlog *log,
struct list_head *buffer_list,
struct xlog_recover_item *item,
xfs_lsn_t lsn)
{ … }
static const struct xfs_item_ops xfs_attri_item_ops = …;
const struct xlog_recover_item_ops xlog_attri_item_ops = …;
static const struct xfs_item_ops xfs_attrd_item_ops = …;
const struct xlog_recover_item_ops xlog_attrd_item_ops = …;