This source file includes following definitions.
- qnx4_count_free_blocks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <linux/buffer_head.h>
18 #include <linux/bitops.h>
19 #include "qnx4.h"
20
21 unsigned long qnx4_count_free_blocks(struct super_block *sb)
22 {
23 int start = le32_to_cpu(qnx4_sb(sb)->BitMap->di_first_xtnt.xtnt_blk) - 1;
24 int total = 0;
25 int total_free = 0;
26 int offset = 0;
27 int size = le32_to_cpu(qnx4_sb(sb)->BitMap->di_size);
28 struct buffer_head *bh;
29
30 while (total < size) {
31 int bytes = min(size - total, QNX4_BLOCK_SIZE);
32
33 if ((bh = sb_bread(sb, start + offset)) == NULL) {
34 printk(KERN_ERR "qnx4: I/O error in counting free blocks\n");
35 break;
36 }
37 total_free += bytes * BITS_PER_BYTE -
38 memweight(bh->b_data, bytes);
39 brelse(bh);
40 total += bytes;
41 offset++;
42 }
43
44 return total_free;
45 }