-:    0:Source:/home/MPI/testing/mpich2/mpich2/src/mpi/romio/adio/ad_nfs/ad_nfs_setsh.c
        -:    0:Graph:ad_nfs_setsh.gcno
        -:    0:Data:ad_nfs_setsh.gcda
        -:    0:Runs:623
        -:    0:Programs:173
        -:    1:/* -*- Mode: C; c-basic-offset:4 ; -*- */
        -:    2:/* 
        -:    3: *
        -:    4: *   Copyright (C) 1997 University of Chicago. 
        -:    5: *   See COPYRIGHT notice in top-level directory.
        -:    6: */
        -:    7:
        -:    8:#include "ad_nfs.h"
        -:    9:
        -:   10:/* set the shared file pointer to "offset" etypes relative to the current 
        -:   11:   view */
        -:   12:
        -:   13:/*
        -:   14:This looks very similar to ADIOI_GEN_Set_shared_fp, except this 
        -:   15:function avoids locking the file twice.  The generic version does
        -:   16:
        -:   17:Write lock
        -:   18:ADIO_WriteContig
        -:   19:Unlock
        -:   20:
        -:   21:For NFS, ADIOI_NFS_WriteContig does a lock before writing to disable
        -:   22:caching. To avoid the lock being called twice, this version for NFS does
        -:   23:
        -:   24:Write lock
        -:   25:Lseek
        -:   26:Write
        -:   27:Unlock 
        -:   28:
        -:   29:*/
        -:   30:
        -:   31:void ADIOI_NFS_Set_shared_fp(ADIO_File fd, ADIO_Offset offset, int *error_code)
    #####:   32:{
        -:   33:    int err;
        -:   34:    MPI_Comm dupcommself;
        -:   35:    static char myname[] = "ADIOI_NFS_SET_SHARED_FP";
        -:   36:
    #####:   37:    if (fd->shared_fp_fd == ADIO_FILE_NULL) {
    #####:   38:	MPI_Comm_dup(MPI_COMM_SELF, &dupcommself);
    #####:   39:	fd->shared_fp_fd = ADIO_Open(MPI_COMM_SELF, dupcommself,
        -:   40:				     fd->shared_fp_fname, 
        -:   41:				     fd->file_system, fd->fns,
        -:   42:				     ADIO_CREATE | ADIO_RDWR | ADIO_DELETE_ON_CLOSE, 
        -:   43:				     0, MPI_BYTE, MPI_BYTE, MPI_INFO_NULL, 
        -:   44:				     ADIO_PERM_NULL, error_code);
        -:   45:    }
        -:   46:
    #####:   47:    if (*error_code != MPI_SUCCESS) return;
        -:   48:
    #####:   49:    ADIOI_WRITE_LOCK(fd->shared_fp_fd, 0, SEEK_SET, sizeof(ADIO_Offset));
        -:   50:#ifdef ADIOI_MPE_LOGGING
        -:   51:    MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
        -:   52:#endif
    #####:   53:    lseek(fd->shared_fp_fd->fd_sys, 0, SEEK_SET);
        -:   54:#ifdef ADIOI_MPE_LOGGING
        -:   55:    MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
        -:   56:#endif
        -:   57:#ifdef ADIOI_MPE_LOGGING
        -:   58:    MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
        -:   59:#endif
    #####:   60:    err = write(fd->shared_fp_fd->fd_sys, &offset, sizeof(ADIO_Offset));
        -:   61:#ifdef ADIOI_MPE_LOGGING
        -:   62:    MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
        -:   63:#endif
    #####:   64:    ADIOI_UNLOCK(fd->shared_fp_fd, 0, SEEK_SET, sizeof(ADIO_Offset));
        -:   65:
    #####:   66:    if (err == -1) {
    #####:   67:	*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
        -:   68:					   myname, __LINE__, MPI_ERR_IO,
        -:   69:					   "**io",
        -:   70:					   "**io %s", strerror(errno));
        -:   71:    }
    #####:   72:    else *error_code = MPI_SUCCESS;
        -:   73:}
        -:   74: