Christof forgot to mention one detail of this error:
The I/O erorr or freezing of the client happens only if you try to copy the file
after it has been created by the test program!
Hartmut
Christof Hanke wrote:
Hello List,
together with a user and Hartmut, I guess I found a bug in the function afs_TruncateAllSegments() in afs_segments.c. Basically, the pointers (struct dcache *)->validPos and (struct dcache *)->f.chunkBytes are not kept in sync.
Here the patch :
diff -ur /usr/src/openafs-1.3.71/src/afs/afs_segments.c afs_segments.c --- /usr/src/openafs-1.3.71/src/afs/afs_segments.c 2004-08-25 09:09:32.000000000 +0200 +++ afs_segments.c 2004-09-10 12:18:08.000000000 +0200 @@ -1041,6 +1041,12 @@ afs_CFileTruncate(tfile, newSize); afs_CFileClose(tfile); afs_AdjustSize(tdc, newSize); + if (alen < tdc->validPos) { + if (alen < AFS_CHUNKTOBASE(tdc->f.chunk)) + tdc->validPos = 0; + else + tdc->validPos = alen; + } ConvertWToSLock(&tdc->lock); } ReleaseSharedLock(&tdc->lock); My guess is that the same bug is in the 1.2.x-series as well.
The consequences of this bug can be tested with this program (you have to set the macro !) :
On rh9 or suse 9.0 on a single CPU machine it gives an i/o-error,
a SMP machine freezes. (At least for me)
#include <stdio.h> #include <unistd.h> #include <sys/types.h>
#define FILE_IN_AFS "ABSOLUTE_PATH_TO_AFS_FILE"
int main() { FILE *fp; int i,fd; char fname[]= FILE_IN_AFS; char pr_string[]=" Hallo\n"; off_t size=0; fp =fopen(fname,"w+"); for (i=0;i < 1000;i++) fprintf(fp," Hallo\n"); fclose(fp); fp =fopen(fname,"a"); fd=fileno(fp); rewind(fp); for (i=0;i < 50;i++) size+=sizeof(pr_string); fprintf(fp,pr_string); fflush(fp); ftruncate(fd,size); fclose(fp); return 0; }
I hope that helps.
Christof Hanke
----------------------------------------------------------------- Christof Hanke e-mail [EMAIL PROTECTED] RZG (Rechenzentrum Garching) phone +49-89-3299-1788 Computing Center of the Max-Planck-Gesellschaft (MPG) and the Institut fïr Plasmaphysik (IPP)
_______________________________________________ OpenAFS-devel mailing list [EMAIL PROTECTED] https://lists.openafs.org/mailman/listinfo/openafs-devel
--
-----------------------------------------------------------------
Hartmut Reuter e-mail [EMAIL PROTECTED]
phone +49-89-3299-1328
RZG (Rechenzentrum Garching) fax +49-89-3299-1301
Computing Center of the Max-Planck-Gesellschaft (MPG) and the
Institut fuer Plasmaphysik (IPP)
-----------------------------------------------------------------_______________________________________________ OpenAFS-devel mailing list [EMAIL PROTECTED] https://lists.openafs.org/mailman/listinfo/openafs-devel
