Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef _LINUX_NFS_XDR_H
  2 #define _LINUX_NFS_XDR_H
  3 
  4 #include <linux/sunrpc/xprt.h>
  5 
  6 struct nfs4_fsid {
  7         __u64 major;
  8         __u64 minor;
  9 };
 10 
 11 struct nfs_fattr {
 12         unsigned short          valid;          /* which fields are valid */
 13         __u64                   pre_size;       /* pre_op_attr.size       */
 14         struct timespec         pre_mtime;      /* pre_op_attr.mtime      */
 15         struct timespec         pre_ctime;      /* pre_op_attr.ctime      */
 16         enum nfs_ftype          type;           /* always use NFSv2 types */
 17         __u32                   mode;
 18         __u32                   nlink;
 19         __u32                   uid;
 20         __u32                   gid;
 21         __u64                   size;
 22         union {
 23                 struct {
 24                         __u32   blocksize;
 25                         __u32   blocks;
 26                 } nfs2;
 27                 struct {
 28                         __u64   used;
 29                 } nfs3;
 30         } du;
 31         dev_t                   rdev;
 32         union {
 33                 __u64           nfs3;           /* also nfs2 */
 34                 struct nfs4_fsid nfs4;
 35         } fsid_u;
 36         __u64                   fileid;
 37         struct timespec         atime;
 38         struct timespec         mtime;
 39         struct timespec         ctime;
 40         __u32                   bitmap[2];      /* NFSv4 returned attribute bitmap */
 41         __u64                   change_attr;    /* NFSv4 change attribute */
 42         __u64                   pre_change_attr;/* pre-op NFSv4 change attribute */
 43         unsigned long           timestamp;
 44 };
 45 
 46 #define NFS_ATTR_WCC            0x0001          /* pre-op WCC data    */
 47 #define NFS_ATTR_FATTR          0x0002          /* post-op attributes */
 48 #define NFS_ATTR_FATTR_V3       0x0004          /* NFSv3 attributes */
 49 #define NFS_ATTR_FATTR_V4       0x0008
 50 #define NFS_ATTR_PRE_CHANGE     0x0010
 51 
 52 /*
 53  * Info on the file system
 54  */
 55 struct nfs_fsinfo {
 56         struct nfs_fattr        *fattr; /* Post-op attributes */
 57         __u32                   rtmax;  /* max.  read transfer size */
 58         __u32                   rtpref; /* pref. read transfer size */
 59         __u32                   rtmult; /* reads should be multiple of this */
 60         __u32                   wtmax;  /* max.  write transfer size */
 61         __u32                   wtpref; /* pref. write transfer size */
 62         __u32                   wtmult; /* writes should be multiple of this */
 63         __u32                   dtpref; /* pref. readdir transfer size */
 64         __u64                   maxfilesize;
 65         __u32                   lease_time; /* in seconds */
 66 };
 67 
 68 struct nfs_fsstat {
 69         struct nfs_fattr        *fattr; /* Post-op attributes */
 70         __u64                   tbytes; /* total size in bytes */
 71         __u64                   fbytes; /* # of free bytes */
 72         __u64                   abytes; /* # of bytes available to user */
 73         __u64                   tfiles; /* # of files */
 74         __u64                   ffiles; /* # of free files */
 75         __u64                   afiles; /* # of files available to user */
 76 };
 77 
 78 struct nfs2_fsstat {
 79         __u32                   tsize;  /* Server transfer size */
 80         __u32                   bsize;  /* Filesystem block size */
 81         __u32                   blocks; /* No. of "bsize" blocks on filesystem */
 82         __u32                   bfree;  /* No. of free "bsize" blocks */
 83         __u32                   bavail; /* No. of available "bsize" blocks */
 84 };
 85 
 86 struct nfs_pathconf {
 87         struct nfs_fattr        *fattr; /* Post-op attributes */
 88         __u32                   max_link; /* max # of hard links */
 89         __u32                   max_namelen; /* max name length */
 90 };
 91 
 92 struct nfs4_change_info {
 93         u32                     atomic;
 94         u64                     before;
 95         u64                     after;
 96 };
 97 
 98 /*
 99  * Arguments to the open call.
100  */
101 struct nfs_openargs {
102         const struct nfs_fh *   fh;
103         __u32                   seqid;
104         int                     open_flags;
105         __u64                   clientid;
106         __u32                   id;
107         union {
108                 struct iattr *  attrs;    /* UNCHECKED, GUARDED */
109                 nfs4_verifier   verifier; /* EXCLUSIVE */
110                 nfs4_stateid    delegation;             /* CLAIM_DELEGATE_CUR */
111                 int             delegation_type;        /* CLAIM_PREVIOUS */
112         } u;
113         const struct qstr *     name;
114         const struct nfs_server *server;         /* Needed for ID mapping */
115         const u32 *             bitmask;
116         __u32                   claim;
117 };
118 
119 struct nfs_openres {
120         nfs4_stateid            stateid;
121         struct nfs_fh           fh;
122         struct nfs4_change_info cinfo;
123         __u32                   rflags;
124         struct nfs_fattr *      f_attr;
125         const struct nfs_server *server;
126         int                     delegation_type;
127         nfs4_stateid            delegation;
128         __u32                   do_recall;
129         __u64                   maxsize;
130 };
131 
132 /*
133  * Arguments to the open_confirm call.
134  */
135 struct nfs_open_confirmargs {
136         const struct nfs_fh *   fh;
137         nfs4_stateid            stateid;
138         __u32                   seqid;
139 };
140 
141 struct nfs_open_confirmres {
142         nfs4_stateid            stateid;
143 };
144 
145 /*
146  * Arguments to the close call.
147  */
148 struct nfs_closeargs {
149         struct nfs_fh *         fh;
150         nfs4_stateid            stateid;
151         __u32                   seqid;
152         int                     open_flags;
153 };
154 
155 struct nfs_closeres {
156         nfs4_stateid            stateid;
157 };
158 /*
159  *  * Arguments to the lock,lockt, and locku call.
160  *   */
161 struct nfs_lowner {
162         __u64           clientid;
163         u32                     id;
164 };
165 
166 struct nfs_open_to_lock {
167         __u32                   open_seqid;
168         nfs4_stateid            open_stateid;
169         __u32                   lock_seqid;
170         struct nfs_lowner       lock_owner;
171 };
172 
173 struct nfs_exist_lock {
174         nfs4_stateid            stateid;
175         __u32                   seqid;
176 };
177 
178 struct nfs_lock_opargs {
179         __u32                   reclaim;
180         __u32                   new_lock_owner;
181         union {
182                 struct nfs_open_to_lock *open_lock;
183                 struct nfs_exist_lock   *exist_lock;
184         } u;
185 };
186 
187 struct nfs_locku_opargs {
188         __u32                   seqid;
189         nfs4_stateid            stateid;
190 };
191 
192 struct nfs_lockargs {
193         struct nfs_fh *         fh;
194         __u32                   type;
195         __u64                   offset; 
196         __u64                   length; 
197         union {
198                 struct nfs_lock_opargs  *lock;    /* LOCK  */
199                 struct nfs_lowner       *lockt;  /* LOCKT */
200                 struct nfs_locku_opargs *locku;  /* LOCKU */
201         } u;
202 };
203 
204 struct nfs_lock_denied {
205         __u64                   offset;
206         __u64                   length;
207         __u32                   type;
208         struct nfs_lowner       owner;
209 };
210 
211 struct nfs_lockres {
212         union {
213                 nfs4_stateid            stateid;/* LOCK success, LOCKU */
214                 struct nfs_lock_denied  denied; /* LOCK failed, LOCKT success */
215         } u;
216         const struct nfs_server *       server;
217 };
218 
219 struct nfs4_delegreturnargs {
220         const struct nfs_fh *fhandle;
221         const nfs4_stateid *stateid;
222 };
223 
224 /*
225  * Arguments to the read call.
226  */
227 
228 #define NFS_READ_MAXIOV         (9U)
229 #if (NFS_READ_MAXIOV > (MAX_IOVEC -2))
230 #error "NFS_READ_MAXIOV is too large"
231 #endif
232 
233 struct nfs_readargs {
234         struct nfs_fh *         fh;
235         struct nfs_open_context *context;
236         __u64                   offset;
237         __u32                   count;
238         unsigned int            pgbase;
239         struct page **          pages;
240 };
241 
242 struct nfs_readres {
243         struct nfs_fattr *      fattr;
244         __u32                   count;
245         int                     eof;
246 };
247 
248 /*
249  * Arguments to the write call.
250  */
251 #define NFS_WRITE_MAXIOV        (9U)
252 #if (NFS_WRITE_MAXIOV > (MAX_IOVEC -2))
253 #error "NFS_WRITE_MAXIOV is too large"
254 #endif
255 
256 struct nfs_writeargs {
257         struct nfs_fh *         fh;
258         struct nfs_open_context *context;
259         __u64                   offset;
260         __u32                   count;
261         enum nfs3_stable_how    stable;
262         unsigned int            pgbase;
263         struct page **          pages;
264 };
265 
266 struct nfs_writeverf {
267         enum nfs3_stable_how    committed;
268         __u32                   verifier[2];
269 };
270 
271 struct nfs_writeres {
272         struct nfs_fattr *      fattr;
273         struct nfs_writeverf *  verf;
274         __u32                   count;
275 };
276 
277 /*
278  * Argument struct for decode_entry function
279  */
280 struct nfs_entry {
281         __u64                   ino;
282         __u64                   cookie,
283                                 prev_cookie;
284         const char *            name;
285         unsigned int            len;
286         int                     eof;
287         struct nfs_fh *         fh;
288         struct nfs_fattr *      fattr;
289 };
290 
291 /*
292  * The following types are for NFSv2 only.
293  */
294 struct nfs_sattrargs {
295         struct nfs_fh *         fh;
296         struct iattr *          sattr;
297 };
298 
299 struct nfs_diropargs {
300         struct nfs_fh *         fh;
301         const char *            name;
302         unsigned int            len;
303 };
304 
305 struct nfs_createargs {
306         struct nfs_fh *         fh;
307         const char *            name;
308         unsigned int            len;
309         struct iattr *          sattr;
310 };
311 
312 struct nfs_renameargs {
313         struct nfs_fh *         fromfh;
314         const char *            fromname;
315         unsigned int            fromlen;
316         struct nfs_fh *         tofh;
317         const char *            toname;
318         unsigned int            tolen;
319 };
320 
321 struct nfs_setattrargs {
322         struct nfs_fh *                 fh;
323         nfs4_stateid                    stateid;
324         struct iattr *                  iap;
325         const struct nfs_server *       server; /* Needed for name mapping */
326         const u32 *                     bitmask;
327 };
328 
329 struct nfs_setattrres {
330         struct nfs_fattr *              fattr;
331         const struct nfs_server *       server;
332 };
333 
334 struct nfs_linkargs {
335         struct nfs_fh *         fromfh;
336         struct nfs_fh *         tofh;
337         const char *            toname;
338         unsigned int            tolen;
339 };
340 
341 struct nfs_symlinkargs {
342         struct nfs_fh *         fromfh;
343         const char *            fromname;
344         unsigned int            fromlen;
345         const char *            topath;
346         unsigned int            tolen;
347         struct iattr *          sattr;
348 };
349 
350 struct nfs_readdirargs {
351         struct nfs_fh *         fh;
352         __u32                   cookie;
353         unsigned int            count;
354         struct page **          pages;
355 };
356 
357 struct nfs_diropok {
358         struct nfs_fh *         fh;
359         struct nfs_fattr *      fattr;
360 };
361 
362 struct nfs_readlinkargs {
363         struct nfs_fh *         fh;
364         unsigned int            pgbase;
365         unsigned int            pglen;
366         struct page **          pages;
367 };
368 
369 struct nfs3_sattrargs {
370         struct nfs_fh *         fh;
371         struct iattr *          sattr;
372         unsigned int            guard;
373         struct timespec         guardtime;
374 };
375 
376 struct nfs3_diropargs {
377         struct nfs_fh *         fh;
378         const char *            name;
379         unsigned int            len;
380 };
381 
382 struct nfs3_accessargs {
383         struct nfs_fh *         fh;
384         __u32                   access;
385 };
386 
387 struct nfs3_createargs {
388         struct nfs_fh *         fh;
389         const char *            name;
390         unsigned int            len;
391         struct iattr *          sattr;
392         enum nfs3_createmode    createmode;
393         __u32                   verifier[2];
394 };
395 
396 struct nfs3_mkdirargs {
397         struct nfs_fh *         fh;
398         const char *            name;
399         unsigned int            len;
400         struct iattr *          sattr;
401 };
402 
403 struct nfs3_symlinkargs {
404         struct nfs_fh *         fromfh;
405         const char *            fromname;
406         unsigned int            fromlen;
407         const char *            topath;
408         unsigned int            tolen;
409         struct iattr *          sattr;
410 };
411 
412 struct nfs3_mknodargs {
413         struct nfs_fh *         fh;
414         const char *            name;
415         unsigned int            len;
416         enum nfs3_ftype         type;
417         struct iattr *          sattr;
418         dev_t                   rdev;
419 };
420 
421 struct nfs3_renameargs {
422         struct nfs_fh *         fromfh;
423         const char *            fromname;
424         unsigned int            fromlen;
425         struct nfs_fh *         tofh;
426         const char *            toname;
427         unsigned int            tolen;
428 };
429 
430 struct nfs3_linkargs {
431         struct nfs_fh *         fromfh;
432         struct nfs_fh *         tofh;
433         const char *            toname;
434         unsigned int            tolen;
435 };
436 
437 struct nfs3_readdirargs {
438         struct nfs_fh *         fh;
439         __u64                   cookie;
440         __u32                   verf[2];
441         int                     plus;
442         unsigned int            count;
443         struct page **          pages;
444 };
445 
446 struct nfs3_diropres {
447         struct nfs_fattr *      dir_attr;
448         struct nfs_fh *         fh;
449         struct nfs_fattr *      fattr;
450 };
451 
452 struct nfs3_accessres {
453         struct nfs_fattr *      fattr;
454         __u32                   access;
455 };
456 
457 struct nfs3_readlinkargs {
458         struct nfs_fh *         fh;
459         unsigned int            pgbase;
460         unsigned int            pglen;
461         struct page **          pages;
462 };
463 
464 struct nfs3_renameres {
465         struct nfs_fattr *      fromattr;
466         struct nfs_fattr *      toattr;
467 };
468 
469 struct nfs3_linkres {
470         struct nfs_fattr *      dir_attr;
471         struct nfs_fattr *      fattr;
472 };
473 
474 struct nfs3_readdirres {
475         struct nfs_fattr *      dir_attr;
476         __u32 *                 verf;
477         int                     plus;
478 };
479 
480 #ifdef CONFIG_NFS_V4
481 
482 typedef u64 clientid4;
483 
484 struct nfs4_accessargs {
485         const struct nfs_fh *           fh;
486         u32                             access;
487 };
488 
489 struct nfs4_accessres {
490         u32                             supported;
491         u32                             access;
492 };
493 
494 struct nfs4_create_arg {
495         u32                             ftype;
496         union {
497                 struct qstr *           symlink;    /* NF4LNK */
498                 struct {
499                         u32             specdata1;
500                         u32             specdata2;
501                 } device;    /* NF4BLK, NF4CHR */
502         } u;
503         const struct qstr *             name;
504         const struct nfs_server *       server;
505         const struct iattr *            attrs;
506         const struct nfs_fh *           dir_fh;
507         const u32 *                     bitmask;
508 };
509 
510 struct nfs4_create_res {
511         const struct nfs_server *       server;
512         struct nfs_fh *                 fh;
513         struct nfs_fattr *              fattr;
514         struct nfs4_change_info         dir_cinfo;
515 };
516 
517 struct nfs4_fsinfo_arg {
518         const struct nfs_fh *           fh;
519         const u32 *                     bitmask;
520 };
521 
522 struct nfs4_getattr_arg {
523         const struct nfs_fh *           fh;
524         const u32 *                     bitmask;
525 };
526 
527 struct nfs4_getattr_res {
528         const struct nfs_server *       server;
529         struct nfs_fattr *              fattr;
530 };
531 
532 struct nfs4_link_arg {
533         const struct nfs_fh *           fh;
534         const struct nfs_fh *           dir_fh;
535         const struct qstr *             name;
536 };
537 
538 struct nfs4_lookup_arg {
539         const struct nfs_fh *           dir_fh;
540         const struct qstr *             name;
541         const u32 *                     bitmask;
542 };
543 
544 struct nfs4_lookup_res {
545         const struct nfs_server *       server;
546         struct nfs_fattr *              fattr;
547         struct nfs_fh *                 fh;
548 };
549 
550 struct nfs4_lookup_root_arg {
551         const u32 *                     bitmask;
552 };
553 
554 struct nfs4_pathconf_arg {
555         const struct nfs_fh *           fh;
556         const u32 *                     bitmask;
557 };
558 
559 struct nfs4_readdir_arg {
560         const struct nfs_fh *           fh;
561         u64                             cookie;
562         nfs4_verifier                   verifier;
563         u32                             count;
564         struct page **                  pages;  /* zero-copy data */
565         unsigned int                    pgbase; /* zero-copy data */
566 };
567 
568 struct nfs4_readdir_res {
569         nfs4_verifier                   verifier;
570         unsigned int                    pgbase;
571 };
572 
573 struct nfs4_readlink {
574         const struct nfs_fh *           fh;
575         unsigned int                    pgbase;
576         unsigned int                    pglen;   /* zero-copy data */
577         struct page **                  pages;   /* zero-copy data */
578 };
579 
580 struct nfs4_remove_arg {
581         const struct nfs_fh *           fh;
582         const struct qstr *             name;
583 };
584 
585 struct nfs4_rename_arg {
586         const struct nfs_fh *           old_dir;
587         const struct nfs_fh *           new_dir;
588         const struct qstr *             old_name;
589         const struct qstr *             new_name;
590 };
591 
592 struct nfs4_rename_res {
593         struct nfs4_change_info         old_cinfo;
594         struct nfs4_change_info         new_cinfo;
595 };
596 
597 struct nfs4_setclientid {
598         const nfs4_verifier *           sc_verifier;      /* request */
599         unsigned int                    sc_name_len;
600         char                            sc_name[32];      /* request */
601         u32                             sc_prog;          /* request */
602         unsigned int                    sc_netid_len;
603         char                            sc_netid[4];      /* request */
604         unsigned int                    sc_uaddr_len;
605         char                            sc_uaddr[24];     /* request */
606         u32                             sc_cb_ident;      /* request */
607 };
608 
609 struct nfs4_statfs_arg {
610         const struct nfs_fh *           fh;
611         const u32 *                     bitmask;
612 };
613 
614 struct nfs4_server_caps_res {
615         u32                             attr_bitmask[2];
616         u32                             acl_bitmask;
617         u32                             has_links;
618         u32                             has_symlinks;
619 };
620 
621 #endif /* CONFIG_NFS_V4 */
622 
623 struct nfs_page;
624 
625 struct nfs_read_data {
626         int                     flags;
627         struct rpc_task         task;
628         struct inode            *inode;
629         struct rpc_cred         *cred;
630         struct nfs_fattr        fattr;  /* fattr storage */
631         struct list_head        pages;  /* Coalesced read requests */
632         struct nfs_page         *req;   /* multi ops per nfs_page */
633         struct page             *pagevec[NFS_READ_MAXIOV];
634         struct nfs_readargs args;
635         struct nfs_readres  res;
636 #ifdef CONFIG_NFS_V4
637         unsigned long           timestamp;      /* For lease renewal */
638 #endif
639         void (*complete) (struct nfs_read_data *, int);
640 };
641 
642 struct nfs_write_data {
643         int                     flags;
644         struct rpc_task         task;
645         struct inode            *inode;
646         struct rpc_cred         *cred;
647         struct nfs_fattr        fattr;
648         struct nfs_writeverf    verf;
649         struct list_head        pages;          /* Coalesced requests we wish to flush */
650         struct nfs_page         *req;           /* multi ops per nfs_page */
651         struct page             *pagevec[NFS_WRITE_MAXIOV];
652         struct nfs_writeargs    args;           /* argument struct */
653         struct nfs_writeres     res;            /* result struct */
654 #ifdef CONFIG_NFS_V4
655         unsigned long           timestamp;      /* For lease renewal */
656 #endif
657         void (*complete) (struct nfs_write_data *, int);
658 };
659 
660 struct nfs_access_entry;
661 
662 /*
663  * RPC procedure vector for NFSv2/NFSv3 demuxing
664  */
665 struct nfs_rpc_ops {
666         int     version;                /* Protocol version */
667         struct dentry_operations *dentry_ops;
668         struct inode_operations *dir_inode_ops;
669 
670         int     (*getroot) (struct nfs_server *, struct nfs_fh *,
671                             struct nfs_fsinfo *);
672         int     (*getattr) (struct nfs_server *, struct nfs_fh *,
673                             struct nfs_fattr *);
674         int     (*setattr) (struct dentry *, struct nfs_fattr *,
675                             struct iattr *);
676         int     (*lookup)  (struct inode *, struct qstr *,
677                             struct nfs_fh *, struct nfs_fattr *);
678         int     (*access)  (struct inode *, struct nfs_access_entry *);
679         int     (*readlink)(struct inode *, struct page *, unsigned int,
680                             unsigned int);
681         int     (*read)    (struct nfs_read_data *);
682         int     (*write)   (struct nfs_write_data *);
683         int     (*commit)  (struct nfs_write_data *);
684         struct inode *  (*create)  (struct inode *, struct dentry *,
685                             struct iattr *, int);
686         int     (*remove)  (struct inode *, struct qstr *);
687         int     (*unlink_setup)  (struct rpc_message *,
688                             struct dentry *, struct qstr *);
689         int     (*unlink_done) (struct dentry *, struct rpc_task *);
690         int     (*rename)  (struct inode *, struct qstr *,
691                             struct inode *, struct qstr *);
692         int     (*link)    (struct inode *, struct inode *, struct qstr *);
693         int     (*symlink) (struct inode *, struct qstr *, struct qstr *,
694                             struct iattr *, struct nfs_fh *,
695                             struct nfs_fattr *);
696         int     (*mkdir)   (struct inode *, struct qstr *, struct iattr *,
697                             struct nfs_fh *, struct nfs_fattr *);
698         int     (*rmdir)   (struct inode *, struct qstr *);
699         int     (*readdir) (struct dentry *, struct rpc_cred *,
700                             u64, struct page *, unsigned int, int);
701         int     (*mknod)   (struct inode *, struct qstr *, struct iattr *,
702                             dev_t, struct nfs_fh *, struct nfs_fattr *);
703         int     (*statfs)  (struct nfs_server *, struct nfs_fh *,
704                             struct nfs_fsstat *);
705         int     (*fsinfo)  (struct nfs_server *, struct nfs_fh *,
706                             struct nfs_fsinfo *);
707         int     (*pathconf) (struct nfs_server *, struct nfs_fh *,
708                              struct nfs_pathconf *);
709         u32 *   (*decode_dirent)(u32 *, struct nfs_entry *, int plus);
710         void    (*read_setup)   (struct nfs_read_data *);
711         void    (*write_setup)  (struct nfs_write_data *, int how);
712         void    (*commit_setup) (struct nfs_write_data *, int how);
713         int     (*file_open)   (struct inode *, struct file *);
714         int     (*file_release) (struct inode *, struct file *);
715         int     (*lock)(struct file *, int, struct file_lock *);
716 };
717 
718 /*
719  *      NFS_CALL(getattr, inode, (fattr));
720  * into
721  *      NFS_PROTO(inode)->getattr(fattr);
722  */
723 #define NFS_CALL(op, inode, args)       NFS_PROTO(inode)->op args
724 
725 /*
726  * Function vectors etc. for the NFS client
727  */
728 extern struct nfs_rpc_ops       nfs_v2_clientops;
729 extern struct nfs_rpc_ops       nfs_v3_clientops;
730 extern struct nfs_rpc_ops       nfs_v4_clientops;
731 extern struct rpc_version       nfs_version2;
732 extern struct rpc_version       nfs_version3;
733 extern struct rpc_version       nfs_version4;
734 extern struct rpc_program       nfs_program;
735 extern struct rpc_stat          nfs_rpcstat;
736 
737 #endif
738 
  This page was automatically generated by the LXR engine.