]> err.no Git - linux-2.6/blobdiff - fs/ocfs2/aops.h
Merge branch 'linux-2.6' into for-2.6.22
[linux-2.6] / fs / ocfs2 / aops.h
index eeb2c42483e8d24d3eb7b757f37b35b4cf7fe701..45821d479b5a3662028d99847dc64835f39b92fb 100644 (file)
@@ -30,6 +30,18 @@ handle_t *ocfs2_start_walk_page_trans(struct inode *inode,
                                                         unsigned from,
                                                         unsigned to);
 
+int ocfs2_map_page_blocks(struct page *page, u64 *p_blkno,
+                         struct inode *inode, unsigned int from,
+                         unsigned int to, int new);
+
+int walk_page_buffers( handle_t *handle,
+                       struct buffer_head *head,
+                       unsigned from,
+                       unsigned to,
+                       int *partial,
+                       int (*fn)(      handle_t *handle,
+                                       struct buffer_head *bh));
+
 struct ocfs2_write_ctxt;
 typedef int (ocfs2_page_writer)(struct inode *, struct ocfs2_write_ctxt *,
                                u64 *, unsigned int *, unsigned int *);
@@ -68,12 +80,33 @@ int ocfs2_map_and_write_user_data(struct inode *inode,
                                  unsigned int *ret_from,
                                  unsigned int *ret_to);
 
+struct ocfs2_splice_write_priv {
+       struct splice_desc              *s_sd;
+       struct pipe_buffer              *s_buf;
+       struct pipe_inode_info          *s_pipe;
+       /* Neither offset value is ever larger than one page */
+       unsigned int                    s_offset;
+       unsigned int                    s_buf_offset;
+};
+int ocfs2_map_and_write_splice_data(struct inode *inode,
+                                   struct ocfs2_write_ctxt *wc,
+                                   u64 *p_blkno,
+                                   unsigned int *ret_from,
+                                   unsigned int *ret_to);
+
 /* all ocfs2_dio_end_io()'s fault */
 #define ocfs2_iocb_is_rw_locked(iocb) \
        test_bit(0, (unsigned long *)&iocb->private)
-#define ocfs2_iocb_set_rw_locked(iocb) \
-       set_bit(0, (unsigned long *)&iocb->private)
+static inline void ocfs2_iocb_set_rw_locked(struct kiocb *iocb, int level)
+{
+       set_bit(0, (unsigned long *)&iocb->private);
+       if (level)
+               set_bit(1, (unsigned long *)&iocb->private);
+       else
+               clear_bit(1, (unsigned long *)&iocb->private);
+}
 #define ocfs2_iocb_clear_rw_locked(iocb) \
        clear_bit(0, (unsigned long *)&iocb->private)
-
+#define ocfs2_iocb_rw_locked_level(iocb) \
+       test_bit(1, (unsigned long *)&iocb->private)
 #endif /* OCFS2_FILE_H */