X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosd-ldiskfs%2Fosd_internal.h;h=af14812599d7c8bee25cdf214e0fe2c7136f44c7;hb=020941416419ab282f3d9b694014b2059d299d51;hp=31529f8c77c5b26e6d49165cb5c4ee72c9aeb51c;hpb=cd4b609713b678cc464efa5ce2cabb01b41c9a30;p=fs%2Flustre-release.git diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h index 31529f8c77..af14812 100644 --- a/lustre/osd-ldiskfs/osd_internal.h +++ b/lustre/osd-ldiskfs/osd_internal.h @@ -27,7 +27,7 @@ * 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/ @@ -43,21 +43,19 @@ #ifndef _OSD_INTERNAL_H #define _OSD_INTERNAL_H -#if defined(__KERNEL__) +/* struct mutex */ +#include /* struct rw_semaphore */ #include /* struct dentry */ #include /* struct dirent64 */ #include - +#include #include #include -/* fsfilt_{get|put}_ops */ -#include - /* LUSTRE_OSD_NAME */ #include /* class_register_type(), class_unregister_type(), class_get_type() */ @@ -81,9 +79,6 @@ struct inode; /* OI scrub should skip this inode. */ #define LDISKFS_STATE_LUSTRE_NOSCRUB 31 -/* Do not add OI mapping for this inode. */ -#define LDISKFS_STATE_LUSTRE_NO_OI 30 - /** Enable thandle usage statistics */ #define OSD_THANDLE_STATS (0) @@ -150,39 +145,37 @@ struct osd_obj_seq { struct dentry *oos_root; /* O/ */ struct dentry **oos_dirs; /* O//d0-dXX */ obd_seq oos_seq; /* seq number */ - cfs_list_t oos_seq_list; /* list to seq_list */ + struct list_head oos_seq_list; /* list to seq_list */ }; struct osd_obj_map { struct dentry *om_root; /* dentry for /O */ rwlock_t om_seq_list_lock; /* lock for seq_list */ - cfs_list_t om_seq_list; /* list head for seq */ + struct list_head om_seq_list; /* list head for seq */ int om_subdir_count; - struct semaphore om_dir_init_sem; + struct mutex om_dir_init_mutex; }; struct osd_mdobj { struct dentry *om_root; /* AGENT/ */ - obd_seq om_index; /* mdt index */ - cfs_list_t om_list; /* list to omm_list */ + obd_seq om_index; /* mdt index */ + struct list_head om_list; /* list to omm_list */ }; struct osd_mdobj_map { - struct dentry *omm_agent_dentry; + struct dentry *omm_remote_parent; }; -#define osd_ldiskfs_find_entry(dir, dentry, de, lock) \ - ll_ldiskfs_find_entry(dir, dentry, de, lock) #define osd_ldiskfs_add_entry(handle, child, cinode, hlock) \ ldiskfs_add_entry(handle, child, cinode, hlock) -#define OSD_OTABLE_IT_CACHE_SIZE 128 +#define OSD_OTABLE_IT_CACHE_SIZE 64 #define OSD_OTABLE_IT_CACHE_MASK (~(OSD_OTABLE_IT_CACHE_SIZE - 1)) struct osd_inconsistent_item { /* link into osd_scrub::os_inconsistent_items, * protected by osd_scrub::os_lock. */ - cfs_list_t oii_list; + struct list_head oii_list; /* The right FID <=> ino#/gen mapping. */ struct osd_idmap_cache oii_cache; @@ -208,7 +201,6 @@ struct osd_otable_cache { struct osd_otable_it { struct osd_device *ooi_dev; - pid_t ooi_pid; struct osd_otable_cache ooi_cache; /* The following bits can be updated/checked w/o lock protection. @@ -220,13 +212,9 @@ struct osd_otable_it { * filled into cache. */ ooi_user_ready:1, /* The user out of OSD is * ready to iterate. */ - ooi_waiting:1, /* it::next is waiting. */ - ooi_stopping:1; /* Someone is stopping - * the iteration. */ + ooi_waiting:1; /* it::next is waiting. */ }; -extern const int osd_dto_credits_noquota[]; - /* * osd device. */ @@ -243,44 +231,42 @@ struct osd_device { * Fid Capability */ unsigned int od_fl_capa:1, - od_is_md:1; /* set in ->ldo_prepare */ + od_maybe_new:1, + od_noscrub:1, + od_dirent_journal:1, + od_igif_inoi:1, + od_check_ff:1, + od_is_ost:1, + od_lma_self_repair:1; + unsigned long od_capa_timeout; __u32 od_capa_alg; struct lustre_capa_key *od_capa_keys; - cfs_hlist_head_t *od_capa_hash; + struct hlist_head *od_capa_hash; - cfs_proc_dir_entry_t *od_proc_entry; + struct proc_dir_entry *od_proc_entry; struct lprocfs_stats *od_stats; - /* - * statfs optimization: we cache a bit. - */ - cfs_time_t od_osfs_age; - struct obd_statfs od_statfs; - spinlock_t od_osfs_lock; - unsigned int od_noscrub:1, - od_dirent_journal:1, - od_handle_nolma:1; + spinlock_t od_osfs_lock; - struct fsfilt_operations *od_fsops; int od_connects; struct lu_site od_site; struct osd_obj_map *od_ost_map; struct osd_mdobj_map *od_mdt_map; - unsigned long long od_readcache_max_filesize; - int od_read_cache; - int od_writethrough_cache; + unsigned long long od_readcache_max_filesize; + int od_read_cache; + int od_writethrough_cache; - struct brw_stats od_brw_stats; - cfs_atomic_t od_r_in_flight; - cfs_atomic_t od_w_in_flight; + struct brw_stats od_brw_stats; + atomic_t od_r_in_flight; + atomic_t od_w_in_flight; struct mutex od_otable_mutex; struct osd_otable_it *od_otable_it; struct osd_scrub od_scrub; - cfs_list_t od_ios_list; + struct list_head od_ios_list; /* service name associated with the osd device */ char od_svname[MAX_OBD_NAME]; @@ -288,6 +274,9 @@ struct osd_device { /* quota slave instance */ struct qsd_instance *od_quota_slave; + + /* osd seq instance */ + struct lu_client_seq *od_cl_seq; }; /* There are at most 10 uid/gids are affected in a transaction, and @@ -314,21 +303,18 @@ enum { OSD_OT_WRITE = 7, OSD_OT_INSERT = 8, OSD_OT_DELETE = 9, - OSD_OT_QUOTA = 10, - OSD_OT_MAX = 11 + OSD_OT_UPDATE = 10, + OSD_OT_QUOTA = 11, + OSD_OT_MAX = 12 }; -#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 3, 90, 0) -# define OSD_TRACK_DECLARES -#endif - struct osd_thandle { struct thandle ot_super; handle_t *ot_handle; struct ldiskfs_journal_cb_entry ot_jcb; - cfs_list_t ot_dcb_list; - /* Link to the device, for debugging. */ - struct lu_ref_link *ot_dev_link; + struct list_head ot_dcb_list; + /* Link to the device, for debugging. */ + struct lu_ref_link ot_dev_link; unsigned short ot_credits; unsigned short ot_id_cnt; unsigned short ot_id_type; @@ -354,7 +340,6 @@ enum dt_txn_op { DTO_OBJECT_DELETE, DTO_ATTR_SET_BASE, DTO_XATTR_SET, - DTO_LOG_REC, /**< XXX temporary: dt layer knows nothing about llog. */ DTO_WRITE_BASE, DTO_WRITE_BLOCK, DTO_ATTR_SET_CHOWN, @@ -411,7 +396,7 @@ struct osd_it_ea_dirent { * there would be one ext3 readdir for every mdd readdir page. */ -#define OSD_IT_EA_BUFSIZE (CFS_PAGE_SIZE + CFS_PAGE_SIZE/4) +#define OSD_IT_EA_BUFSIZE (PAGE_CACHE_SIZE + PAGE_CACHE_SIZE/4) /** * This is iterator's in-memory data structure in interoperability @@ -441,7 +426,7 @@ struct osd_it_iam { }; struct osd_quota_leaf { - cfs_list_t oql_link; + struct list_head oql_link; uint oql_blk; }; @@ -459,14 +444,14 @@ struct osd_it_quota { /** the record index in the leaf/index block */ uint oiq_index[LUSTRE_DQTREEDEPTH + 1]; /** list of already processed leaf blocks */ - cfs_list_t oiq_list; + struct list_head oiq_list; }; -#define MAX_BLOCKS_PER_PAGE (CFS_PAGE_SIZE / 512) +#define MAX_BLOCKS_PER_PAGE (PAGE_CACHE_SIZE / 512) struct osd_iobuf { - cfs_waitq_t dr_wait; - cfs_atomic_t dr_numreqs; /* number of reqs being processed */ + wait_queue_head_t dr_wait; + atomic_t dr_numreqs; /* number of reqs being processed */ int dr_max_pages; int dr_npages; int dr_error; @@ -498,8 +483,10 @@ struct osd_thread_info { struct lu_fid oti_fid; struct lu_fid oti_fid2; + struct lu_fid oti_fid3; struct osd_inode_id oti_id; struct osd_inode_id oti_id2; + struct osd_inode_id oti_id3; struct ost_id oti_ostid; /* @@ -562,6 +549,7 @@ struct osd_thread_info { int oti_txns; /** used in osd_fid_set() to put xattr */ struct lu_buf oti_buf; + struct lu_buf oti_big_buf; /** used in osd_ea_fid_set() to set fid into common ea */ union { struct lustre_mdt_attrs oti_mdt_attrs; @@ -590,24 +578,50 @@ struct osd_thread_info { __u64 oti_quota_id; struct lu_seq_range oti_seq_range; -#ifdef OSD_TRACK_DECLARES /* Tracking for transaction credits, to allow debugging and optimizing * cases where a large number of credits are being allocated for * single transaction. */ - unsigned char oti_declare_ops[OSD_OT_MAX]; - unsigned char oti_declare_ops_rb[OSD_OT_MAX]; + unsigned short oti_declare_ops[OSD_OT_MAX]; + unsigned short oti_declare_ops_rb[OSD_OT_MAX]; unsigned short oti_declare_ops_cred[OSD_OT_MAX]; bool oti_rollback; -#endif char oti_name[48]; + union { + struct filter_fid_old oti_ff; + struct filter_fid oti_ff_new; + }; }; extern int ldiskfs_pdo; +static inline int __osd_xattr_get(struct inode *inode, struct dentry *dentry, + const char *name, void *buf, int len) +{ + if (inode == NULL) + return -EINVAL; + + dentry->d_inode = inode; + dentry->d_sb = inode->i_sb; + return inode->i_op->getxattr(dentry, name, buf, len); +} + +static inline int __osd_xattr_set(struct osd_thread_info *info, + struct inode *inode, const char *name, + const void *buf, int buflen, int fl) +{ + struct dentry *dentry = &info->oti_child_dentry; + + ll_vfs_dq_init(inode); + dentry->d_inode = inode; + dentry->d_sb = inode->i_sb; + return inode->i_op->setxattr(dentry, name, buf, buflen, fl); +} + #ifdef LPROCFS /* osd_lproc.c */ -void lprocfs_osd_init_vars(struct lprocfs_static_vars *lvars); +extern struct lprocfs_seq_vars lprocfs_osd_obd_vars[]; +extern struct lprocfs_seq_vars lprocfs_osd_module_vars[]; int osd_procfs_init(struct osd_device *osd, const char *name); int osd_procfs_fini(struct osd_device *osd); void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf); @@ -620,24 +634,37 @@ int osd_object_auth(const struct lu_env *env, struct dt_object *dt, struct inode *osd_iget(struct osd_thread_info *info, struct osd_device *dev, struct osd_inode_id *id); int osd_ea_fid_set(struct osd_thread_info *info, struct inode *inode, - const struct lu_fid *fid); + const struct lu_fid *fid, __u32 compat, __u32 incompat); int osd_get_lma(struct osd_thread_info *info, struct inode *inode, struct dentry *dentry, struct lustre_mdt_attrs *lma); +int osd_add_oi_cache(struct osd_thread_info *info, struct osd_device *osd, + struct osd_inode_id *id, const struct lu_fid *fid); +int osd_get_idif(struct osd_thread_info *info, struct inode *inode, + struct dentry *dentry, struct lu_fid *fid); -int osd_obj_map_init(struct osd_device *osd); +int osd_obj_map_init(const struct lu_env *env, struct osd_device *osd); void osd_obj_map_fini(struct osd_device *dev); int osd_obj_map_lookup(struct osd_thread_info *info, struct osd_device *osd, const struct lu_fid *fid, struct osd_inode_id *id); int osd_obj_map_insert(struct osd_thread_info *info, struct osd_device *osd, const struct lu_fid *fid, const struct osd_inode_id *id, - struct thandle *th); + handle_t *th); int osd_obj_map_delete(struct osd_thread_info *info, struct osd_device *osd, - const struct lu_fid *fid, struct thandle *th); + const struct lu_fid *fid, handle_t *th); +int osd_obj_map_update(struct osd_thread_info *info, struct osd_device *osd, + const struct lu_fid *fid, const struct osd_inode_id *id, + handle_t *th); +int osd_obj_map_recover(struct osd_thread_info *info, struct osd_device *osd, + struct inode *src_parent, struct dentry *src_child, + const struct lu_fid *fid); int osd_obj_spec_lookup(struct osd_thread_info *info, struct osd_device *osd, const struct lu_fid *fid, struct osd_inode_id *id); int osd_obj_spec_insert(struct osd_thread_info *info, struct osd_device *osd, const struct lu_fid *fid, const struct osd_inode_id *id, - struct thandle *th); + handle_t *th); +int osd_obj_spec_update(struct osd_thread_info *info, struct osd_device *osd, + const struct lu_fid *fid, const struct osd_inode_id *id, + handle_t *th); void osd_scrub_file_reset(struct osd_scrub *scrub, __u8 *uuid, __u64 flags); int osd_scrub_file_store(struct osd_scrub *scrub); @@ -649,19 +676,24 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic, int insert); int osd_oii_lookup(struct osd_device *dev, const struct lu_fid *fid, struct osd_inode_id *id); -int osd_scrub_dump(struct osd_device *dev, char *buf, int len); +int osd_scrub_dump(struct seq_file *m, struct osd_device *dev); int osd_fld_lookup(const struct lu_env *env, struct osd_device *osd, - const struct lu_fid *fid, struct lu_seq_range *range); -struct dentry *osd_agent_lookup(struct osd_mdobj_map *omm, int index); -struct dentry *osd_agent_load(const struct osd_device *osd, int mdt_index, - int create); - -int osd_delete_from_agent(const struct lu_env *env, struct osd_device *osd, - struct osd_object *obj, struct osd_thandle *oh); -int osd_add_to_agent(const struct lu_env *env, struct osd_device *osd, - struct osd_object *obj, struct osd_thandle *oh); - + obd_seq seq, struct lu_seq_range *range); + +int osd_delete_from_remote_parent(const struct lu_env *env, + struct osd_device *osd, + struct osd_object *obj, + struct osd_thandle *oh); +int osd_add_to_remote_parent(const struct lu_env *env, struct osd_device *osd, + struct osd_object *obj, struct osd_thandle *oh); +int osd_lookup_in_remote_parent(struct osd_thread_info *oti, + struct osd_device *osd, + const struct lu_fid *fid, + struct osd_inode_id *id); + +int osd_ost_seq_exists(struct osd_thread_info *info, struct osd_device *osd, + __u64 seq); /* osd_quota_fmt.c */ int walk_tree_dqentry(const struct lu_env *env, struct osd_object *obj, int type, uint blk, int depth, uint index, @@ -675,10 +707,12 @@ loff_t find_tree_dqentry(const struct lu_env *env, struct osd_it_quota *it); /* osd_quota.c */ int osd_declare_qid(const struct lu_env *env, struct osd_thandle *oh, - struct lquota_id_info *qi, bool allocated, int *flags); + struct lquota_id_info *qi, struct osd_object *obj, + bool enforce, int *flags); int osd_declare_inode_qid(const struct lu_env *env, qid_t uid, qid_t gid, long long space, struct osd_thandle *oh, - bool is_blk, bool allocated, int *flags, bool force); + struct osd_object *obj, bool is_blk, int *flags, + bool force); const struct dt_rec *osd_quota_pack(struct osd_object *obj, const struct dt_rec *rec, union lquota_rec *quota_rec); @@ -686,9 +720,6 @@ void osd_quota_unpack(struct osd_object *obj, const struct dt_rec *rec); int osd_quota_migration(const struct lu_env *env, struct dt_object *dt, const struct dt_index_features *feat); -/* osd_compat.c */ -struct osd_obj_seq *osd_seq_load(struct osd_device *osd, obd_seq seq); - static inline bool is_quota_glb_feat(const struct dt_index_features *feat) { return (feat == &dt_quota_iusr_features || @@ -697,6 +728,28 @@ static inline bool is_quota_glb_feat(const struct dt_index_features *feat) feat == &dt_quota_bgrp_features) ? true : false; } +#ifndef HAVE_I_UID_READ +static inline uid_t i_uid_read(const struct inode *inode) +{ + return inode->i_uid; +} + +static inline gid_t i_gid_read(const struct inode *inode) +{ + return inode->i_gid; +} + +static inline void i_uid_write(struct inode *inode, uid_t uid) +{ + inode->i_uid = uid; +} + +static inline void i_gid_write(struct inode *inode, gid_t gid) +{ + inode->i_gid = gid; +} +#endif + /* * Invariants, assertions. */ @@ -738,7 +791,8 @@ static inline struct osd_oi *osd_fid2oi(struct osd_device *osd, { LASSERTF(!fid_is_idif(fid), DFID"\n", PFID(fid)); LASSERTF(!fid_is_last_id(fid), DFID"\n", PFID(fid)); - LASSERT(osd->od_oi_table != NULL && osd->od_oi_count >= 1); + LASSERTF(osd->od_oi_table != NULL && osd->od_oi_count >= 1, + DFID"\n", PFID(fid)); /* It can work even od_oi_count equals to 1 although it's unexpected, * the only reason we set it to 1 is for performance measurement */ return osd->od_oi_table[osd_oi_fid2idx(osd, fid)]; @@ -809,7 +863,6 @@ static inline char *osd_name(struct osd_device *osd) return osd->od_dt_dev.dd_lu_dev.ld_obd->obd_name; } - extern const struct dt_body_operations osd_body_ops; extern struct lu_context_key osd_key; @@ -870,8 +923,8 @@ struct dentry *osd_child_dentry_by_inode(const struct lu_env *env, return child_dentry; } -#ifdef OSD_TRACK_DECLARES extern int osd_trans_declare_op2rb[]; +extern int ldiskfs_track_declares_assert; static inline void osd_trans_declare_op(const struct lu_env *env, struct osd_thandle *oh, @@ -880,10 +933,18 @@ static inline void osd_trans_declare_op(const struct lu_env *env, struct osd_thread_info *oti = osd_oti_get(env); LASSERT(oh->ot_handle == NULL); - LASSERT(op < OSD_OT_MAX); - - oti->oti_declare_ops[op]++; - oti->oti_declare_ops_cred[op] += credits; + if (unlikely(op >= OSD_OT_MAX)) { + if (unlikely(ldiskfs_track_declares_assert)) { + LASSERT(op < OSD_OT_MAX); + } else { + CWARN("%s: Invalid operation index %d\n", + osd_name(oti->oti_dev), op); + libcfs_debug_dumpstack(NULL); + } + } else { + oti->oti_declare_ops[op]++; + oti->oti_declare_ops_cred[op] += credits; + } oh->ot_credits += credits; } @@ -896,7 +957,16 @@ static inline void osd_trans_exec_op(const struct lu_env *env, unsigned int rb; LASSERT(oh->ot_handle != NULL); - LASSERT(op < OSD_OT_MAX); + if (unlikely(op >= OSD_OT_MAX)) { + if (unlikely(ldiskfs_track_declares_assert)) + LASSERT(op < OSD_OT_MAX); + else { + CWARN("%s: Invalid operation index %d\n", + osd_name(oti->oti_dev), op); + libcfs_debug_dumpstack(NULL); + return; + } + } if (likely(!oti->oti_rollback && oti->oti_declare_ops[op] > 0)) { oti->oti_declare_ops[op]--; @@ -905,8 +975,28 @@ static inline void osd_trans_exec_op(const struct lu_env *env, /* all future updates are considered rollback */ oti->oti_rollback = true; rb = osd_trans_declare_op2rb[op]; - LASSERTF(rb < OSD_OT_MAX, "op = %u\n", op); - LASSERTF(oti->oti_declare_ops_rb[rb] > 0, "rb = %u\n", rb); + if (unlikely(rb >= OSD_OT_MAX)) { + if (unlikely(ldiskfs_track_declares_assert)) + LASSERTF(rb < OSD_OT_MAX, "rb = %u\n", rb); + else { + CWARN("%s: Invalid rollback index %d\n", + osd_name(oti->oti_dev), rb); + libcfs_debug_dumpstack(NULL); + return; + } + } + if (unlikely(oti->oti_declare_ops_rb[rb] == 0)) { + if (unlikely(ldiskfs_track_declares_assert)) + LASSERTF(oti->oti_declare_ops_rb[rb] > 0, + "rb = %u\n", rb); + else { + CWARN("%s: Overflow in tracking declares for " + "index, rb = %d\n", + osd_name(oti->oti_dev), rb); + libcfs_debug_dumpstack(NULL); + return; + } + } oti->oti_declare_ops_rb[rb]--; } } @@ -919,28 +1009,19 @@ static inline void osd_trans_declare_rb(const struct lu_env *env, ot_super); LASSERT(oh->ot_handle != NULL); - LASSERT(op < OSD_OT_MAX); - - oti->oti_declare_ops_rb[op]++; -} -#else -static inline void osd_trans_declare_op(const struct lu_env *env, - struct osd_thandle *oh, - unsigned int op, int credits) -{ - oh->ot_credits += credits; -} - -static inline void osd_trans_exec_op(const struct lu_env *env, - struct thandle *th, unsigned int op) -{ -} + if (unlikely(op >= OSD_OT_MAX)) { + if (unlikely(ldiskfs_track_declares_assert)) + LASSERT(op < OSD_OT_MAX); + else { + CWARN("%s: Invalid operation index %d\n", + osd_name(oti->oti_dev), op); + libcfs_debug_dumpstack(NULL); + } -static inline void osd_trans_declare_rb(const struct lu_env *env, - struct thandle *th, unsigned int op) -{ + } else { + oti->oti_declare_ops_rb[op]++; + } } -#endif /** * Helper function to pack the fid, ldiskfs stores fid in packed format. @@ -998,5 +1079,44 @@ static inline loff_t ldiskfs_get_htree_eof(struct file *filp) return LDISKFS_HTREE_EOF_64BIT; } -#endif /* __KERNEL__ */ +static inline int fid_is_internal(const struct lu_fid *fid) +{ + return (!fid_is_namespace_visible(fid) && !fid_is_idif(fid)); +} + +static inline unsigned long osd_remote_parent_ino(struct osd_device *dev) +{ + return dev->od_mdt_map->omm_remote_parent->d_inode->i_ino; +} + +#ifdef JOURNAL_START_HAS_3ARGS +# define osd_journal_start_sb(sb, type, nblock) \ + ldiskfs_journal_start_sb(sb, type, nblock) +# define osd_ldiskfs_append(handle, inode, nblock, err) \ + ldiskfs_append(handle, inode, nblock) +# define osd_ldiskfs_find_entry(dir, name, de, inlined, lock) \ + ldiskfs_find_entry(dir, name, de, inlined, lock) +# define osd_journal_start(inode, type, nblocks) \ + ldiskfs_journal_start(inode, type, nblocks) +# define osd_transaction_size(dev) \ + (osd_journal(dev)->j_max_transaction_buffers / 2) +#else +# define LDISKFS_HT_MISC 0 +# define osd_journal_start_sb(sb, type, nblock) \ + ldiskfs_journal_start_sb(sb, nblock) +# define osd_ldiskfs_append(handle, inode, nblock, err) \ + ldiskfs_append(handle, inode, nblock, err) +# define osd_ldiskfs_find_entry(dir, name, de, inlined, lock) \ + ldiskfs_find_entry(dir, name, de, lock) +# define osd_journal_start(inode, type, nblocks) \ + ldiskfs_journal_start(inode, nblocks) +# define osd_transaction_size(dev) \ + (osd_journal(dev)->j_max_transaction_buffers) +#endif + +void ldiskfs_inc_count(handle_t *handle, struct inode *inode); +void ldiskfs_dec_count(handle_t *handle, struct inode *inode); + +void osd_fini_iobuf(struct osd_device *d, struct osd_iobuf *iobuf); + #endif /* _OSD_INTERNAL_H */