struct obd_uuid ll_mds_uuid;
struct obd_uuid ll_mds_peer_uuid;
struct lustre_mount_data *ll_lmd;
- char *ll_instance;
+ char *ll_instance;
int ll_flags;
wait_queue_head_t ll_commitcbd_waitq;
struct ll_close_queue *ll_lcq;
struct lprocfs_stats *ll_stats; /* lprocfs stats counter */
+
+ spinlock_t ll_pglist_lock;
+ unsigned long ll_pglist_gen;
+ struct list_head ll_pglist;
+};
+
+struct ll_readahead_state {
+ spinlock_t ras_lock;
+ unsigned long ras_last, ras_window, ras_next_index;
};
+extern kmem_cache_t *ll_file_data_slab;
struct lustre_handle;
+struct ll_file_data {
+ struct obd_client_handle fd_mds_och;
+ struct ll_readahead_state fd_ras;
+ __u32 fd_flags;
+ struct lustre_handle fd_cwlockh;
+ unsigned long fd_gid;
+};
+
struct lov_stripe_md;
extern spinlock_t inode_lock;
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
# define hlist_del_init list_del_init
-#endif
+#endif
static inline struct inode *ll_info2i(struct ll_inode_info *lli)
{
ctxt->gid2 = i2->i_gid;
else
ctxt->gid2 = -1;
- } else
+ } else
ctxt->gid2 = 0;
}
struct it_cb_data {
- struct inode *icbd_parent;
- struct dentry **icbd_childp;
- obd_id hash;
+ struct inode *icbd_parent;
+ struct dentry **icbd_childp;
+ obd_id hash;
};
#define LLAP_MAGIC 98764321
struct ll_async_page {
int llap_magic;
void *llap_cookie;
- int llap_queued;
struct page *llap_page;
struct list_head llap_pending_write;
+ /* only trust these if the page lock is providing exclusion */
+ int llap_write_queued:1,
+ llap_defer_uptodate:1;
+ struct list_head llap_proc_item;
};
-#define LL_CDEBUG_PAGE(page, STR) \
- CDEBUG(D_PAGE, "page %p map %p ind %lu priv %0lx: " STR, \
- page, page->mapping, page->index, page->private)
+#define LL_CDEBUG_PAGE(mask, page, fmt, arg...) \
+ CDEBUG(mask, "page %p map %p ind %lu priv %0lx: " fmt, \
+ page, page->mapping, page->index, page->private, ## arg)
/* llite/lproc_llite.c */
int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
int ll_prepare_write(struct file *, struct page *, unsigned from, unsigned to);
int ll_commit_write(struct file *, struct page *, unsigned from, unsigned to);
void ll_inode_fill_obdo(struct inode *inode, int cmd, struct obdo *oa);
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-#define ll_ap_completion ll_ap_completion_24
-void ll_ap_completion_24(void *data, int cmd, int rc);
-#else
-#define ll_ap_completion ll_ap_completion_26
-void ll_ap_completion_26(void *data, int cmd, int rc);
-#endif
-int ll_ocp_update_obdo(struct obd_client_page *ocp, int cmd, struct obdo *oa);
-int ll_ocp_set_io_ready(struct obd_client_page *ocp, int cmd);
-int ll_ocp_update_io_args(struct obd_client_page *ocp, int cmd);
+void ll_ap_completion(void *data, int cmd, struct obdo *oa, int rc);
void ll_removepage(struct page *page);
+int ll_sync_page(struct page *page);
int ll_readpage(struct file *file, struct page *page);
struct ll_async_page *llap_from_cookie(void *cookie);
struct ll_async_page *llap_from_page(struct page *page);
+void ll_readahead_init(struct inode *inode, struct ll_readahead_state *ras);
void ll_truncate(struct inode *inode);
extern struct inode_operations ll_file_inode_operations;
extern int ll_inode_revalidate_it(struct dentry *, struct lookup_intent *);
int ll_extent_lock(struct ll_file_data *, struct inode *,
- struct lov_stripe_md *, int mode, struct ldlm_extent *,
- struct lustre_handle *);
+ struct lov_stripe_md *, int mode, ldlm_policy_data_t *,
+ struct lustre_handle *, int ast_flags);
int ll_extent_unlock(struct ll_file_data *, struct inode *,
struct lov_stripe_md *, int mode, struct lustre_handle *);
int ll_file_open(struct inode *inode, struct file *file);
int ll_file_release(struct inode *inode, struct file *file);
int ll_lsm_getattr(struct obd_export *, struct lov_stripe_md *, struct obdo *);
-int ll_extent_lock_no_validate(struct ll_file_data *, struct inode *,
- struct lov_stripe_md *, int mode,
- struct ldlm_extent *, struct lustre_handle *,
- int ast_flags);
-
+int ll_glimpse_size(struct inode *inode, struct ost_lvb *lvb);
int ll_local_open(struct file *file, struct lookup_intent *it);
-int ll_mdc_close(struct obd_export *mdc_exp, struct inode *inode,
+int ll_mdc_close(struct obd_export *mdc_exp, struct inode *inode,
struct file *file);
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
int ll_getattr(struct vfsmount *mnt, struct dentry *de,
struct lookup_intent *it, struct kstat *stat);
#endif
-/* llite/special.c */
-extern struct inode_operations ll_special_inode_operations;
-extern struct file_operations ll_special_chr_inode_fops;
-extern struct file_operations ll_special_chr_file_fops;
-extern struct file_operations ll_special_blk_inode_fops;
-extern struct file_operations ll_special_fifo_inode_fops;
-extern struct file_operations ll_special_fifo_file_fops;
-extern struct file_operations ll_special_sock_inode_fops;
-
/* llite/dcache.c */
void ll_intent_drop_lock(struct lookup_intent *);
void ll_intent_release(struct lookup_intent *);
int ll_iocontrol(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg);
void ll_umount_begin(struct super_block *sb);
-int ll_prep_inode(struct obd_export *exp, struct inode **inode,
+int ll_prep_inode(struct obd_export *exp, struct inode **inode,
struct ptlrpc_request *req, int offset, struct super_block *);
__u32 get_uuid2int(const char *name, int len);
struct dentry *ll_fh_to_dentry(struct super_block *sb, __u32 *data, int len,
int fhtype, int parent);
int ll_dentry_to_fh(struct dentry *, __u32 *datap, int *lenp, int need_parent);
+
+/* llite/special.c */
+extern struct inode_operations ll_special_inode_operations;
+extern struct file_operations ll_special_chr_inode_fops;
+extern struct file_operations ll_special_chr_file_fops;
+extern struct file_operations ll_special_blk_inode_fops;
+extern struct file_operations ll_special_fifo_inode_fops;
+extern struct file_operations ll_special_fifo_file_fops;
+extern struct file_operations ll_special_sock_inode_fops;
+
/* llite/symlink.c */
extern struct inode_operations ll_fast_symlink_inode_operations;
#define LL_SBI_NOLCK 0x1
#define LL_SBI_READAHEAD 0x2
+#define LL_MAX_BLKSIZE (4UL * 1024 * 1024)
+
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))
#define ll_s2sbi(sb) ((struct ll_sb_info *)((sb)->s_fs_info))
void __d_rehash(struct dentry * entry, int lock);
{
return *time;
}
-#endif
+#endif
/* don't need an addref as the sb_info should be holding one */
static inline struct obd_export *ll_s2obdexp(struct super_block *sb)