This source file includes following definitions.
- ADIO_FileSysType_parentdir
- ADIO_FileSysType_fncall
- ADIO_FileSysType_fncall_scalable
- ADIO_FileSysType_prefix
- ADIO_ResolveFileType
1
2
3
4
5
6
7
8
9
10
11 #include "adio.h"
12
13 #ifdef HAVE_UNISTD_H
14 #include <unistd.h>
15 #endif
16
17 #ifdef HAVE_SYS_PARAM_H
18 #include <sys/param.h>
19 #endif
20
21 #ifdef HAVE_PVFS_H
22 #include "pvfs.h"
23 #endif
24
25 #ifdef HAVE_PVFS2_H
26 #include "pvfs2.h"
27 #endif
28
29 #ifdef HAVE_ZOIDFS_H
30 #include "zoidfs.h"
31 #endif
32
33 #ifdef HAVE_GPFS_H
34 #include "gpfs.h"
35 #endif
36
37
38
39
40
41
42
43
44
45
46
47
48 #ifdef HAVE_STRUCT_STATFS
49 # ifdef HAVE_SYS_VFS_H
50 # include <sys/vfs.h>
51 # endif
52 # ifdef HAVE_SYS_STATVFS_H
53 # include <sys/statvfs.h>
54 # endif
55 # ifdef HAVE_SYS_PARAM_H
56 # include <sys/param.h>
57 # endif
58 # ifdef HAVE_SYS_MOUNT_H
59 # include <sys/mount.h>
60 # endif
61
62
63
64 # if defined(ROMIO_NFS) && !defined(NFS_SUPER_MAGIC)
65 # define NFS_SUPER_MAGIC 0x6969
66 # endif
67
68 # if defined(ROMIO_PANFS) && !defined(PAN_KERNEL_FS_CLIENT_SUPER_MAGIC)
69 # define PAN_KERNEL_FS_CLIENT_SUPER_MAGIC 0xAAD7AAEA
70 # endif
71 #endif
72
73 # if defined(ROMIO_XFS) && !defined(XFS_SUPER_MAGIC)
74 # define XFS_SUPER_MAGIC 0x58465342
75 # endif
76
77 #if !defined(PVFS2_SUPER_MAGIC)
78 #define PVFS2_SUPER_MAGIC (0x20030528)
79 #endif
80
81 #if defined(ROMIO_GPFS) && !defined(GPFS_SUPER_MAGIC)
82 # define GPFS_SUPER_MAGIC 0x47504653
83 #endif
84
85 #ifdef ROMIO_HAVE_STRUCT_STATVFS_WITH_F_BASETYPE
86 # ifdef HAVE_SYS_STATVFS_H
87 # include <sys/statvfs.h>
88 # endif
89 # ifdef HAVE_SYS_VFS_H
90 # include <sys/vfs.h>
91 # endif
92 # ifdef HAVE_SYS_PARAM_H
93 # include <sys/param.h>
94 # endif
95 # ifdef HAVE_SYS_MOUNT_H
96 # include <sys/mount.h>
97 # endif
98 #endif
99
100 #ifdef ROMIO_HAVE_STRUCT_STAT_WITH_ST_FSTYPE
101 # ifdef HAVE_SYS_TYPES_H
102 # include <sys/types.h>
103 # endif
104 # ifdef HAVE_SYS_STAT_H
105 # include <sys/stat.h>
106 # endif
107 #endif
108
109
110
111
112 #if defined(ROMIO_HAVE_STRUCT_STATVFS_WITH_F_BASETYPE) || \
113 defined(HAVE_STRUCT_STATFS) || \
114 defined(ROMIO_HAVE_STRUCT_STAT_WITH_ST_FSTYPE)
115 #ifndef ROMIO_NTFS
116 #define ROMIO_NEEDS_ADIOPARENTDIR
117 static void ADIO_FileSysType_parentdir(const char *filename, char **dirnamep);
118 #endif
119 #endif
120 static void ADIO_FileSysType_prefix(const char *filename, int *fstype,
121 int *error_code);
122 static void ADIO_FileSysType_fncall(const char *filename, int *fstype,
123 int *error_code);
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138 #ifdef ROMIO_NEEDS_ADIOPARENTDIR
139
140
141
142
143
144 #if !defined(S_ISLNK)
145 # if defined(S_IFLNK)
146
147 # define S_ISLNK(mode) ((mode) & S_IFLNK)
148 # else
149
150 # define S_ISLNK(mode) 0
151 # endif
152 #endif
153
154
155
156
157
158
159 static void ADIO_FileSysType_parentdir(const char *filename, char **dirnamep)
160 {
161 int err;
162 char *dir = NULL, *slash;
163 struct stat statbuf;
164
165 err = lstat(filename, &statbuf);
166
167 if (err || (!S_ISLNK(statbuf.st_mode))) {
168
169
170
171 dir = ADIOI_Strdup(filename);
172 }
173 else {
174
175
176
177
178
179 ssize_t namelen;
180 char *linkbuf;
181
182 linkbuf = ADIOI_Malloc(PATH_MAX+1);
183 namelen = readlink(filename, linkbuf, PATH_MAX+1);
184 if (namelen == -1) {
185
186
187
188
189 dir = ADIOI_Strdup(filename);
190 }
191 else {
192
193 linkbuf[namelen] = '\0';
194 dir = ADIOI_Strdup(linkbuf);
195 }
196 ADIOI_Free(linkbuf);
197 }
198
199 slash = strrchr(dir, '/');
200 if (!slash) ADIOI_Strncpy(dir, ".", 2);
201 else {
202 if (slash == dir) *(dir + 1) = '\0';
203 else *slash = '\0';
204 }
205
206 *dirnamep = dir;
207 return;
208 }
209 #endif
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228 static void ADIO_FileSysType_fncall(const char *filename, int *fstype, int *error_code)
229 {
230 #if defined (ROMIO_HAVE_STRUCT_STATVFS_WITH_F_BASETYPE) || defined (HAVE_STRUCT_STATFS) || defined (ROMIO_HAVE_STRUCT_STAT_WITH_ST_FSTYPE)
231 int err;
232 #endif
233
234 #ifdef ROMIO_HAVE_STRUCT_STATVFS_WITH_F_BASETYPE
235 struct statvfs vfsbuf;
236 #endif
237 #ifdef HAVE_STRUCT_STATFS
238 struct statfs fsbuf;
239 #endif
240 #ifdef ROMIO_HAVE_STRUCT_STAT_WITH_ST_FSTYPE
241 struct stat sbuf;
242 #endif
243 static char myname[] = "ADIO_RESOLVEFILETYPE_FNCALL";
244
245
246 #define MAX_ESTALE_RETRY 10000
247 int retry_cnt;
248
249 *error_code = MPI_SUCCESS;
250
251 #ifdef ROMIO_HAVE_STRUCT_STATVFS_WITH_F_BASETYPE
252
253 retry_cnt=0;
254 do {
255 err = statvfs(filename, &vfsbuf);
256 } while (err && (errno == ESTALE) && retry_cnt++ < MAX_ESTALE_RETRY);
257
258 if (err) {
259
260
261
262
263
264
265 if (errno == ENOENT) {
266 char *dir;
267 ADIO_FileSysType_parentdir(filename, &dir);
268 err = statvfs(dir, &vfsbuf);
269
270 ADIOI_Free(dir);
271 }
272 else {
273 *error_code = ADIOI_Err_create_code(myname, filename, errno);
274 if(*error_code != MPI_SUCCESS) return;
275 }
276 }
277
278
279 if (err) {
280 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
281 myname, __LINE__, MPI_ERR_NO_SUCH_FILE,
282 "**filename", "**filename %s", filename);
283 return;
284 }
285
286
287
288 if (!strncmp(vfsbuf.f_basetype, "nfs", 3)) {
289 *fstype = ADIO_NFS;
290 return;
291 }
292 if (!strncmp(vfsbuf.f_basetype, "xfs", 3)) {
293 *fstype = ADIO_XFS;
294 return;
295 }
296
297 # ifdef ROMIO_UFS
298
299 *fstype = ADIO_UFS;
300 return;
301 # endif
302
303
304 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
305 myname, __LINE__, MPI_ERR_NO_SUCH_FILE,
306 "**filename", "**filename %s", filename);
307
308 #endif
309
310 #if defined(HAVE_STRUCT_STATFS) && defined(HAVE_STATFS)
311
312
313 retry_cnt = 0;
314 do {
315 err = statfs(filename, &fsbuf);
316 } while (err && (errno == ESTALE) && retry_cnt++ < MAX_ESTALE_RETRY);
317
318 if (err) {
319 if(errno == ENOENT) {
320 char *dir;
321 ADIO_FileSysType_parentdir(filename, &dir);
322 err = statfs(dir, &fsbuf);
323 ADIOI_Free(dir);
324 }
325 else {
326 *error_code = ADIOI_Err_create_code(myname, filename, errno);
327 if(*error_code != MPI_SUCCESS) return;
328 }
329 }
330
331
332 if (err) {
333 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
334 myname, __LINE__, MPI_ERR_NO_SUCH_FILE,
335 "**filename", "**filename %s", filename);
336 return;
337 }
338
339
340 # ifdef ROMIO_HAVE_STRUCT_STATFS_WITH_F_FSTYPENAME
341
342 if ( !strncmp("nfs",fsbuf.f_fstypename,3) ) {
343 *fstype = ADIO_NFS;
344 return;
345 }
346 # endif
347
348
349 #ifdef ROMIO_GPFS
350 if (fsbuf.f_type == GPFS_SUPER_MAGIC) {
351 *fstype = ADIO_GPFS;
352 return;
353 }
354 #endif
355
356
357 # ifdef NFS_SUPER_MAGIC
358 if (fsbuf.f_type == NFS_SUPER_MAGIC) {
359 *fstype = ADIO_NFS;
360 return;
361 }
362 # endif
363
364 #ifdef ROMIO_LUSTRE
365 # ifndef LL_SUPER_MAGIC
366 # define LL_SUPER_MAGIC 0x0BD00BD0
367 # endif
368 if (fsbuf.f_type == LL_SUPER_MAGIC) {
369 *fstype = ADIO_LUSTRE;
370 return;
371 }
372 #endif
373
374 # ifdef PAN_KERNEL_FS_CLIENT_SUPER_MAGIC
375 if (fsbuf.f_type == PAN_KERNEL_FS_CLIENT_SUPER_MAGIC) {
376 *fstype = ADIO_PANFS;
377 return;
378 }
379 # endif
380
381 # ifdef MOUNT_NFS
382 if (fsbuf.f_type == MOUNT_NFS) {
383 *fstype = ADIO_NFS;
384 return;
385 }
386 # endif
387
388 # ifdef MOUNT_PFS
389 if (fsbuf.f_type == MOUNT_PFS) {
390 *fstype = ADIO_PFS;
391 return;
392 }
393 # endif
394
395 # ifdef PVFS_SUPER_MAGIC
396 if (fsbuf.f_type == PVFS_SUPER_MAGIC) {
397 *fstype = ADIO_PVFS;
398 return;
399 }
400 # endif
401
402 # ifdef PVFS2_SUPER_MAGIC
403 if (fsbuf.f_type == PVFS2_SUPER_MAGIC) {
404 *fstype = ADIO_PVFS2;
405 return;
406 }
407 # endif
408
409 # ifdef XFS_SUPER_MAGIC
410 if (fsbuf.f_type == XFS_SUPER_MAGIC) {
411 *fstype = ADIO_XFS;
412 return;
413 }
414 # endif
415
416 # ifdef ROMIO_UFS
417
418 *fstype = ADIO_UFS;
419 return;
420 # endif
421
422 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
423 myname, __LINE__, MPI_ERR_NO_SUCH_FILE,
424 "**filename", "**filename %s", filename);
425
426 #endif
427
428 #ifdef ROMIO_HAVE_STRUCT_STAT_WITH_ST_FSTYPE
429
430 retry_cnt = 0;
431 do {
432 err = stat(filename, &sbuf);
433 } while (err && (errno == ESTALE) && retry_cnt++ < MAX_ESTALE_RETRY);
434
435 if (err) {
436 if(errno == ENOENT) {
437 char *dir;
438 ADIO_FileSysType_parentdir(filename, &dir);
439 err = stat(dir, &sbuf);
440 ADIOI_Free(dir);
441 }
442 else{
443 *error_code = ADIOI_Err_create_code(myname, filename, errno);
444 if(*error_code != MPI_SUCCESS) return;
445 }
446 }
447
448 if (err) {
449
450 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
451 myname, __LINE__, MPI_ERR_NO_SUCH_FILE,
452 "**filename", "**filename %s", filename);
453
454 return;
455 }
456 else {
457 if (!strcmp(sbuf.st_fstype, "nfs")) *fstype = ADIO_NFS;
458 else *fstype = ADIO_SFS;
459 }
460 #endif
461
462 #ifdef ROMIO_NTFS
463 ADIOI_UNREFERENCED_ARG(filename);
464 ADIOI_UNREFERENCED_ARG(error_code);
465 *fstype = ADIO_NTFS;
466 #elif defined(ROMIO_NFS)
467 *fstype = ADIO_NFS;
468 #elif defined(ROMIO_UFS)
469 *fstype = ADIO_UFS;
470 #else
471
472 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
473 myname, __LINE__, MPI_ERR_NO_SUCH_FILE,
474 "**filename", "**filename %s", filename);
475
476 #endif
477 }
478
479
480
481
482
483 static void ADIO_FileSysType_fncall_scalable(MPI_Comm comm, const char *filename, int * file_system, int * error_code)
484 {
485 int rank;
486 int buf[2];
487 MPI_Comm_rank(comm, &rank);
488
489 if (rank == 0) {
490 ADIO_FileSysType_fncall(filename, file_system, error_code);
491 buf[0] = *file_system;
492 buf[1] = *error_code;
493 }
494 MPI_Bcast(buf, 2, MPI_INT, 0, comm);
495 *file_system = buf[0];
496 *error_code = buf[1];
497 }
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517 static void ADIO_FileSysType_prefix(const char *filename, int *fstype, int *error_code)
518 {
519 static char myname[] = "ADIO_RESOLVEFILETYPE_PREFIX";
520 *error_code = MPI_SUCCESS;
521
522 if (!strncmp(filename, "pfs:", 4) || !strncmp(filename, "PFS:", 4)) {
523 *fstype = ADIO_PFS;
524 }
525 else if (!strncmp(filename, "piofs:", 6) || !strncmp(filename, "PIOFS:", 6)) {
526 *fstype = ADIO_PIOFS;
527 }
528 else if (!strncmp(filename, "ufs:", 4) || !strncmp(filename, "UFS:", 4)) {
529 *fstype = ADIO_UFS;
530 }
531 else if (!strncmp(filename, "nfs:", 4) || !strncmp(filename, "NFS:", 4)) {
532 *fstype = ADIO_NFS;
533 }
534 else if (!strncmp(filename, "panfs:", 6) || !strncmp(filename, "PANFS:", 6)) {
535 *fstype = ADIO_PANFS;
536 }
537 else if (!strncmp(filename, "hfs:", 4) || !strncmp(filename, "HFS:", 4)) {
538 *fstype = ADIO_HFS;
539 }
540 else if (!strncmp(filename, "xfs:", 4) || !strncmp(filename, "XFS:", 4)) {
541 *fstype = ADIO_XFS;
542 }
543 else if (!strncmp(filename, "sfs:", 4) || !strncmp(filename, "SFS:", 4)) {
544 *fstype = ADIO_SFS;
545 }
546 else if (!strncmp(filename, "pvfs:", 5) || !strncmp(filename, "PVFS:", 5)) {
547 *fstype = ADIO_PVFS;
548 }
549 else if (!strncmp(filename, "pvfs2:", 6)||!strncmp(filename, "PVFS2:", 6)) {
550 *fstype = ADIO_PVFS2;
551 }
552 else if (!strncmp(filename, "zoidfs:", 7)||
553 !strncmp(filename, "ZOIDFS:", 7)) {
554 *fstype = ADIO_ZOIDFS;
555 }
556 else if (!strncmp(filename, "testfs:", 7)
557 || !strncmp(filename, "TESTFS:", 7))
558 {
559 *fstype = ADIO_TESTFS;
560 }
561 else if (!strncmp(filename, "ftp:", 4)
562 || !strncmp(filename, "gsiftp:", 7))
563 {
564 *fstype = ADIO_GRIDFTP;
565 }
566 else if (!strncmp(filename, "lustre:", 7)
567 || !strncmp(filename, "LUSTRE:", 7))
568 {
569 *fstype = ADIO_LUSTRE;
570 }
571 else if (!strncmp(filename, "gpfs:", 5) || !strncmp(filename, "GPFS:", 5)) {
572 *fstype = ADIO_GPFS;
573 }
574 else {
575 #ifdef ROMIO_NTFS
576 *fstype = ADIO_NTFS;
577 #else
578 *fstype = 0;
579
580 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
581 myname, __LINE__, MPI_ERR_NO_SUCH_FILE,
582 "**filename", "**filename %s", filename);
583
584 #endif
585 }
586 }
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607 void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
608 ADIOI_Fns **ops, int *error_code)
609 {
610 int myerrcode, file_system, min_code, max_code;
611 char *tmp;
612 static char myname[] = "ADIO_RESOLVEFILETYPE";
613 char * p;
614
615 file_system = -1;
616 if (filename == NULL) {
617 *error_code = ADIOI_Err_create_code(myname, filename, ENOENT);
618 return;
619 }
620 tmp = strchr(filename, ':');
621 if (!tmp) {
622 int have_nfs_enabled=0;
623 *error_code = MPI_SUCCESS;
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642 #ifdef ROMIO_NFS
643 have_nfs_enabled=1;
644 #endif
645 if (!have_nfs_enabled) {
646 ADIO_FileSysType_fncall_scalable(comm, filename, &file_system, &myerrcode);
647 if (myerrcode != MPI_SUCCESS) {
648 *error_code = myerrcode;
649 return;
650 }
651 } else {
652 ADIO_FileSysType_fncall(filename, &file_system, &myerrcode);
653
654
655
656
657
658
659
660
661
662
663
664
665 MPI_Allreduce(&myerrcode, &max_code, 1, MPI_INT, MPI_MAX, comm);
666 if (max_code != MPI_SUCCESS) {
667 *error_code = max_code;
668 return;
669 }
670
671 MPI_Allreduce(&file_system, &min_code, 1, MPI_INT,
672 MPI_MIN, comm);
673 if (min_code == ADIO_NFS) file_system = ADIO_NFS;
674 }
675 }
676 else {
677
678
679
680
681
682 ADIO_FileSysType_prefix(filename, &file_system, &myerrcode);
683 if (myerrcode != MPI_SUCCESS) {
684 *error_code = myerrcode;
685 return;
686 }
687 }
688
689
690
691
692
693
694
695
696 p = getenv("ROMIO_FSTYPE_FORCE");
697 if (p != NULL) {
698 ADIO_FileSysType_prefix(p, &file_system, &myerrcode);
699 if (myerrcode != MPI_SUCCESS) {
700 *error_code = myerrcode;
701 return;
702 }
703 }
704
705
706 if (file_system == ADIO_PFS) {
707 #ifndef ROMIO_PFS
708 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
709 myname, __LINE__, MPI_ERR_IO,
710 "**iofstypeunsupported", 0);
711 return;
712 #else
713 *ops = &ADIO_PFS_operations;
714 #endif
715 }
716 if (file_system == ADIO_PIOFS) {
717 #ifndef ROMIO_PIOFS
718 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
719 myname, __LINE__, MPI_ERR_IO,
720 "**iofstypeunsupported", 0);
721 return;
722 #else
723 *ops = &ADIO_PIOFS_operations;
724 #endif
725 }
726 if (file_system == ADIO_UFS) {
727 #ifndef ROMIO_UFS
728 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
729 myname, __LINE__, MPI_ERR_IO,
730 "**iofstypeunsupported", 0);
731 return;
732 #else
733 *ops = &ADIO_UFS_operations;
734 #endif
735 }
736 if (file_system == ADIO_NFS) {
737 #ifndef ROMIO_NFS
738 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
739 myname, __LINE__, MPI_ERR_IO,
740 "**iofstypeunsupported", 0);
741 return;
742 #else
743 *ops = &ADIO_NFS_operations;
744 #endif
745 }
746 if (file_system == ADIO_PANFS) {
747 #ifndef ROMIO_PANFS
748 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
749 myname, __LINE__, MPI_ERR_IO,
750 "**iofstypeunsupported", 0);
751 return;
752 #else
753 *ops = &ADIO_PANFS_operations;
754 #endif
755 }
756 if (file_system == ADIO_HFS) {
757 #ifndef ROMIO_HFS
758 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
759 myname, __LINE__, MPI_ERR_IO,
760 "**iofstypeunsupported", 0);
761 return;
762 #else
763 *ops = &ADIO_HFS_operations;
764 #endif
765 }
766 if (file_system == ADIO_XFS) {
767 #ifndef ROMIO_XFS
768 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
769 myname, __LINE__, MPI_ERR_IO,
770 "**iofstypeunsupported", 0);
771 return;
772 #else
773 *ops = &ADIO_XFS_operations;
774 #endif
775 }
776 if (file_system == ADIO_SFS) {
777 #ifndef ROMIO_SFS
778 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
779 myname, __LINE__, MPI_ERR_IO,
780 "**iofstypeunsupported", 0);
781 return;
782 #else
783 *ops = &ADIO_SFS_operations;
784 #endif
785 }
786 if (file_system == ADIO_PVFS) {
787 #ifndef ROMIO_PVFS
788 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
789 myname, __LINE__, MPI_ERR_IO,
790 "**iofstypeunsupported", 0);
791 return;
792 #else
793 *ops = &ADIO_PVFS_operations;
794 #endif
795 }
796 if (file_system == ADIO_PVFS2) {
797 #ifndef ROMIO_PVFS2
798 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
799 myname, __LINE__, MPI_ERR_IO,
800 "**iofstypeunsupported", 0);
801 return;
802 #else
803 *ops = &ADIO_PVFS2_operations;
804 #endif
805 }
806 if (file_system == ADIO_NTFS) {
807 #ifndef ROMIO_NTFS
808 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
809 myname, __LINE__, MPI_ERR_IO,
810 "**iofstypeunsupported", 0);
811 return;
812 #else
813 *ops = &ADIO_NTFS_operations;
814 #endif
815 }
816 if (file_system == ADIO_TESTFS) {
817 #ifndef ROMIO_TESTFS
818 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
819 myname, __LINE__, MPI_ERR_IO,
820 "**iofstypeunsupported", 0);
821 return;
822 #else
823 *ops = &ADIO_TESTFS_operations;
824 #endif
825 }
826
827 if (file_system == ADIO_GPFS) {
828 #ifndef ROMIO_GPFS
829 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
830 myname, __LINE__, MPI_ERR_IO,
831 "**iofstypeunsupported", 0);
832 return;
833 #else
834 *ops = &ADIO_GPFS_operations;
835 #endif
836 }
837
838 if (file_system == ADIO_GRIDFTP) {
839 #ifndef ROMIO_GRIDFTP
840 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
841 myname, __LINE__, MPI_ERR_IO,
842 "**iofstypeunsupported", 0);
843 return;
844 #else
845 *ops = &ADIO_GRIDFTP_operations;
846 #endif
847 }
848 if (file_system == ADIO_LUSTRE) {
849 #ifndef ROMIO_LUSTRE
850 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**iofstypeunsupported", 0);
851 return;
852 #else
853 *ops = &ADIO_LUSTRE_operations;
854 #endif
855 }
856 if (file_system == ADIO_ZOIDFS) {
857 #ifndef ROMIO_ZOIDFS
858 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
859 myname, __LINE__, MPI_ERR_IO,
860 "**iofstypeunsupported", 0);
861 return;
862 #else
863 *ops = &ADIO_ZOIDFS_operations;
864 #endif
865 }
866 *error_code = MPI_SUCCESS;
867 *fstype = file_system;
868 return;
869 }
870
871
872