struct inode *inode, struct cl_object *clob);
/**
- * Common IO arguments for various VFS I/O interfaces.
- */
-struct ccc_io_args {
- int cia_is_sendfile;
-#ifndef HAVE_FILE_WRITEV
- struct kiocb *cia_iocb;
-#endif
- struct iovec *cia_iov;
- unsigned long cia_nrsegs;
- read_actor_t cia_actor;
- void *cia_target;
-};
-
-/**
* Locking policy for truncate.
*/
enum ccc_trunc_lock_type {
TRUNC_MATCH
};
+
/**
* IO state private to vvp or slp layers.
*/
#endif
};
+/**
+ * True, if \a io is a normal io, False for other (sendfile, splice*).
+ * must be impementated in arch specific code.
+ */
+int cl_is_normalio(const struct lu_env *env, const struct cl_io *io);
+
extern struct lu_context_key ccc_key;
extern struct lu_context_key ccc_session_key;
struct ccc_thread_info {
struct cl_lock_descr cti_descr;
struct cl_io cti_io;
- struct cl_sync_io cti_sync_io;
struct cl_attr cti_attr;
};
*
* \see ccc_page::cpg_pending_linkage
*/
- struct list_head cob_pending_list;
+ cfs_list_t cob_pending_list;
/**
* Access this counter is protected by inode->i_sem. Now that
*
* \see ll_vm_open(), ll_vm_close().
*/
- atomic_t cob_mmap_cnt;
+ cfs_atomic_t cob_mmap_cnt;
};
/**
* that is, never iterated through, only checked for list_empty(), but
* having a list is useful for debugging.
*/
- struct list_head cpg_pending_linkage;
+ cfs_list_t cpg_pending_linkage;
/** VM page */
cfs_page_t *cpg_page;
- struct cl_sync_io *cpg_sync_io;
- /**
- * checksum for paranoid I/O debugging enabled by
- * ENABLE_LLITE_CHECKSUM configuration option.
- *
- * XXX This cannot be implemented reliably because checksum cannot be
- * updated from ->set_page_dirty() that is called without page VM
- * lock.
- */
- __u32 cpg_checksum;
};
static inline struct ccc_page *cl2ccc_page(const struct cl_page_slice *slice)
const struct cl_page_slice *slice, struct cl_io *io);
int ccc_fail(const struct lu_env *env, const struct cl_page_slice *slice);
void ccc_transient_page_verify(const struct cl_page *page);
-void ccc_transient_page_own(const struct lu_env *env,
+int ccc_transient_page_own(const struct lu_env *env,
const struct cl_page_slice *slice,
- struct cl_io *io);
+ struct cl_io *io, int nonblock);
void ccc_transient_page_assume(const struct lu_env *env,
const struct cl_page_slice *slice,
struct cl_io *io);
int cl_local_size(struct inode *inode);
__u16 ll_dirent_type_get(struct lu_dirent *ent);
+ino_t cl_fid_build_ino(const struct lu_fid *fid);
+__u32 cl_fid_build_gen(const struct lu_fid *fid);
#ifdef INVARIANT_CHECK
# define CLOBINVRNT(env, clob, expr) \
int cl_init_ea_size(struct obd_export *md_exp, struct obd_export *dt_exp);
int cl_ocd_update(struct obd_device *host,
struct obd_device *watched,
- enum obd_notify_event ev, void *owner);
+ enum obd_notify_event ev, void *owner, void *data);
struct ccc_grouplock {
struct lu_env *cg_env;