| version 1.8 | version 1.9 |
|---|
| |
| /*************************************************************************** | /*************************************************************************** |
| *cr | *cr |
| *cr (C) Copyright 1995-2009 The Board of Trustees of the | *cr (C) Copyright 1995-2016 The Board of Trustees of the |
| *cr University of Illinois | *cr University of Illinois |
| *cr All Rights Reserved | *cr All Rights Reserved |
| *cr | *cr |
| |
| * | * |
| * $RCSfile: fastio.h,v $ | * $RCSfile: fastio.h,v $ |
| * $Author: jim $ $Locker: $ $State: Exp $ | * $Author: jim $ $Locker: $ $State: Exp $ |
| * $Revision: 1.8 $ $Date: 2013/09/30 22:02:44 $ | * $Revision: 1.9 $ $Date: 2017/03/29 21:38:15 $ |
| * | * |
| *************************************************************************** | *************************************************************************** |
| * DESCRIPTION: | * DESCRIPTION: |
| |
| * For large structures, e.g. 240M-atoms or larger, we have to use a loop | * For large structures, e.g. 240M-atoms or larger, we have to use a loop |
| * to continue writing the memory buffer until completion. | * to continue writing the memory buffer until completion. |
| */ | */ |
| | int writecalls=0; |
| for (i=0; i<nitems; i++) { | for (i=0; i<nitems; i++) { |
| fio_size_t szleft = size; | fio_size_t szleft = size; |
| fio_size_t rc = 0; | fio_size_t rc = 0; |
| for (szleft=size; szleft > 0; szleft -= rc) { | for (szleft=size; szleft > 0; szleft -= rc) { |
| rc = write(fd, ((char*) ptr)+(size-szleft), szleft); | fio_size_t writesz = szleft; |
| // if (rc != szleft) { | |
| // printf("fio_fwrite(): rc %ld sz: %ld\n", rc, szleft); | #if 0 |
| // } | /* On some kernel versions write calls beyond 2GB may not do */ |
| | /* a partial write and may just return an error immediately. */ |
| | /* Clamp maximum write size to 1GB per write call. */ |
| | if (writesz > (1024L * 1024L * 1024L)) |
| | writesz = (1024L * 1024L * 1024L); |
| | #endif |
| | |
| | writecalls++; |
| | rc = write(fd, ((char*) ptr)+(size-szleft), writesz); |
| if (rc < 0) { | if (rc < 0) { |
| printf("fio_fwrite(): rc %ld sz: %ld\n", rc, size); | printf("fio_fwrite(): rc %ld sz: %ld szleft: %ld calls: %d\n", |
| | rc, size, szleft, writecalls); |
| perror(" perror fio_fwrite(): "); | perror(" perror fio_fwrite(): "); |
| return cnt; | return cnt; |
| } | } |