Changeset 2226cc3 in mainline
- Timestamp:
- 2012-05-05T15:39:58Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2add9ec
- Parents:
- 9fc72fb3
- Location:
- uspace/lib/ext4
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ext4/libext4_superblock.c
r9fc72fb3 r2226cc3 357 357 } 358 358 359 /** TODO comment 360 * 359 /** Get filesystem state. 360 * 361 * @param sb superblock 362 * @return filesystem state 361 363 */ 362 364 uint16_t ext4_superblock_get_state(ext4_superblock_t *sb) … … 365 367 } 366 368 367 /** TODO comment 368 * 369 /** Set filesystem state. 370 * 371 * @param sb superblock 372 * @param state filesystem state 369 373 */ 370 374 void ext4_superblock_set_state(ext4_superblock_t *sb, uint16_t state) … … 373 377 } 374 378 375 /** TODO comment 376 * 379 /** Get behavior code when errors detected. 380 * 381 * @param sb superblock 382 * @return behavior code 377 383 */ 378 384 uint16_t ext4_superblock_get_errors(ext4_superblock_t *sb) … … 381 387 } 382 388 383 /** TODO comment 384 * 389 /** Set behavior code when errors detected. 390 * 391 * @param sb superblock 392 * @param errors behavior code 385 393 */ 386 394 void ext4_superblock_set_errors(ext4_superblock_t *sb, uint16_t errors) … … 389 397 } 390 398 391 /** TODO comment 392 * 399 /** Get minor revision level of the filesystem. 400 * 401 * @param sb superblock 402 * @return minor revision level 393 403 */ 394 404 uint16_t ext4_superblock_get_minor_rev_level(ext4_superblock_t *sb) … … 397 407 } 398 408 399 /** TODO comment 400 * 409 /** Set minor revision level of the filesystem. 410 * 411 * @param sb superblock 412 * @param level minor revision level 401 413 */ 402 414 void ext4_superblock_set_minor_rev_level(ext4_superblock_t *sb, uint16_t level) … … 405 417 } 406 418 407 /** TODO comment 408 * 419 /** Get time of the last filesystem check. 420 * 421 * @param sb superblock 422 * @return time of the last check (POSIX) 409 423 */ 410 424 uint32_t ext4_superblock_get_last_check_time(ext4_superblock_t *sb) … … 413 427 } 414 428 415 /** TODO comment 416 * 429 /** Set time of the last filesystem check. 430 * 431 * @param sb superblock 432 * @param time time of the last check (POSIX) 417 433 */ 418 434 void ext4_superblock_set_last_check_time(ext4_superblock_t *sb, uint32_t time) … … 421 437 } 422 438 423 /** TODO comment 424 * 439 /** Get maximum time interval between two filesystem checks. 440 * 441 * @param sb superblock 442 * @return time interval between two check (POSIX) 425 443 */ 426 444 uint32_t ext4_superblock_get_check_interval(ext4_superblock_t *sb){ … … 428 446 } 429 447 430 /** TODO comment 431 * 448 /** Set maximum time interval between two filesystem checks. 449 * 450 * @param sb superblock 451 * @param interval time interval between two check (POSIX) 432 452 */ 433 453 void ext4_superblock_set_check_interval(ext4_superblock_t *sb, uint32_t interval) … … 436 456 } 437 457 438 /** TODO comment 439 * 458 /** Get operation system identifier, on which the filesystem was created. 459 * 460 * @param sb superblock 461 * @return operation system identifier 440 462 */ 441 463 uint32_t ext4_superblock_get_creator_os(ext4_superblock_t *sb) … … 444 466 } 445 467 446 /** TODO comment 447 * 468 /** Set operation system identifier, on which the filesystem was created. 469 * 470 * @param sb superblock 471 * @param os operation system identifier 448 472 */ 449 473 void ext4_superblock_set_creator_os(ext4_superblock_t *sb, uint32_t os) … … 452 476 } 453 477 454 /** TODO comment 455 * 478 /** Get revision level of the filesystem. 479 * 480 * @param sb superblock 481 * @return revision level 456 482 */ 457 483 uint32_t ext4_superblock_get_rev_level(ext4_superblock_t *sb) … … 460 486 } 461 487 462 /** TODO comment 463 * 488 /** Set revision level of the filesystem. 489 * 490 * @param sb superblock 491 * @param level revision level 464 492 */ 465 493 void ext4_superblock_set_rev_level(ext4_superblock_t *sb, uint32_t level) … … 468 496 } 469 497 470 /** TODO comment 471 * 498 /** Get default user id for reserved blocks. 499 * 500 * @param sb superblock 501 * @return default user id for reserved blocks. 472 502 */ 473 503 uint16_t ext4_superblock_get_def_resuid(ext4_superblock_t *sb) … … 476 506 } 477 507 478 /** TODO comment 479 * 508 /** Set default user id for reserved blocks. 509 * 510 * @param sb superblock 511 * @param uid default user id for reserved blocks. 480 512 */ 481 513 void ext4_superblock_set_def_resuid(ext4_superblock_t *sb, uint16_t uid) … … 484 516 } 485 517 486 /** TODO comment 487 * 518 /** Get default group id for reserved blocks. 519 * 520 * @param sb superblock 521 * @return default group id for reserved blocks. 488 522 */ 489 523 uint16_t ext4_superblock_get_def_resgid(ext4_superblock_t *sb) … … 492 526 } 493 527 494 /** TODO comment 495 * 528 /** Set default group id for reserved blocks. 529 * 530 * @param sb superblock 531 * @param gid default group id for reserved blocks. 496 532 */ 497 533 void ext4_superblock_set_def_resgid(ext4_superblock_t *sb, uint16_t gid) … … 500 536 } 501 537 502 /** TODO comment 503 * 538 /** Get index of the first i-node, which can be used for allocation. 539 * 540 * @param sb superblock 541 * @return i-node index 504 542 */ 505 543 uint32_t ext4_superblock_get_first_inode(ext4_superblock_t *sb) … … 508 546 } 509 547 510 /** TODO comment 511 * 548 /** Set index of the first i-node, which can be used for allocation. 549 * 550 * @param sb superblock 551 * @param first_inode i-node index 512 552 */ 513 553 void ext4_superblock_set_first_inode(ext4_superblock_t *sb, uint32_t first_inode) … … 516 556 } 517 557 518 /** TODO comment 519 * 558 /** Get size of i-node structure. 559 * 560 * For the oldest revision return constant number. 561 * 562 * @param sb superblock 563 * @return size of i-node structure 520 564 */ 521 565 uint16_t ext4_superblock_get_inode_size(ext4_superblock_t *sb) … … 527 571 } 528 572 529 /** TODO comment 530 * 573 /** Set size of i-node structure. 574 * 575 * @param sb superblock 576 * @param size size of i-node structure 531 577 */ 532 578 void ext4_superblock_set_inode_size(ext4_superblock_t *sb, uint16_t size) … … 535 581 } 536 582 537 /** TODO comment 538 * 539 */ 540 uint16_t ext4_superblock_get_block_group_number(ext4_superblock_t *sb) 541 { 542 return uint16_t_le2host(sb->block_group_number); 543 } 544 545 /** TODO comment 546 * 547 */ 548 void ext4_superblock_set_block_group_number(ext4_superblock_t *sb, uint16_t bg) 549 { 550 sb->block_group_number = host2uint16_t_le(bg); 551 } 552 553 /** TODO comment 554 * 583 /** Get index of block group, where superblock copy is located. 584 * 585 * @param sb superblock 586 * @return block group index 587 */ 588 uint16_t ext4_superblock_get_block_group_index(ext4_superblock_t *sb) 589 { 590 return uint16_t_le2host(sb->block_group_index); 591 } 592 593 /** Set index of block group, where superblock copy is located. 594 * 595 * @param sb superblock 596 * @param bgid block group index 597 */ 598 void ext4_superblock_set_block_group_index(ext4_superblock_t *sb, uint16_t bgid) 599 { 600 sb->block_group_index = host2uint16_t_le(bgid); 601 } 602 603 /** Get compatible features supported by the filesystem. 604 * 605 * @param sb superblock 606 * @return compatible features bitmap 555 607 */ 556 608 uint32_t ext4_superblock_get_features_compatible(ext4_superblock_t *sb) … … 559 611 } 560 612 561 /** TODO comment 562 * 613 /** Set compatible features supported by the filesystem. 614 * 615 * @param sb superblock 616 * @param features compatible features bitmap 563 617 */ 564 618 void ext4_superblock_set_features_compatible(ext4_superblock_t *sb, uint32_t features) … … 567 621 } 568 622 569 /** TODO comment 570 * 623 /** Get incompatible features supported by the filesystem. 624 * 625 * @param sb superblock 626 * @return incompatible features bitmap 571 627 */ 572 628 uint32_t ext4_superblock_get_features_incompatible(ext4_superblock_t *sb) … … 575 631 } 576 632 577 /** TODO comment 578 * 633 /** Set incompatible features supported by the filesystem. 634 * 635 * @param sb superblock 636 * @param features incompatible features bitmap 579 637 */ 580 638 void ext4_superblock_set_features_incompatible(ext4_superblock_t *sb, uint32_t features) … … 583 641 } 584 642 585 /** TODO comment 586 * 643 /** Get compatible features supported by the filesystem. 644 * 645 * @param sb superblock 646 * @return read-only compatible features bitmap 587 647 */ 588 648 uint32_t ext4_superblock_get_features_read_only(ext4_superblock_t *sb) … … 591 651 } 592 652 593 /** TODO comment 594 * 653 /** Set compatible features supported by the filesystem. 654 * 655 * @param sb superblock 656 * @param feature read-only compatible features bitmap 595 657 */ 596 658 void ext4_superblock_set_features_read_only(ext4_superblock_t *sb, uint32_t features) … … 599 661 } 600 662 601 /** TODO comment 602 * 663 /** Get UUID of the filesystem. 664 * 665 * @param sb superblock 666 * @return pointer to UUID array 603 667 */ 604 668 const uint8_t * ext4_superblock_get_uuid(ext4_superblock_t *sb) … … 607 671 } 608 672 609 /** TODO comment 610 * 673 /** Set UUID of the filesystem. 674 * 675 * @param sb superblock 676 * @param uuid pointer to UUID array 611 677 */ 612 678 void ext4_superblock_set_uuid(ext4_superblock_t *sb, const uint8_t *uuid) … … 615 681 } 616 682 683 /** Get name of the filesystem volume. 684 * 685 * @param sb superblock 686 * @return name of the volume 687 */ 617 688 const char * ext4_superblock_get_volume_name(ext4_superblock_t *sb) 618 689 { … … 620 691 } 621 692 622 /** TODO comment 623 * 693 /** Set name of the filesystem volume. 694 * 695 * @param sb superblock 696 * @param name new name of the volume 624 697 */ 625 698 void ext4_superblock_set_volume_name(ext4_superblock_t *sb, const char *name) … … 628 701 } 629 702 630 /** TODO comment 631 * 703 /** Get name of the directory, where this filesystem was mounted at last. 704 * 705 * @param sb superblock 706 * @return directory name 632 707 */ 633 708 const char * ext4_superblock_get_last_mounted(ext4_superblock_t *sb) … … 636 711 } 637 712 638 /** TODO comment 639 * 713 /** Set name of the directory, where this filesystem was mounted at last. 714 * 715 * @param sb superblock 716 * @param last directory name 640 717 */ 641 718 void ext4_superblock_set_last_mounted(ext4_superblock_t *sb, const char *last) … … 644 721 } 645 722 646 /** TODO comment 647 * 723 /** Get last orphaned i-node index. 724 * 725 * Orphans are stored in linked list. 726 * 727 * @param sb superblock 728 * @return last orphaned i-node index 648 729 */ 649 730 uint32_t ext4_superblock_get_last_orphan(ext4_superblock_t *sb) … … 652 733 } 653 734 654 /** TODO comment 655 * 735 /** Set last orphaned i-node index. 736 * 737 * Orphans are stored in linked list. 738 * 739 * @param sb superblock 740 * @param last_orphan last orphaned i-node index 656 741 */ 657 742 void ext4_superblock_set_last_orphan(ext4_superblock_t *sb, uint32_t last_orphan) … … 660 745 } 661 746 662 /** TODO comment 663 * 664 */ 665 uint32_t* ext4_superblock_get_hash_seed(ext4_superblock_t *sb) 747 /** Get hash seed for directory index hash function. 748 * 749 * @param sb superblock 750 * @return hash seed pointer 751 */ 752 const uint32_t * ext4_superblock_get_hash_seed(ext4_superblock_t *sb) 666 753 { 667 754 return sb->hash_seed; 668 755 } 669 756 670 /** TODO comment 671 * 757 /** Set hash seed for directory index hash function. 758 * 759 * @param sb superblock 760 * @param seed hash seed pointer 761 */ 762 void ext4_superblock_set_hash_seed(ext4_superblock_t *sb, const uint32_t *seed) 763 { 764 memcpy(sb->hash_seed, seed, sizeof(sb->hash_seed)); 765 } 766 767 /** Get default version of the hash algorithm version for directory index. 768 * 769 * @param sb superblock 770 * @return default hash version 672 771 */ 673 772 uint8_t ext4_superblock_get_default_hash_version(ext4_superblock_t *sb) … … 676 775 } 677 776 678 /** TODO comment 679 * 777 /** Set default version of the hash algorithm version for directory index. 778 * 779 * @param sb superblock 780 * @param version default hash version 680 781 */ 681 782 void ext4_superblock_set_default_hash_version(ext4_superblock_t *sb, uint8_t version) … … 684 785 } 685 786 686 /** TODO comment 687 * 787 /** Get size of block group descriptor structure. 788 * 789 * Output value is checked for minimal size. 790 * 791 * @param sb superblock 792 * @return size of block group descriptor 688 793 */ 689 794 uint16_t ext4_superblock_get_desc_size(ext4_superblock_t *sb) … … 698 803 } 699 804 700 /** TODO comment 701 * 805 /** Set size of block group descriptor structure. 806 * 807 * Input value is checked for minimal size. 808 * 809 * @param sb superblock 810 * @param size size of block group descriptor 702 811 */ 703 812 void ext4_superblock_set_desc_size(ext4_superblock_t *sb, uint16_t size) 704 813 { 814 if (size < EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 815 sb->desc_size = host2uint16_t_le(EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE); 816 } 817 705 818 sb->desc_size = host2uint16_t_le(size); 706 819 } 707 820 708 /** TODO comment 709 * 821 /** Get superblock flags. 822 * 823 * @param sb superblock 824 * @return flags from the superblock 710 825 */ 711 826 uint32_t ext4_superblock_get_flags(ext4_superblock_t *sb) … … 714 829 } 715 830 716 /** TODO comment 717 * 831 /** Set superblock flags. 832 * 833 * @param sb superblock 834 * @param flags flags for the superblock 718 835 */ 719 836 void ext4_superblock_set_flags(ext4_superblock_t *sb, uint32_t flags) … … 721 838 sb->flags = host2uint32_t_le(flags); 722 839 } 723 724 840 725 841 /* … … 727 843 */ 728 844 729 /** TODO comment 730 * 845 /** Check if superblock has specified flag. 846 * 847 * @param sb superblock 848 * @param flag flag to be checked 849 * @return true, if superblock has the flag 731 850 */ 732 851 bool ext4_superblock_has_flag(ext4_superblock_t *sb, uint32_t flag) … … 738 857 } 739 858 740 /** TODO comment 741 * 859 /** Check if filesystem supports compatible feature. 860 * 861 * @param sb superblock 862 * @param feature feature to be checked 863 * @return true, if filesystem supports the feature 742 864 */ 743 865 bool ext4_superblock_has_feature_compatible(ext4_superblock_t *sb, uint32_t feature) … … 749 871 } 750 872 751 /** TODO comment 752 * 873 /** Check if filesystem supports incompatible feature. 874 * 875 * @param sb superblock 876 * @param feature feature to be checked 877 * @return true, if filesystem supports the feature 753 878 */ 754 879 bool ext4_superblock_has_feature_incompatible(ext4_superblock_t *sb, uint32_t feature) … … 760 885 } 761 886 762 /** TODO comment 763 * 887 /** Check if filesystem supports read-only compatible feature. 888 * 889 * @param sb superblock 890 * @param feature feature to be checked 891 * @return true, if filesystem supports the feature 764 892 */ 765 893 bool ext4_superblock_has_feature_read_only(ext4_superblock_t *sb, uint32_t feature) … … 771 899 } 772 900 773 /** TODO comment 774 * 901 /** Read superblock directly from block device. 902 * 903 * @param service_id block device identifier 904 * @param sb output pointer to memory structure 905 * @return error code. 775 906 */ 776 907 int ext4_superblock_read_direct(service_id_t service_id, 777 ext4_superblock_t **s uperblock)908 ext4_superblock_t **sb) 778 909 { 779 910 int rc; 780 911 912 // Allocated memory for superblock structure 781 913 void *data = malloc(EXT4_SUPERBLOCK_SIZE); 782 914 if (data == NULL) { … … 784 916 } 785 917 918 // Read data from block device 786 919 rc = block_read_bytes_direct(service_id, EXT4_SUPERBLOCK_OFFSET, 787 920 EXT4_SUPERBLOCK_SIZE, data); … … 792 925 } 793 926 794 (*superblock) = data; 927 // Set output value 928 (*sb) = data; 795 929 796 930 return EOK; 797 931 } 798 932 799 /** TODO comment 800 * 933 /** Write superblock structure directly to block device. 934 * 935 * @param service_id block device identifier 936 * @param sb superblock to be written 937 * @return error code 801 938 */ 802 939 int ext4_superblock_write_direct(service_id_t service_id, … … 806 943 uint32_t phys_block_size; 807 944 945 // Load physical block size from block device 808 946 rc = block_get_bsize(service_id, &phys_block_size); 809 947 if (rc != EOK) { 810 // TODO error811 948 return rc; 812 949 } 813 950 951 // Compute address of the first block 814 952 uint64_t first_block = EXT4_SUPERBLOCK_OFFSET / phys_block_size; 953 // Compute number of block to write 815 954 uint32_t block_count = EXT4_SUPERBLOCK_SIZE / phys_block_size; 816 955 956 // Check alignment 817 957 if (EXT4_SUPERBLOCK_SIZE % phys_block_size) { 818 958 block_count++; 819 959 } 820 960 961 // Write data 821 962 return block_write_direct(service_id, first_block, block_count, sb); 822 963 … … 841 982 } 842 983 843 /** TODO comment 844 * 984 /** Compute number of block groups in the filesystem. 985 * 986 * @param sb superblock 987 * @return number of block groups 845 988 */ 846 989 uint32_t ext4_superblock_get_block_group_count(ext4_superblock_t *sb) … … 859 1002 } 860 1003 861 /** TODO comment 862 * 1004 /** Compute number of blocks in specified block group. 1005 * 1006 * @param sb superblock 1007 * @param bgid block group index 1008 * @return number of blocks 863 1009 */ 864 1010 uint32_t ext4_superblock_get_blocks_in_group(ext4_superblock_t *sb, uint32_t bgid) … … 876 1022 } 877 1023 878 /** TODO comment 879 * 1024 /** Compute number of i-nodes in specified block group. 1025 * 1026 * @param sb superblock 1027 * @param bgid block group index 1028 * @return number of i-nodes 880 1029 */ 881 1030 uint32_t ext4_superblock_get_inodes_in_group(ext4_superblock_t *sb, uint32_t bgid) -
uspace/lib/ext4/libext4_superblock.h
r9fc72fb3 r2226cc3 91 91 extern uint16_t ext4_superblock_get_inode_size(ext4_superblock_t *); 92 92 extern void ext4_superblock_set_inode_size(ext4_superblock_t *, uint16_t); 93 extern uint16_t ext4_superblock_get_block_group_ number(ext4_superblock_t *);94 extern void ext4_superblock_set_block_group_ number(ext4_superblock_t *, uint16_t);93 extern uint16_t ext4_superblock_get_block_group_index(ext4_superblock_t *); 94 extern void ext4_superblock_set_block_group_index(ext4_superblock_t *, uint16_t); 95 95 extern uint32_t ext4_superblock_get_features_compatible(ext4_superblock_t *); 96 96 extern void ext4_superblock_set_features_compatible(ext4_superblock_t *, uint32_t); … … 118 118 extern uint32_t ext4_superblock_get_last_orphan(ext4_superblock_t *); 119 119 extern void ext4_superblock_set_last_orphan(ext4_superblock_t *, uint32_t); 120 extern uint32_t* ext4_superblock_get_hash_seed(ext4_superblock_t *); 120 extern const uint32_t * ext4_superblock_get_hash_seed(ext4_superblock_t *); 121 extern void ext4_superblock_set_hash_seed(ext4_superblock_t *, const uint32_t *); 121 122 extern uint8_t ext4_superblock_get_default_hash_version(ext4_superblock_t *); 122 123 extern void ext4_superblock_set_default_hash_version(ext4_superblock_t *, uint8_t); -
uspace/lib/ext4/libext4_types.h
r9fc72fb3 r2226cc3 56 56 uint16_t max_mount_count; // Maximal mount count 57 57 uint16_t magic; // Magic signature 58 uint16_t state; // File 58 uint16_t state; // Filesystem state 59 59 uint16_t errors; // Behaviour when detecting errors 60 60 uint16_t minor_rev_level; // Minor revision level … … 69 69 uint32_t first_inode; // First non-reserved inode 70 70 uint16_t inode_size; // Size of inode structure 71 uint16_t block_group_ number; // Block group numberof this superblock71 uint16_t block_group_index; // Block group index of this superblock 72 72 uint32_t features_compatible; // Compatible feature set 73 73 uint32_t features_incompatible; // Incompatible feature set … … 136 136 } __attribute__((packed)) ext4_superblock_t; 137 137 138 138 139 #define EXT4_SUPERBLOCK_MAGIC 0xEF53 139 140 #define EXT4_SUPERBLOCK_SIZE 1024 … … 146 147 * Misc. filesystem flags 147 148 */ 148 #define EXT4_SUPERBLOCK_FLAGS_SIGNED_HASH 0x0001 /* Signed dirhash in use */ 149 #define EXT4_SUPERBLOCK_FLAGS_UNSIGNED_HASH 0x0002 /* Unsigned dirhash in use */ 150 #define EXT4_SUPERBLOCK_FLAGS_TEST_FILESYS 0x0004 /* to test development code */ 151 152 /* Compatible features */ 149 #define EXT4_SUPERBLOCK_FLAGS_SIGNED_HASH 0x0001 // Signed dirhash in use 150 #define EXT4_SUPERBLOCK_FLAGS_UNSIGNED_HASH 0x0002 // Unsigned dirhash in use 151 #define EXT4_SUPERBLOCK_FLAGS_TEST_FILESYS 0x0004 // to test development code 152 153 /* 154 * Filesystem states 155 */ 156 #define EXT4_SUPERBLOCK_STATE_VALID_FS 0x0001 // Unmounted cleanly 157 #define EXT4_SUPERBLOCK_STATE_ERROR_FS 0x0002 // Errors detected 158 #define EXT4_SUPERBLOCK_STATE_ORPHAN_FS 0x0004 // Orphans being recovered 159 160 /* 161 * Behaviour when errors detected 162 */ 163 #define EXT4_SUPERBLOCK_ERRORS_CONTINUE 1 // Continue execution 164 #define EXT4_SUPERBLOCK_ERRORS_RO 2 // Remount fs read-only 165 #define EXT4_SUPERBLOCK_ERRORS_PANIC 3 // Panic 166 #define EXT4_SUPERBLOCK_ERRORS_DEFAULT EXT4_ERRORS_CONTINUE 167 168 /* 169 * Compatible features 170 */ 153 171 #define EXT4_FEATURE_COMPAT_DIR_PREALLOC 0x0001 154 172 #define EXT4_FEATURE_COMPAT_IMAGIC_INODES 0x0002 … … 158 176 #define EXT4_FEATURE_COMPAT_DIR_INDEX 0x0020 159 177 160 /* Read-only compatible features */ 178 /* 179 * Read-only compatible features 180 */ 161 181 #define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 162 182 #define EXT4_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 … … 167 187 #define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 168 188 169 /* Incompatible features */ 189 /* 190 * Incompatible features 191 */ 170 192 #define EXT4_FEATURE_INCOMPAT_COMPRESSION 0x0001 171 193 #define EXT4_FEATURE_INCOMPAT_FILETYPE 0x0002
Note:
See TracChangeset
for help on using the changeset viewer.