diff -r romio.1.1/adio/ad_lustre/ad_lustre_aggregate.c romio/adio/ad_lustre/ad_lustre_aggregate.c 58c58 < * avail_cb_nodes should divide (stripe_count*CO) exactly, --- > * avail_cb_nodes should divide stripe_count exactly, 62,75c62,63 < if (avail_cb_nodes == CO_nodes) { < do { < /* find the divisor of CO_nodes */ < divisor = 1; < do { < divisor ++; < } while (CO_nodes % divisor); < CO_nodes = CO_nodes / divisor; < /* if stripe_count*CO is a prime number, change nothing */ < if ((CO_nodes <= avail_cb_nodes) && (CO_nodes != 1)) { < avail_cb_nodes = CO_nodes; < break; < } < } while (CO_nodes != 1); --- > while (stripe_count % avail_cb_nodes) { > avail_cb_nodes--; 123c111 < int *len_list, int contig_access_count, --- > ADIO_Offset *len_list, int contig_access_count, 154c142 < buf_idx[i] = -1; --- > buf_idx[i] = 0; 218,219d205 < if (buf_idx[proc] == -1) < buf_idx[proc] = (int) curr_idx; 240,241d225 < if (buf_idx[proc] == -1) < buf_idx[proc] = (int) curr_idx; 276c260 < int *len_list, int nprocs) --- > ADIO_Offset *len_list, int nprocs) diff -r romio.1.1/adio/ad_lustre/ad_lustre.h romio/adio/ad_lustre/ad_lustre.h 72a73,84 > > int ADIOI_LUSTRE_Docollect(ADIO_File fd, int contig_access_count, ADIO_Offset *len_list, int nprocs); > void ADIOI_LUSTRE_Get_striping_info(ADIO_File fd, int ** striping_info_ptr, int mode); > void ADIOI_LUSTRE_Calc_my_req(ADIO_File fd, ADIO_Offset *offset_list, > ADIO_Offset *len_list, int contig_access_count, > int *striping_info, int nprocs, > int *count_my_req_procs_ptr, > int **count_my_req_per_proc_ptr, > ADIOI_Access ** my_req_ptr, > int **buf_idx_ptr); > int ADIOI_LUSTRE_Calc_aggregator(ADIO_File fd, ADIO_Offset off, > ADIO_Offset *len, int *striping_info); diff -r romio.1.1/adio/ad_lustre/ad_lustre_wrcoll.c romio/adio/ad_lustre/ad_lustre_wrcoll.c 21c21 < int *len_list, --- > ADIO_Offset *len_list, 29c29 < int *len_list, int *send_size, --- > ADIO_Offset *len_list, int *send_size, 42c42 < int *len_list, int *send_size, --- > ADIO_Offset *len_list, int *send_size, 84,85c84,85 < ADIO_Offset *offset_list = NULL, *st_offsets = NULL, *end_offsets = NULL; < int *buf_idx = NULL, *len_list = NULL, *striping_info = NULL; --- > ADIO_Offset *offset_list = NULL, *st_offsets = NULL, *end_offsets = NULL, *len_list = NULL; > int *buf_idx = NULL, *striping_info = NULL; 286c286 < int *len_list, int contig_access_count, --- > ADIO_Offset *len_list, int contig_access_count, 575c575 < int *len_list, int *send_size, --- > ADIO_Offset *len_list, int *send_size, 715c715 < MPI_Isend(((char *) buf) + buf_idx[i], send_size[i], --- > MPI_Isend(((char *) buf) + buf_idx[0], send_size[i], 719c719 < buf_idx[i] += send_size[i]; --- > buf_idx[0]+=send_size[i]; 841c841 < int *len_list, int *send_size, --- > ADIO_Offset *len_list, int *send_size, diff -r romio.1.1/adio/ad_lustre/ad_lustre_wrstr.c romio/adio/ad_lustre/ad_lustre_wrstr.c 213c213,214 < ADIOI_BUFFERED_WRITE_WITHOUT_READ --- > memcpy(writebuf + req_off - writebuf_off, (char *)buf + userbuf_off, req_len); > /* ADIOI_BUFFERED_WRITE_WITHOUT_READ This macro must be adapted to support big writes */ diff -r romio.1.1/adio/common/ad_fstype.c romio/adio/common/ad_fstype.c 350,352d349 < #if 0 < /* disable lustre auto-detection until we figure out why collective i/o < * broken */ 360d356 < #endif