2009-10-06 22:31:14 +04:00
# ifndef FS_CEPH_IOCTL_H
# define FS_CEPH_IOCTL_H
# include <linux/ioctl.h>
# include <linux/types.h>
2010-12-06 20:45:22 +03:00
# define CEPH_IOCTL_MAGIC 0x97
2009-10-06 22:31:14 +04:00
2011-08-05 02:41:37 +04:00
/*
* CEPH_IOC_GET_LAYOUT - get file layout or dir layout policy
* CEPH_IOC_SET_LAYOUT - set file layout
* CEPH_IOC_SET_LAYOUT_POLICY - set dir layout policy
*
* The file layout specifies how file data is striped over objects in
* the distributed object store , which object pool they belong to ( if
* it differs from the default ) , and an optional ' preferred osd ' to
* store them on .
*
* Files get a new layout based on the policy set on the containing
* directory or one of its ancestors . The GET_LAYOUT ioctl will let
* you examine the layout for a file or the policy on a directory .
*
* SET_LAYOUT will let you set a layout on a newly created file . This
* only works immediately after the file is created and before any
* data is written to it .
*
* SET_LAYOUT_POLICY will let you set a layout policy ( default layout )
* on a directory that will apply to any new files created in that
* directory ( or any child directory that doesn ' t specify a layout of
* its own ) .
*/
/* use u64 to align sanely on all archs */
2009-10-06 22:31:14 +04:00
struct ceph_ioctl_layout {
__u64 stripe_unit , stripe_count , object_size ;
__u64 data_pool ;
2012-05-14 23:34:38 +04:00
/* obsolete. new values ignored, always return -1 */
2009-12-03 01:42:39 +03:00
__s64 preferred_osd ;
2009-10-06 22:31:14 +04:00
} ;
# define CEPH_IOC_GET_LAYOUT _IOR(CEPH_IOCTL_MAGIC, 1, \
struct ceph_ioctl_layout )
# define CEPH_IOC_SET_LAYOUT _IOW(CEPH_IOCTL_MAGIC, 2, \
struct ceph_ioctl_layout )
2010-09-25 01:56:40 +04:00
# define CEPH_IOC_SET_LAYOUT_POLICY _IOW(CEPH_IOCTL_MAGIC, 5, \
struct ceph_ioctl_layout )
2009-10-06 22:31:14 +04:00
/*
2011-08-05 02:41:37 +04:00
* CEPH_IOC_GET_DATALOC - get location of file data in the cluster
*
2009-10-06 22:31:14 +04:00
* Extract identity , address of the OSD and object storing a given
* file offset .
*/
struct ceph_ioctl_dataloc {
__u64 file_offset ; /* in+out: file offset */
__u64 object_offset ; /* out: offset in object */
__u64 object_no ; /* out: object # */
__u64 object_size ; /* out: object size */
char object_name [ 64 ] ; /* out: object name */
__u64 block_offset ; /* out: offset in block */
__u64 block_size ; /* out: block length */
__s64 osd ; /* out: osd # */
struct sockaddr_storage osd_addr ; /* out: osd address */
} ;
# define CEPH_IOC_GET_DATALOC _IOWR(CEPH_IOCTL_MAGIC, 3, \
struct ceph_ioctl_dataloc )
2011-08-05 02:41:37 +04:00
/*
* CEPH_IOC_LAZYIO - relax consistency
*
* Normally Ceph switches to synchronous IO when multiple clients have
* the file open ( and or more for write ) . Reads and writes bypass the
* page cache and go directly to the OSD . Setting this flag on a file
* descriptor will allow buffered IO for this file in cases where the
* application knows it won ' t interfere with other nodes ( or doesn ' t
* care ) .
*/
2010-04-16 20:53:43 +04:00
# define CEPH_IOC_LAZYIO _IO(CEPH_IOCTL_MAGIC, 4)
2011-08-05 02:41:37 +04:00
/*
* CEPH_IOC_SYNCIO - force synchronous IO
*
* This ioctl sets a file flag that forces the synchronous IO that
* bypasses the page cache , even if it is not necessary . This is
* essentially the opposite behavior of IOC_LAZYIO . This forces the
* same read / write path as a file opened by multiple clients when one
* or more of those clients is opened for write .
*
* Note that this type of sync IO takes a different path than a file
* opened with O_SYNC / D_SYNC ( writes hit the page cache and are
* immediately flushed on page boundaries ) . It is very similar to
* O_DIRECT ( writes bypass the page cache ) excep that O_DIRECT writes
* are not copied ( user page must remain stable ) and O_DIRECT writes
* have alignment restrictions ( on the buffer and file offset ) .
*/
2011-07-26 22:26:07 +04:00
# define CEPH_IOC_SYNCIO _IO(CEPH_IOCTL_MAGIC, 5)
2010-04-16 20:53:43 +04:00
2009-10-06 22:31:14 +04:00
# endif