summaryrefslogtreecommitdiff
path: root/harness/cases/8.t
blob: 8a3d83ec943de7cfa2b04818c2248487429ac077 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* 8.t
- 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

long long get_fs_limit(int fd)
{
	struct statfs s;
	int res;
	long long lim = 0;

	res = fstatfs(fd, &s);		assert(res == 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);
		}
		break;
	default:
		printf("unknown filesystem 0x%08lx\n", (long)s.f_type);
		exit(3);
	}
	return lim;
}

#define SET_RLIMIT(x)	do ; while (0)
#define LIMIT		get_fs_limit(rwfd)
#define FILENAME	"testdir.ext2/rwfile"

#include "common-7-8.h"