summaryrefslogtreecommitdiff
path: root/harness/cases/8.t
diff options
context:
space:
mode:
Diffstat (limited to 'harness/cases/8.t')
-rw-r--r--harness/cases/8.t43
1 files changed, 11 insertions, 32 deletions
diff --git a/harness/cases/8.t b/harness/cases/8.t
index 8a3d83e..e59199f 100644
--- a/harness/cases/8.t
+++ b/harness/cases/8.t
@@ -2,44 +2,23 @@
- Ditto for the above three tests at the offset maximum (largest
possible ext2/3 file size.) (8.t)
*/
-#include <sys/vfs.h>
-
-#define EXT2_OLD_SUPER_MAGIC 0xEF51
-#define EXT2_SUPER_MAGIC 0xEF53
+#include <sys/types.h>
+#include <unistd.h>
long long get_fs_limit(int fd)
{
- struct statfs s;
- int res;
- long long lim = 0;
-
- res = fstatfs(fd, &s); assert(res == 0);
+ long long min = 0, max = 9223372036854775807LL;
+ char c = 0;
- switch(s.f_type) {
- case EXT2_OLD_SUPER_MAGIC:
- case EXT2_SUPER_MAGIC:
-#if 0
- {
- long long tmp;
- tmp = s.f_bsize / 4;
- /* 12 direct + indirect block + dind + tind */
- lim = 12 + tmp + tmp * tmp + tmp * tmp * tmp;
- lim *= s.f_bsize;
- printf("limit(%ld) = %Ld\n", (long)s.f_bsize, lim);
- }
-#endif
- switch(s.f_bsize) {
- case 4096: lim = 2199023251456; break;
- default:
- printf("unknown ext2 blocksize %ld\n", (long)s.f_bsize);
- exit(3);
+ while (max - min > 1) {
+ if (pwrite64(fd, &c, 1, (min + max) / 2) == -1)
+ max = (min + max) / 2;
+ else {
+ ftruncate(fd, 0);
+ min = (min + max) / 2;
}
- break;
- default:
- printf("unknown filesystem 0x%08lx\n", (long)s.f_type);
- exit(3);
}
- return lim;
+ return max;
}
#define SET_RLIMIT(x) do ; while (0)