Blame view

fs/qnx4/bitmap.c 1.08 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  // SPDX-License-Identifier: GPL-2.0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  /*
   * QNX4 file system, Linux implementation.
   *
   * Version : 0.2.1
   *
   * Using parts of the xiafs filesystem.
   *
   * History :
   *
   * 28-05-1998 by Richard Frowijn : first release.
   * 20-06-1998 by Frank Denis : basic optimisations.
   * 25-06-1998 by Frank Denis : qnx4_is_free, qnx4_set_bitmap, qnx4_bmap .
   * 28-06-1998 by Frank Denis : qnx4_free_inode (to be fixed) .
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
  #include <linux/buffer_head.h>
  #include <linux/bitops.h>
964f53696   Al Viro   fs/qnx4: sanitize...
18
  #include "qnx4.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
21
22
23
24
25
26
27
28
29
  unsigned long qnx4_count_free_blocks(struct super_block *sb)
  {
  	int start = le32_to_cpu(qnx4_sb(sb)->BitMap->di_first_xtnt.xtnt_blk) - 1;
  	int total = 0;
  	int total_free = 0;
  	int offset = 0;
  	int size = le32_to_cpu(qnx4_sb(sb)->BitMap->di_size);
  	struct buffer_head *bh;
  
  	while (total < size) {
9b58f6d4a   Akinobu Mita   qnx4fs: use memwe...
30
  		int bytes = min(size - total, QNX4_BLOCK_SIZE);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
  		if ((bh = sb_bread(sb, start + offset)) == NULL) {
891ddb95d   Anders Larsen   qnx4fs: add missi...
32
33
  			printk(KERN_ERR "qnx4: I/O error in counting free blocks
  ");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34
35
  			break;
  		}
9b58f6d4a   Akinobu Mita   qnx4fs: use memwe...
36
37
  		total_free += bytes * BITS_PER_BYTE -
  				memweight(bh->b_data, bytes);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
38
  		brelse(bh);
9b58f6d4a   Akinobu Mita   qnx4fs: use memwe...
39
  		total += bytes;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
41
42
43
44
  		offset++;
  	}
  
  	return total_free;
  }