@cryptotaxi247 / netdata-1 / commits / 0ac8f7c4f

Fix Btrfs unallocated space accounting (#14824)

Ivan Shapovalov committed Mar 30, 2023 at 16:17 UTC 0ac8f7c4f0278cdeac5172ee715d0c590a947f3a
1 file changed +5 -23
collectors/proc.plugin/sys_fs_btrfs.c
+5 -23
@@ -10,9 +10,7 @@ typedef struct btrfs_disk {
10 int exists;
11
12 char *size_filename;
13 - char *hw_sector_size_filename;
13 unsigned long long size;
15 - unsigned long long hw_sector_size;
14
15 struct btrfs_disk *next;
16 } BTRFS_DISK;
@@ -85,7 +83,6 @@ static BTRFS_NODE *nodes = NULL;
83 static inline void btrfs_free_disk(BTRFS_DISK *d) {
84 freez(d->name);
85 freez(d->size_filename);
88 - freez(d->hw_sector_size_filename);
86 freez(d);
87 }
88
@@ -175,19 +172,6 @@ static inline int find_btrfs_disks(BTRFS_NODE *node, const char *path) {
172 snprintfz(filename, FILENAME_MAX, "%s/%s/size", path, de->d_name);
173 d->size_filename = strdupz(filename);
174
178 - // for bcache
179 - snprintfz(filename, FILENAME_MAX, "%s/%s/bcache/../queue/hw_sector_size", path, de->d_name);
180 - struct stat sb;
181 - if(stat(filename, &sb) == -1) {
182 - // for disks
183 - snprintfz(filename, FILENAME_MAX, "%s/%s/queue/hw_sector_size", path, de->d_name);
184 - if(stat(filename, &sb) == -1)
185 - // for partitions
186 - snprintfz(filename, FILENAME_MAX, "%s/%s/../queue/hw_sector_size", path, de->d_name);
187 - }
188 -
189 - d->hw_sector_size_filename = strdupz(filename);
190 -
175 // link it
176 d->next = node->disks;
177 node->disks = d;
@@ -205,13 +189,11 @@ static inline int find_btrfs_disks(BTRFS_NODE *node, const char *path) {
189 continue;
190 }
191
208 - if(read_single_number_file(d->hw_sector_size_filename, &d->hw_sector_size) != 0) {
209 - collector_error("BTRFS: failed to read '%s'", d->hw_sector_size_filename);
210 - d->exists = 0;
211 - continue;
212 - }
213 -
214 - node->all_disks_total += d->size * d->hw_sector_size;
192 + // /sys/block/<name>/size is in fixed-size sectors of 512 bytes
193 + // https://github.com/torvalds/linux/blob/v6.2/block/genhd.c#L946-L950
194 + // https://github.com/torvalds/linux/blob/v6.2/include/linux/types.h#L120-L121
195 + // (also see #3481, #3483)
196 + node->all_disks_total += d->size * 512;
197 }
198 closedir(dir);
199