From: Martin R. <mr...@us...> - 2005-02-25 15:50:01
|
Update of /cvsroot/ltp/ltp/testcases/kernel/fs/doio In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15253 Modified Files: growfiles.c Log Message: Fix for defect 14136, growfiles expanding a file past the 2G limit on ext2. Index: growfiles.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/fs/doio/growfiles.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** growfiles.c 22 Nov 2004 17:13:21 -0000 1.10 --- growfiles.c 25 Feb 2005 15:49:37 -0000 1.11 *************** *** 376,379 **** --- 376,383 ---- int fd; /* file descriptor */ int stop = 0; /* loop stopper if set */ + + long unsigned curr_size = 0; /* BUG:14136 (keep track of file size) */ + const long unsigned ext2_limit = 2147483647; /* BUG:14136 (2GB ext2 filesize limit) */ + int tmp; char chr; *************** *** 381,385 **** int pre_alloc_space = 0; #ifndef linux ! int total_grow_value; /* used in pre-allocations */ #endif int backgrnd = 1; /* return control to user */ --- 385,389 ---- int pre_alloc_space = 0; #ifndef linux ! long total_grow_value; /* used in pre-allocations */ #endif int backgrnd = 1; /* return control to user */ *************** *** 1380,1384 **** } if ( Debug > 1 ) { ! printf("%s: %d DEBUG2 %s/%d: pre_allocated %d for file %s\n", Progname, Pid, __FILE__, __LINE__, total_grow_value, filename); } --- 1384,1388 ---- } if ( Debug > 1 ) { ! printf("%s: %d DEBUG2 %s/%d: pre_allocated %ld for file %s\n", Progname, Pid, __FILE__, __LINE__, total_grow_value, filename); } *************** *** 1397,1401 **** */ ! if (growfile(fd, filename, grow_incr, Buffer) != 0 ) { handle_error(); lkfile(fd, LOCK_UN, LKLVL1); /* release lock */ --- 1401,1414 ---- */ ! /* BUG:14136 (don't go past ext2's filesize limit) */ ! if (curr_size+grow_incr>=ext2_limit) { ! lkfile(fd, LOCK_UN, LKLVL1); /* release lock */ ! close(fd); ! sprintf(reason, "Reached %ld filesize which is almost %ld limit.",curr_size, ext2_limit); ! stop=1; ! continue; ! } ! ! if (growfile(fd, filename, grow_incr, Buffer, &curr_size) != 0 ) { /* BUG:14136 */ handle_error(); lkfile(fd, LOCK_UN, LKLVL1); /* release lock */ *************** *** 1509,1512 **** --- 1522,1526 ---- exit(0); + return 0; /* to keep compiler happy */ } *************** *** 1833,1841 **** ***********************************************************************/ int ! growfile(fd, file, grow_incr, buf) int fd; char *file; int grow_incr; char *buf; { off_t noffset; --- 1847,1856 ---- ***********************************************************************/ int ! growfile(fd, file, grow_incr, buf, curr_size_ptr) /* BUG:14136 */ int fd; char *file; int grow_incr; char *buf; + long *curr_size_ptr; /* BUG:14136 */ { off_t noffset; *************** *** 2106,2109 **** --- 2121,2125 ---- #endif } + *curr_size_ptr=tmp; /* BUG:14136 */ lkfile(fd, LOCK_UN, LKLVL0); *************** *** 2806,2812 **** ***********************************************************************/ int ! pre_alloc(fd, size) ! int fd; ! int size; { --- 2822,2826 ---- ***********************************************************************/ int ! pre_alloc(int fd, long size) { |