#!/usr/bin/env python3
"""Populate a subvolume so its fs tree (nodesize 4096) gets tall and wide.

Each file: DATA_KB KiB of data (regular extent if mounted with max_inline=0)
plus one large user xattr, so roughly one file per 4 KiB leaf.
Usage: mkfiles.py <dir> <nfiles> [xattr_bytes] [data_kb]
"""
import os
import sys

top = sys.argv[1]
nfiles = int(sys.argv[2])
xsz = int(sys.argv[3]) if len(sys.argv) > 3 else 3000
data_kb = int(sys.argv[4]) if len(sys.argv) > 4 else 4

pad = b"x" * xsz
data = b"d" * (data_kb * 1024)
per_dir = 1000
for i in range(nfiles):
    d = os.path.join(top, "d%04d" % (i // per_dir))
    if i % per_dir == 0:
        os.mkdir(d)
    p = os.path.join(d, "f%07d" % i)
    with open(p, "wb") as f:
        if data:
            f.write(data)
    os.setxattr(p, b"user.pad", pad)
print("created %d files in %s" % (nfiles, top))
