pnfs.h 3.5 KB
Newer Older
R
Ricardo Labiaga 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/*
 *  pNFS client data structures.
 *
 *  Copyright (c) 2002
 *  The Regents of the University of Michigan
 *  All Rights Reserved
 *
 *  Dean Hildebrand <dhildebz@umich.edu>
 *
 *  Permission is granted to use, copy, create derivative works, and
 *  redistribute this software and such derivative works for any purpose,
 *  so long as the name of the University of Michigan is not used in
 *  any advertising or publicity pertaining to the use or distribution
 *  of this software without specific, written prior authorization. If
 *  the above copyright notice or any other identification of the
 *  University of Michigan is included in any copy of any portion of
 *  this software, then the disclaimer below must also be included.
 *
 *  This software is provided as is, without representation or warranty
 *  of any kind either express or implied, including without limitation
 *  the implied warranties of merchantability, fitness for a particular
 *  purpose, or noninfringement.  The Regents of the University of
 *  Michigan shall not be liable for any damages, including special,
 *  indirect, incidental, or consequential damages, with respect to any
 *  claim arising out of or in connection with the use of the software,
 *  even if it has been or is hereafter advised of the possibility of
 *  such damages.
 */

#ifndef FS_NFS_PNFS_H
#define FS_NFS_PNFS_H

33 34 35 36 37 38 39
struct pnfs_layout_segment {
	struct list_head fi_list;
	u32 iomode;
	struct kref kref;
	struct pnfs_layout_hdr *layout;
};

R
Ricardo Labiaga 已提交
40 41 42 43
#ifdef CONFIG_NFS_V4_1

#define LAYOUT_NFSV4_1_MODULE_PREFIX "nfs-layouttype4"

44 45 46 47 48
enum {
	NFS_LAYOUT_RO_FAILED = 0,	/* get ro layout failed stop trying */
	NFS_LAYOUT_RW_FAILED,		/* get rw layout failed stop trying */
};

R
Ricardo Labiaga 已提交
49 50
/* Per-layout driver specific registration structure */
struct pnfs_layoutdriver_type {
51 52 53 54 55 56
	struct list_head pnfs_tblid;
	const u32 id;
	const char *name;
	struct module *owner;
	int (*initialize_mountpoint) (struct nfs_server *);
	int (*uninitialize_mountpoint) (struct nfs_server *);
R
Ricardo Labiaga 已提交
57 58
};

59 60
struct pnfs_layout_hdr {
	unsigned long		refcount;
61 62
	struct list_head	layouts;   /* other client layouts */
	struct list_head	segs;      /* layout segments list */
63 64 65 66
	unsigned long		state;
	struct inode		*inode;
};

67 68 69
extern int pnfs_register_layoutdriver(struct pnfs_layoutdriver_type *);
extern void pnfs_unregister_layoutdriver(struct pnfs_layoutdriver_type *);

70 71 72
struct pnfs_layout_segment *
pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx,
		   enum pnfs_iomode access_type);
R
Ricardo Labiaga 已提交
73 74
void set_pnfs_layoutdriver(struct nfs_server *, u32 id);
void unset_pnfs_layoutdriver(struct nfs_server *);
75
void pnfs_destroy_layout(struct nfs_inode *);
76
void pnfs_destroy_all_layouts(struct nfs_client *);
77 78 79 80 81 82 83 84 85 86 87 88 89


static inline int lo_fail_bit(u32 iomode)
{
	return iomode == IOMODE_RW ?
			 NFS_LAYOUT_RW_FAILED : NFS_LAYOUT_RO_FAILED;
}

/* Return true if a layout driver is being used for this mountpoint */
static inline int pnfs_enabled_sb(struct nfs_server *nfss)
{
	return nfss->pnfs_curr_ld != NULL;
}
R
Ricardo Labiaga 已提交
90 91 92

#else  /* CONFIG_NFS_V4_1 */

93 94 95 96
static inline void pnfs_destroy_all_layouts(struct nfs_client *clp)
{
}

97 98 99 100 101 102 103 104 105 106 107
static inline void pnfs_destroy_layout(struct nfs_inode *nfsi)
{
}

static inline struct pnfs_layout_segment *
pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx,
		   enum pnfs_iomode access_type)
{
	return NULL;
}

R
Ricardo Labiaga 已提交
108 109 110 111 112 113 114 115 116 117 118
static inline void set_pnfs_layoutdriver(struct nfs_server *s, u32 id)
{
}

static inline void unset_pnfs_layoutdriver(struct nfs_server *s)
{
}

#endif /* CONFIG_NFS_V4_1 */

#endif /* FS_NFS_PNFS_H */