btrfs: switch mount option bits to enums and use wider type
authorDavid Sterba <dsterba@suse.com>
Fri, 18 Jun 2021 12:57:05 +0000 (14:57 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 22 Jun 2021 12:11:58 +0000 (14:11 +0200)
Switch defines of BTRFS_MOUNT_* to an enum (the symbolic names are
recorded in the debugging information for convenience).

There are two more things done but separating them would not make much
sense as it's touching the same lines:

- Renumber shifts 18..31 to 17..30 to get rid of the hole in the
  sequence.

- Use 1UL as the value that gets shifted because we're approaching the
  32bit limit and due to integer promotions the value of (1 << 31)
  becomes 0xffffffff80000000 when cast to unsigned long (eg. the option
  manipulating helpers).

  This is not causing any problems yet as the operations are in-memory
  and masking the 31st bit works, we don't have more than 31 bits so the
  ill effects of not masking higher bits don't happen. But once we have
  more, the problems will emerge.

Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h

index cbdabec..0941af2 100644 (file)
@@ -1384,38 +1384,39 @@ static inline u32 BTRFS_MAX_XATTR_SIZE(const struct btrfs_fs_info *info)
  *
  * Note: don't forget to add new options to btrfs_show_options()
  */
-#define BTRFS_MOUNT_NODATASUM          (1 << 0)
-#define BTRFS_MOUNT_NODATACOW          (1 << 1)
-#define BTRFS_MOUNT_NOBARRIER          (1 << 2)
-#define BTRFS_MOUNT_SSD                        (1 << 3)
-#define BTRFS_MOUNT_DEGRADED           (1 << 4)
-#define BTRFS_MOUNT_COMPRESS           (1 << 5)
-#define BTRFS_MOUNT_NOTREELOG           (1 << 6)
-#define BTRFS_MOUNT_FLUSHONCOMMIT       (1 << 7)
-#define BTRFS_MOUNT_SSD_SPREAD         (1 << 8)
-#define BTRFS_MOUNT_NOSSD              (1 << 9)
-#define BTRFS_MOUNT_DISCARD_SYNC       (1 << 10)
-#define BTRFS_MOUNT_FORCE_COMPRESS      (1 << 11)
-#define BTRFS_MOUNT_SPACE_CACHE                (1 << 12)
-#define BTRFS_MOUNT_CLEAR_CACHE                (1 << 13)
-#define BTRFS_MOUNT_USER_SUBVOL_RM_ALLOWED (1 << 14)
-#define BTRFS_MOUNT_ENOSPC_DEBUG        (1 << 15)
-#define BTRFS_MOUNT_AUTO_DEFRAG                (1 << 16)
-/* bit 17 is free */
-#define BTRFS_MOUNT_USEBACKUPROOT      (1 << 18)
-#define BTRFS_MOUNT_SKIP_BALANCE       (1 << 19)
-#define BTRFS_MOUNT_CHECK_INTEGRITY    (1 << 20)
-#define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21)
-#define BTRFS_MOUNT_PANIC_ON_FATAL_ERROR       (1 << 22)
-#define BTRFS_MOUNT_RESCAN_UUID_TREE   (1 << 23)
-#define BTRFS_MOUNT_FRAGMENT_DATA      (1 << 24)
-#define BTRFS_MOUNT_FRAGMENT_METADATA  (1 << 25)
-#define BTRFS_MOUNT_FREE_SPACE_TREE    (1 << 26)
-#define BTRFS_MOUNT_NOLOGREPLAY                (1 << 27)
-#define BTRFS_MOUNT_REF_VERIFY         (1 << 28)
-#define BTRFS_MOUNT_DISCARD_ASYNC      (1 << 29)
-#define BTRFS_MOUNT_IGNOREBADROOTS     (1 << 30)
-#define BTRFS_MOUNT_IGNOREDATACSUMS    (1 << 31)
+enum {
+       BTRFS_MOUNT_NODATASUM                   = (1UL << 0),
+       BTRFS_MOUNT_NODATACOW                   = (1UL << 1),
+       BTRFS_MOUNT_NOBARRIER                   = (1UL << 2),
+       BTRFS_MOUNT_SSD                         = (1UL << 3),
+       BTRFS_MOUNT_DEGRADED                    = (1UL << 4),
+       BTRFS_MOUNT_COMPRESS                    = (1UL << 5),
+       BTRFS_MOUNT_NOTREELOG                   = (1UL << 6),
+       BTRFS_MOUNT_FLUSHONCOMMIT               = (1UL << 7),
+       BTRFS_MOUNT_SSD_SPREAD                  = (1UL << 8),
+       BTRFS_MOUNT_NOSSD                       = (1UL << 9),
+       BTRFS_MOUNT_DISCARD_SYNC                = (1UL << 10),
+       BTRFS_MOUNT_FORCE_COMPRESS              = (1UL << 11),
+       BTRFS_MOUNT_SPACE_CACHE                 = (1UL << 12),
+       BTRFS_MOUNT_CLEAR_CACHE                 = (1UL << 13),
+       BTRFS_MOUNT_USER_SUBVOL_RM_ALLOWED      = (1UL << 14),
+       BTRFS_MOUNT_ENOSPC_DEBUG                = (1UL << 15),
+       BTRFS_MOUNT_AUTO_DEFRAG                 = (1UL << 16),
+       BTRFS_MOUNT_USEBACKUPROOT               = (1UL << 17),
+       BTRFS_MOUNT_SKIP_BALANCE                = (1UL << 18),
+       BTRFS_MOUNT_CHECK_INTEGRITY             = (1UL << 19),
+       BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA = (1UL << 20),
+       BTRFS_MOUNT_PANIC_ON_FATAL_ERROR        = (1UL << 21),
+       BTRFS_MOUNT_RESCAN_UUID_TREE            = (1UL << 22),
+       BTRFS_MOUNT_FRAGMENT_DATA               = (1UL << 23),
+       BTRFS_MOUNT_FRAGMENT_METADATA           = (1UL << 24),
+       BTRFS_MOUNT_FREE_SPACE_TREE             = (1UL << 25),
+       BTRFS_MOUNT_NOLOGREPLAY                 = (1UL << 26),
+       BTRFS_MOUNT_REF_VERIFY                  = (1UL << 27),
+       BTRFS_MOUNT_DISCARD_ASYNC               = (1UL << 28),
+       BTRFS_MOUNT_IGNOREBADROOTS              = (1UL << 29),
+       BTRFS_MOUNT_IGNOREDATACSUMS             = (1UL << 30),
+};
 
 #define BTRFS_DEFAULT_COMMIT_INTERVAL  (30)
 #define BTRFS_DEFAULT_MAX_INLINE       (2048)