Hi!
> +/* filesystems whose subdir limit is less than MAX_SANE_HARD_LINKS */
> +const long fs_type_filter[] = {
> + 0xEF51, /* EXT2_OLD_SUPER_MAGIC */
> + 0xEF53, /* EXT2/3/4_SUPER_MAGIC, cannot filter ext4 out */
> + 0x137F, 0x138F, /* MINIX_SUPER_MAGIC, MINIX_SUPER_MAGIC2 */
> + 0x2468, 0x2478, /* MINIX2_SUPER_MAGIC, MINIX2_SUPER_MAGIC2 */
> + 0x4d5a, /* MINIX3_SUPER_MAGIC */
> + 0x15013346, /* UDF_SUPER_MAGIC */
> + 0x012FF7B6, 0x012FF7B5, /* SYSV2_SUPER_MAGIC, SYSV4_SUPER_MAGIC */
> + 0x00011954, 0x19540119, /* UFS_MAGIC, UFS2_MAGIC */
> + 0xF2F52010, /* F2FS_SUPER_MAGIC */
> + 0x3434, /* NILFS_SUPER_MAGIC */
> + 0x5DF5 /* EXOFS_SUPER_MAGIC */
> +};
We have most of these defined in include/tst_fs_type.h, make use of
them. And if there are any missing, add them (in a separate patch).
Also it may be better to add a blacklist rather than whitelist. I.e.
skip tmpfs, ramfs, etc.
> int tst_fs_fill_hardlinks(void (*cleanup) (void), const char *dir)
> {
> unsigned int i, j;
> @@ -88,9 +104,10 @@ max_hardlinks_cleanup:
>
> int tst_fs_fill_subdirs(void (*cleanup) (void), const char *dir)
> {
> - unsigned int i, j;
> + unsigned int i, j, filter_size;
> char dirname[PATH_MAX];
> struct stat s;
> + struct statfs fs;
>
> if (stat(dir, &s) == -1 && errno == ENOENT)
> SAFE_MKDIR(cleanup, dir, 0744);
> @@ -99,6 +116,27 @@ int tst_fs_fill_subdirs(void (*cleanup) (void), const
> char *dir)
> if (!S_ISDIR(s.st_mode))
> tst_brkm(TBROK, cleanup, "%s is not directory", dir);
>
> + /*
> + * for current kernel, hardlink limit is not availiable for all
> + * filesystem. Only test if on ext2 and ext3.
> + */
> + if (statfs(dir, &fs) < 0) {
> + tst_resm(TINFO | TERRNO, "cannot detect filesystem type "
> + "for %s", dir);
> + return 0;
> + }
> +
> + filter_size = (int) (sizeof(fs_type_filter) / sizeof(long));
Use ARRAY_SIZE();
> + for (i = 0; i < filter_size; i++) {
> + if (fs.f_type == fs_type_filter[i])
> + break;
> + }
> + if (i == filter_size) {
> + tst_resm(TINFO, "subdir limit is not availiable for "
> + "filesystem 0x%lx", (unsigned long) fs.f_type);
> + return -1;
> + }
Why overcomplicate the code, just return -1 from the if () inside the
loop. Also we have tst_fs_type_name().
> for (i = 0; i < MAX_SANE_HARD_LINKS; i++) {
> sprintf(dirname, "%s/testdir%d", dir, i);
>
> @@ -134,7 +172,8 @@ int tst_fs_fill_subdirs(void (*cleanup) (void), const
> char *dir)
>
> }
>
> - tst_resm(TINFO, "Failed reach the subdirs limit");
> + tst_resm(TINFO, "Failed reach the subdirs limit on filesystem 0x%lx",
> + fs.f_type);
Again tst_fs_type_name();
> max_subdirs_cleanup:
> for (j = 0; j < i; j++) {
> --
> 1.8.3.4
>
--
Cyril Hrubis
[email protected]
------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list