X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fllite%2Fllite_internal.h;h=f5d36c507b7fbb6f1012047222174f834371524c;hp=cb9f9acb09dee14df284a5f6809d66d3669a2405;hb=4960810b94d808965cae9258fb4f7583618a75e9;hpb=1c2eb904b1545eb9fc48f910dd5648a6aa174f6a diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index cb9f9ac..f5d36c5 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -75,7 +75,6 @@ struct ll_dentry_data { struct lookup_intent *lld_it; #endif unsigned int lld_sa_generation; - cfs_list_t lld_sa_alias; }; #define ll_d2d(de) ((struct ll_dentry_data*)((de)->d_fsdata)) @@ -122,7 +121,7 @@ struct ll_inode_info { cfs_semaphore_t lli_size_sem; /* protect open and change size */ void *lli_size_sem_owner; cfs_semaphore_t lli_write_sem; - cfs_semaphore_t lli_trunc_sem; + cfs_rw_semaphore_t lli_trunc_sem; char *lli_symlink_name; __u64 lli_maxbytes; __u64 lli_ioepoch; @@ -177,7 +176,7 @@ struct ll_inode_info { /* metadata statahead */ /* protect statahead stuff: lli_opendir_pid, lli_opendir_key, lli_sai, - * lli_sa_dentry, and so on. */ + * and so on. */ cfs_spinlock_t lli_sa_lock; /* * "opendir_pid" is the token when lookup/revalid -- I am the owner of @@ -190,7 +189,6 @@ struct ll_inode_info { * before child -- it is me should cleanup the dir readahead. */ void *lli_opendir_key; struct ll_statahead_info *lli_sai; - cfs_list_t lli_sa_dentry; struct cl_object *lli_clob; /* the most recent timestamps obtained from mds */ struct ost_lvb lli_lvb; @@ -311,6 +309,8 @@ enum stats_track_type { #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 */ +#define LL_SBI_SOM_PREVIEW 0x1000 /* SOM preview mount option */ +#define LL_SBI_32BIT_API 0x2000 /* generate 32 bit inodes. */ /* default value for ll_sb_info->contention_time */ #define SBI_DEFAULT_CONTENTION_SECONDS 60 @@ -529,13 +529,20 @@ struct it_cb_data { struct inode *icbd_parent; struct dentry **icbd_childp; obd_id hash; - struct inode **icbd_alias; - __u32 *bits; }; __u32 ll_i2suppgid(struct inode *i); void ll_i2gids(__u32 *suppgids, struct inode *i1,struct inode *i2); +static inline int ll_need_32bit_api(struct ll_sb_info *sbi) +{ +#if BITS_PER_LONG == 32 + return 1; +#else + return unlikely(cfs_curproc_is_32bit() || (sbi->ll_flags & LL_SBI_32BIT_API)); +#endif +} + #define LLAP_MAGIC 98764321 extern cfs_mem_cache_t *ll_async_page_slab; @@ -588,7 +595,6 @@ int ll_md_blocking_ast(struct ldlm_lock *, struct ldlm_lock_desc *, struct lookup_intent *ll_convert_intent(struct open_intent *oit, int lookup_flags); #endif -void ll_lookup_it_alias(struct dentry **de, struct inode *inode, __u32 bits); int ll_lookup_it_finish(struct ptlrpc_request *request, struct lookup_intent *it, void *data); @@ -613,7 +619,7 @@ extern struct file_operations ll_file_operations_flock; extern struct file_operations ll_file_operations_noflock; extern struct inode_operations ll_file_inode_operations; extern int ll_inode_revalidate_it(struct dentry *, struct lookup_intent *); -extern int ll_have_md_lock(struct inode *inode, __u64 bits); +extern int ll_have_md_lock(struct inode *inode, __u64 bits, ldlm_mode_t l_req_mode); extern ldlm_mode_t ll_take_md_lock(struct inode *inode, __u64 bits, struct lustre_handle *lockh); int __ll_inode_revalidate_it(struct dentry *, struct lookup_intent *, __u64 bits); @@ -675,12 +681,12 @@ int ll_fid2path(struct obd_export *exp, void *arg); /** * protect race ll_find_aliases vs ll_revalidate_it vs ll_unhash_aliases */ +int ll_dops_init(struct dentry *de, int block); extern cfs_spinlock_t ll_lookup_lock; extern struct dentry_operations ll_d_ops; void ll_intent_drop_lock(struct lookup_intent *); void ll_intent_release(struct lookup_intent *); int ll_drop_dentry(struct dentry *dentry); -extern int ll_set_dd(struct dentry *de); int ll_drop_dentry(struct dentry *dentry); void ll_unhash_aliases(struct inode *); void ll_frob_intent(struct lookup_intent **itp, struct lookup_intent *deft); @@ -951,12 +957,6 @@ struct vm_area_struct *our_vma(unsigned long addr, size_t count); #define ll_s2sbi(sb) (s2lsi(sb)->lsi_llsbi) -static inline __u64 ll_ts2u64(struct timespec *time) -{ - __u64 t = time->tv_sec; - return t; -} - /* don't need an addref as the sb_info should be holding one */ static inline struct obd_export *ll_s2dtexp(struct super_block *sb) { @@ -1124,7 +1124,6 @@ struct ll_statahead_info { unsigned int sai_skip_hidden;/* skipped hidden dentry count */ unsigned int sai_ls_all:1; /* "ls -al", do stat-ahead for * hidden entries */ - unsigned int sai_nolock; /* without lookup lock case */ cfs_waitq_t sai_waitq; /* stat-ahead wait queue */ struct ptlrpc_thread sai_thread; /* stat-ahead thread */ cfs_list_t sai_entries_sent; /* entries sent out */ @@ -1134,7 +1133,7 @@ struct ll_statahead_info { int do_statahead_enter(struct inode *dir, struct dentry **dentry, int lookup); void ll_statahead_exit(struct inode *dir, struct dentry *dentry, int result); -void ll_stop_statahead(struct inode *inode, void *key); +void ll_stop_statahead(struct inode *dir, void *key); static inline void ll_statahead_mark(struct inode *dir, struct dentry *dentry) @@ -1196,26 +1195,6 @@ int ll_statahead_enter(struct inode *dir, struct dentry **dentryp, int lookup) return do_statahead_enter(dir, dentryp, lookup); } -static int inline ll_dops_init(struct dentry *de, int block) -{ - struct ll_dentry_data *lld = ll_d2d(de); - int rc = 0; - - if (lld == NULL && block != 0) { - rc = ll_set_dd(de); - if (rc) - return rc; - - lld = ll_d2d(de); - } - - if (lld != NULL) - lld->lld_sa_generation = 0; - - de->d_op = &ll_d_ops; - return rc; -} - /* llite ioctl register support rountine */ #ifdef __KERNEL__ enum llioc_iter {