13
13
14
14
#define F2FS_SUPER_OFFSET 1024 /* byte-size offset */
15
15
#define F2FS_MIN_LOG_SECTOR_SIZE 9 /* 9 bits for 512 bytes */
16
- #define F2FS_MAX_LOG_SECTOR_SIZE 12 /* 12 bits for 4096 bytes */
17
- #define F2FS_LOG_SECTORS_PER_BLOCK 3 /* log number for sector/blk */
18
- #define F2FS_BLKSIZE 4096 /* support only 4KB block */
19
- #define F2FS_BLKSIZE_BITS 12 /* bits for F2FS_BLKSIZE */
16
+ #define F2FS_MAX_LOG_SECTOR_SIZE PAGE_SHIFT /* Max is Block Size */
17
+ #define F2FS_LOG_SECTORS_PER_BLOCK (PAGE_SHIFT - 9) /* log number for sector/blk */
18
+ #define F2FS_BLKSIZE PAGE_SIZE /* support only block == page */
19
+ #define F2FS_BLKSIZE_BITS PAGE_SHIFT /* bits for F2FS_BLKSIZE */
20
20
#define F2FS_MAX_EXTENSION 64 /* # of extension entries */
21
21
#define F2FS_EXTENSION_LEN 8 /* max size of extension */
22
22
#define F2FS_BLK_ALIGN (x ) (((x) + F2FS_BLKSIZE - 1) >> F2FS_BLKSIZE_BITS)
@@ -210,14 +210,14 @@ struct f2fs_checkpoint {
210
210
unsigned char sit_nat_version_bitmap [];
211
211
} __packed ;
212
212
213
- #define CP_CHKSUM_OFFSET 4092 /* default chksum offset in checkpoint */
213
+ #define CP_CHKSUM_OFFSET (F2FS_BLKSIZE - sizeof(__le32)) /* default chksum offset in checkpoint */
214
214
#define CP_MIN_CHKSUM_OFFSET \
215
215
(offsetof(struct f2fs_checkpoint, sit_nat_version_bitmap))
216
216
217
217
/*
218
218
* For orphan inode management
219
219
*/
220
- #define F2FS_ORPHANS_PER_BLOCK 1020
220
+ #define F2FS_ORPHANS_PER_BLOCK ((F2FS_BLKSIZE - 4 * sizeof(__le32)) / sizeof(__le32))
221
221
222
222
#define GET_ORPHAN_BLOCKS (n ) (((n) + F2FS_ORPHANS_PER_BLOCK - 1) / \
223
223
F2FS_ORPHANS_PER_BLOCK)
@@ -243,14 +243,31 @@ struct f2fs_extent {
243
243
#define F2FS_NAME_LEN 255
244
244
/* 200 bytes for inline xattrs by default */
245
245
#define DEFAULT_INLINE_XATTR_ADDRS 50
246
- #define DEF_ADDRS_PER_INODE 923 /* Address Pointers in an Inode */
246
+
247
+ #define OFFSET_OF_END_OF_I_EXT 360
248
+ #define SIZE_OF_I_NID 20
249
+
250
+ struct node_footer {
251
+ __le32 nid ; /* node id */
252
+ __le32 ino ; /* inode number */
253
+ __le32 flag ; /* include cold/fsync/dentry marks and offset */
254
+ __le64 cp_ver ; /* checkpoint version */
255
+ __le32 next_blkaddr ; /* next node page block address */
256
+ } __packed ;
257
+
258
+ /* Address Pointers in an Inode */
259
+ #define DEF_ADDRS_PER_INODE ((F2FS_BLKSIZE - OFFSET_OF_END_OF_I_EXT \
260
+ - SIZE_OF_I_NID \
261
+ - sizeof(struct node_footer)) / sizeof(__le32))
247
262
#define CUR_ADDRS_PER_INODE (inode ) (DEF_ADDRS_PER_INODE - \
248
263
get_extra_isize(inode))
249
264
#define DEF_NIDS_PER_INODE 5 /* Node IDs in an Inode */
250
265
#define ADDRS_PER_INODE (inode ) addrs_per_inode(inode)
251
- #define DEF_ADDRS_PER_BLOCK 1018 /* Address Pointers in a Direct Block */
266
+ /* Address Pointers in a Direct Block */
267
+ #define DEF_ADDRS_PER_BLOCK ((F2FS_BLKSIZE - sizeof(struct node_footer)) / sizeof(__le32))
252
268
#define ADDRS_PER_BLOCK (inode ) addrs_per_block(inode)
253
- #define NIDS_PER_BLOCK 1018 /* Node IDs in an Indirect Block */
269
+ /* Node IDs in an Indirect Block */
270
+ #define NIDS_PER_BLOCK ((F2FS_BLKSIZE - sizeof(struct node_footer)) / sizeof(__le32))
254
271
255
272
#define ADDRS_PER_PAGE (page , inode ) \
256
273
(IS_INODE(page) ? ADDRS_PER_INODE(inode) : ADDRS_PER_BLOCK(inode))
@@ -342,14 +359,6 @@ enum {
342
359
343
360
#define OFFSET_BIT_MASK GENMASK(OFFSET_BIT_SHIFT - 1, 0)
344
361
345
- struct node_footer {
346
- __le32 nid ; /* node id */
347
- __le32 ino ; /* inode number */
348
- __le32 flag ; /* include cold/fsync/dentry marks and offset */
349
- __le64 cp_ver ; /* checkpoint version */
350
- __le32 next_blkaddr ; /* next node page block address */
351
- } __packed ;
352
-
353
362
struct f2fs_node {
354
363
/* can be one of three types: inode, direct, and indirect types */
355
364
union {
@@ -363,7 +372,7 @@ struct f2fs_node {
363
372
/*
364
373
* For NAT entries
365
374
*/
366
- #define NAT_ENTRY_PER_BLOCK (PAGE_SIZE / sizeof(struct f2fs_nat_entry))
375
+ #define NAT_ENTRY_PER_BLOCK (F2FS_BLKSIZE / sizeof(struct f2fs_nat_entry))
367
376
368
377
struct f2fs_nat_entry {
369
378
__u8 version ; /* latest version of cached nat entry */
@@ -378,12 +387,13 @@ struct f2fs_nat_block {
378
387
/*
379
388
* For SIT entries
380
389
*
381
- * Each segment is 2MB in size by default so that a bitmap for validity of
382
- * there-in blocks should occupy 64 bytes, 512 bits.
390
+ * A validity bitmap of 64 bytes covers 512 blocks of area. For a 4K page size,
391
+ * this results in a segment size of 2MB. For 16k pages, the default segment size
392
+ * is 8MB.
383
393
* Not allow to change this.
384
394
*/
385
395
#define SIT_VBLOCK_MAP_SIZE 64
386
- #define SIT_ENTRY_PER_BLOCK (PAGE_SIZE / sizeof(struct f2fs_sit_entry))
396
+ #define SIT_ENTRY_PER_BLOCK (F2FS_BLKSIZE / sizeof(struct f2fs_sit_entry))
387
397
388
398
/*
389
399
* F2FS uses 4 bytes to represent block address. As a result, supported size of
@@ -418,7 +428,7 @@ struct f2fs_sit_block {
418
428
* For segment summary
419
429
*
420
430
* One summary block contains exactly 512 summary entries, which represents
421
- * exactly 2MB segment by default. Not allow to change the basic units.
431
+ * exactly one segment by default. Not allow to change the basic units.
422
432
*
423
433
* NOTE: For initializing fields, you must use set_summary
424
434
*
@@ -429,12 +439,12 @@ struct f2fs_sit_block {
429
439
* from node's page's beginning to get a data block address.
430
440
* ex) data_blkaddr = (block_t)(nodepage_start_address + ofs_in_node)
431
441
*/
432
- #define ENTRIES_IN_SUM 512
442
+ #define ENTRIES_IN_SUM (F2FS_BLKSIZE / 8)
433
443
#define SUMMARY_SIZE (7) /* sizeof(struct summary) */
434
444
#define SUM_FOOTER_SIZE (5) /* sizeof(struct summary_footer) */
435
445
#define SUM_ENTRY_SIZE (SUMMARY_SIZE * ENTRIES_IN_SUM)
436
446
437
- /* a summary entry for a 4KB-sized block in a segment */
447
+ /* a summary entry for a block in a segment */
438
448
struct f2fs_summary {
439
449
__le32 nid ; /* parent node id */
440
450
union {
@@ -518,7 +528,7 @@ struct f2fs_journal {
518
528
};
519
529
} __packed ;
520
530
521
- /* 4KB -sized summary block structure */
531
+ /* Block -sized summary block structure */
522
532
struct f2fs_summary_block {
523
533
struct f2fs_summary entries [ENTRIES_IN_SUM ];
524
534
struct f2fs_journal journal ;
@@ -559,11 +569,14 @@ typedef __le32 f2fs_hash_t;
559
569
* Note: there are more reserved space in inline dentry than in regular
560
570
* dentry, when converting inline dentry we should handle this carefully.
561
571
*/
562
- #define NR_DENTRY_IN_BLOCK 214 /* the number of dentry in a block */
572
+
573
+ /* the number of dentry in a block */
574
+ #define NR_DENTRY_IN_BLOCK ((BITS_PER_BYTE * F2FS_BLKSIZE) / \
575
+ ((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * BITS_PER_BYTE + 1))
563
576
#define SIZE_OF_DIR_ENTRY 11 /* by byte */
564
577
#define SIZE_OF_DENTRY_BITMAP ((NR_DENTRY_IN_BLOCK + BITS_PER_BYTE - 1) / \
565
578
BITS_PER_BYTE)
566
- #define SIZE_OF_RESERVED (PAGE_SIZE - ((SIZE_OF_DIR_ENTRY + \
579
+ #define SIZE_OF_RESERVED (F2FS_BLKSIZE - ((SIZE_OF_DIR_ENTRY + \
567
580
F2FS_SLOT_LEN) * \
568
581
NR_DENTRY_IN_BLOCK + SIZE_OF_DENTRY_BITMAP))
569
582
#define MIN_INLINE_DENTRY_SIZE 40 /* just include '.' and '..' entries */
@@ -576,7 +589,7 @@ struct f2fs_dir_entry {
576
589
__u8 file_type ; /* file type */
577
590
} __packed ;
578
591
579
- /* 4KB -sized directory entry block */
592
+ /* Block -sized directory entry block */
580
593
struct f2fs_dentry_block {
581
594
/* validity bitmap for directory entries in each block */
582
595
__u8 dentry_bitmap [SIZE_OF_DENTRY_BITMAP ];
0 commit comments