X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosd%2Fosd_internal.h;h=624b82a5461f9f0f5799187f233e370a2bd19437;hp=f325119f45bc1c2ba522b338cda96bf83988f607;hb=f2bedfe6e389eccf931f339cd8efe93f72ed530c;hpb=86aeca3550c902b96b434ff51754d037282347cc diff --git a/lustre/osd/osd_internal.h b/lustre/osd/osd_internal.h index f325119..624b82a 100644 --- a/lustre/osd/osd_internal.h +++ b/lustre/osd/osd_internal.h @@ -54,6 +54,8 @@ /* struct dentry */ #include #include +/* struct dirent64 */ +#include /* LUSTRE_OSD_NAME */ #include @@ -66,8 +68,17 @@ struct inode; +#define OSD_OII_NOGEN (0) #define OSD_COUNTERS (0) +#ifdef HAVE_QUOTA_SUPPORT +struct osd_ctxt { + __u32 oc_uid; + __u32 oc_gid; + __u32 oc_cap; +}; +#endif + /* * osd device. */ @@ -82,7 +93,7 @@ struct osd_device { * XXX temporary stuff for object index: directory where every object * is named by its fid. */ - struct dentry *od_obj_area; + struct dt_object *od_obj_area; /* Environment for transaction commit callback. * Currently, OSD is based on ext3/JBD. Transaction commit in ext3/JBD @@ -100,7 +111,7 @@ struct osd_device { __u32 od_capa_alg; struct lustre_capa_key *od_capa_keys; struct hlist_head *od_capa_hash; - + cfs_proc_dir_entry_t *od_proc_entry; struct lprocfs_stats *od_stats; /* @@ -109,24 +120,74 @@ struct osd_device { cfs_time_t od_osfs_age; struct kstatfs od_kstatfs; spinlock_t od_osfs_lock; + + /** + * The following flag indicates, if it is interop mode or not. + * It will be initialized, using mount param. + */ + __u32 od_iop_mode; }; +struct osd_it_ea_dirent { + __u64 oied_ino; + __u64 oied_off; + unsigned short oied_namelen; + unsigned int oied_type; + char oied_name[0]; +} __attribute__((packed)); + +#define OSD_IT_EA_BUFSIZE CFS_PAGE_SIZE + +/** + * This is iterator's in-memory data structure in interoperability + * mode (i.e. iterator over ldiskfs style directory) + */ +struct osd_it_ea { + struct osd_object *oie_obj; + /** used in ldiskfs iterator, to stored file pointer */ + struct file oie_file; + /** current file position */ + __u64 oie_curr_pos; + /** next file position */ + __u64 oie_next_pos; + /** how many entries have been read-cached from storage */ + int oie_rd_dirent; + /** current entry is being iterated by caller */ + int oie_it_dirent; + /** current processing entry */ + struct osd_it_ea_dirent *oie_dirent; + /** buffer to hold entries, size == OSD_IT_EA_BUFSIZE */ + void *oie_buf; +}; + +/** + * Iterator's in-memory data structure for IAM mode. + */ +struct osd_it_iam { + struct osd_object *oi_obj; + struct iam_path_descr *oi_ipd; + struct iam_iterator oi_it; +}; struct osd_thread_info { const struct lu_env *oti_env; + /** + * used for index operations. + */ + struct dentry oti_obj_dentry; + struct dentry oti_child_dentry; + + /** dentry for Iterator context. */ + struct dentry oti_it_dentry; struct lu_fid oti_fid; struct osd_inode_id oti_id; /* * XXX temporary: for ->i_op calls. */ - struct qstr oti_str; struct txn_param oti_txn; - /* - * XXX temporary: fake dentry used by xattr calls. - */ - struct dentry oti_dentry; struct timespec oti_time; + struct timespec oti_time2; /* * XXX temporary: fake struct file for osd_object_sync */ @@ -139,16 +200,49 @@ struct osd_thread_info { struct lu_fid_pack oti_pack; - /* union to guarantee that ->oti_ipd[] has proper alignment. */ + /** + * following ipd and it structures are used for osd_index_iam_lookup() + * these are defined separately as we might do index operation + * in open iterator session. + */ + + /** osd iterator context used for iterator session */ + union { - char oti_ipd[DX_IPD_MAX_SIZE]; + struct osd_it_iam oti_it; + /** ldiskfs iterator data structure, see osd_it_ea_{init, fini} */ + struct osd_it_ea oti_it_ea; + }; + + /** pre-allocated buffer used by oti_it_ea, size OSD_IT_EA_BUFSIZE */ + void *oti_it_ea_buf; + + /** IAM iterator for index operation. */ + struct iam_iterator oti_idx_it; + + /** union to guarantee that ->oti_ipd[] has proper alignment. */ + union { + char oti_it_ipd[DX_IPD_MAX_SIZE]; long long oti_alignment_lieutenant; }; -#if OSD_COUNTERS + + union { + char oti_idx_ipd[DX_IPD_MAX_SIZE]; + long long oti_alignment_lieutenant_colonel; + }; + + int oti_r_locks; int oti_w_locks; int oti_txns; + /** used in osd_fid_set() to put xattr */ + struct lu_buf oti_buf; + /** used in osd_ea_fid_set() to set fid into common ea */ + struct lustre_mdt_attrs oti_mdt_attrs; +#ifdef HAVE_QUOTA_SUPPORT + struct osd_ctxt oti_ctxt; #endif + struct lu_env oti_obj_delete_tx_env; }; #ifdef LPROCFS