Merge commit 'v2.6.29-rc1' into irq/urgent
[linux-2.6] / include / linux / auto_fs4.h
1 /* -*- c -*-
2  * linux/include/linux/auto_fs4.h
3  *
4  * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
5  *
6  * This file is part of the Linux kernel and is made available under
7  * the terms of the GNU General Public License, version 2, or at your
8  * option, any later version, incorporated herein by reference.
9  */
10
11 #ifndef _LINUX_AUTO_FS4_H
12 #define _LINUX_AUTO_FS4_H
13
14 /* Include common v3 definitions */
15 #include <linux/auto_fs.h>
16
17 /* autofs v4 definitions */
18 #undef AUTOFS_PROTO_VERSION
19 #undef AUTOFS_MIN_PROTO_VERSION
20 #undef AUTOFS_MAX_PROTO_VERSION
21
22 #define AUTOFS_PROTO_VERSION            5
23 #define AUTOFS_MIN_PROTO_VERSION        3
24 #define AUTOFS_MAX_PROTO_VERSION        5
25
26 #define AUTOFS_PROTO_SUBVERSION         1
27
28 /* Mask for expire behaviour */
29 #define AUTOFS_EXP_IMMEDIATE            1
30 #define AUTOFS_EXP_LEAVES               2
31
32 #define AUTOFS_TYPE_ANY                 0U
33 #define AUTOFS_TYPE_INDIRECT            1U
34 #define AUTOFS_TYPE_DIRECT              2U
35 #define AUTOFS_TYPE_OFFSET              4U
36
37 static inline void set_autofs_type_indirect(unsigned int *type)
38 {
39         *type = AUTOFS_TYPE_INDIRECT;
40         return;
41 }
42
43 static inline unsigned int autofs_type_indirect(unsigned int type)
44 {
45         return (type == AUTOFS_TYPE_INDIRECT);
46 }
47
48 static inline void set_autofs_type_direct(unsigned int *type)
49 {
50         *type = AUTOFS_TYPE_DIRECT;
51         return;
52 }
53
54 static inline unsigned int autofs_type_direct(unsigned int type)
55 {
56         return (type == AUTOFS_TYPE_DIRECT);
57 }
58
59 static inline void set_autofs_type_offset(unsigned int *type)
60 {
61         *type = AUTOFS_TYPE_OFFSET;
62         return;
63 }
64
65 static inline unsigned int autofs_type_offset(unsigned int type)
66 {
67         return (type == AUTOFS_TYPE_OFFSET);
68 }
69
70 static inline unsigned int autofs_type_trigger(unsigned int type)
71 {
72         return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
73 }
74
75 /*
76  * This isn't really a type as we use it to say "no type set" to
77  * indicate we want to search for "any" mount in the
78  * autofs_dev_ioctl_ismountpoint() device ioctl function.
79  */
80 static inline void set_autofs_type_any(unsigned int *type)
81 {
82         *type = AUTOFS_TYPE_ANY;
83         return;
84 }
85
86 static inline unsigned int autofs_type_any(unsigned int type)
87 {
88         return (type == AUTOFS_TYPE_ANY);
89 }
90
91 /* Daemon notification packet types */
92 enum autofs_notify {
93         NFY_NONE,
94         NFY_MOUNT,
95         NFY_EXPIRE
96 };
97
98 /* Kernel protocol version 4 packet types */
99
100 /* Expire entry (umount request) */
101 #define autofs_ptype_expire_multi       2
102
103 /* Kernel protocol version 5 packet types */
104
105 /* Indirect mount missing and expire requests. */
106 #define autofs_ptype_missing_indirect   3
107 #define autofs_ptype_expire_indirect    4
108
109 /* Direct mount missing and expire requests */
110 #define autofs_ptype_missing_direct     5
111 #define autofs_ptype_expire_direct      6
112
113 /* v4 multi expire (via pipe) */
114 struct autofs_packet_expire_multi {
115         struct autofs_packet_hdr hdr;
116         autofs_wqt_t wait_queue_token;
117         int len;
118         char name[NAME_MAX+1];
119 };
120
121 union autofs_packet_union {
122         struct autofs_packet_hdr hdr;
123         struct autofs_packet_missing missing;
124         struct autofs_packet_expire expire;
125         struct autofs_packet_expire_multi expire_multi;
126 };
127
128 /* autofs v5 common packet struct */
129 struct autofs_v5_packet {
130         struct autofs_packet_hdr hdr;
131         autofs_wqt_t wait_queue_token;
132         __u32 dev;
133         __u64 ino;
134         __u32 uid;
135         __u32 gid;
136         __u32 pid;
137         __u32 tgid;
138         __u32 len;
139         char name[NAME_MAX+1];
140 };
141
142 typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
143 typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
144 typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
145 typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
146
147 union autofs_v5_packet_union {
148         struct autofs_packet_hdr hdr;
149         struct autofs_v5_packet v5_packet;
150         autofs_packet_missing_indirect_t missing_indirect;
151         autofs_packet_expire_indirect_t expire_indirect;
152         autofs_packet_missing_direct_t missing_direct;
153         autofs_packet_expire_direct_t expire_direct;
154 };
155
156 #define AUTOFS_IOC_EXPIRE_MULTI         _IOW(0x93,0x66,int)
157 #define AUTOFS_IOC_EXPIRE_INDIRECT      AUTOFS_IOC_EXPIRE_MULTI
158 #define AUTOFS_IOC_EXPIRE_DIRECT        AUTOFS_IOC_EXPIRE_MULTI
159 #define AUTOFS_IOC_PROTOSUBVER          _IOR(0x93,0x67,int)
160 #define AUTOFS_IOC_ASKUMOUNT            _IOR(0x93,0x70,int)
161
162
163 #endif /* _LINUX_AUTO_FS4_H */