btrfs: send: explicitly number commands and attributes
authorOmar Sandoval <osandov@fb.com>
Thu, 17 Mar 2022 17:25:38 +0000 (10:25 -0700)
committerDavid Sterba <dsterba@suse.com>
Mon, 25 Jul 2022 15:45:32 +0000 (17:45 +0200)
Commit e77fbf990316 ("btrfs: send: prepare for v2 protocol") added
_BTRFS_SEND_C_MAX_V* macros equal to the maximum command number for the
version plus 1, but as written this creates gaps in the number space.

The maximum command number is currently 22, and __BTRFS_SEND_C_MAX_V1 is
accordingly 23. But then __BTRFS_SEND_C_MAX_V2 is 24, suggesting that v2
has a command numbered 23, and __BTRFS_SEND_C_MAX is 25, suggesting that
23 and 24 are valid commands.

Instead, let's explicitly number all of the commands, attributes, and
sentinel MAX constants.

Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/send.c
fs/btrfs/send.h

index cbf894f..2377538 100644 (file)
@@ -333,8 +333,8 @@ __maybe_unused
 static bool proto_cmd_ok(const struct send_ctx *sctx, int cmd)
 {
        switch (sctx->proto) {
-       case 1:  return cmd < __BTRFS_SEND_C_MAX_V1;
-       case 2:  return cmd < __BTRFS_SEND_C_MAX_V2;
+       case 1:  return cmd <BTRFS_SEND_C_MAX_V1;
+       case 2:  return cmd <BTRFS_SEND_C_MAX_V2;
        default: return false;
        }
 }
index 08602fd..c47a298 100644 (file)
@@ -46,84 +46,82 @@ struct btrfs_tlv_header {
 
 /* commands */
 enum btrfs_send_cmd {
-       BTRFS_SEND_C_UNSPEC,
+       BTRFS_SEND_C_UNSPEC             = 0,
 
        /* Version 1 */
-       BTRFS_SEND_C_SUBVOL,
-       BTRFS_SEND_C_SNAPSHOT,
+       BTRFS_SEND_C_SUBVOL             = 1,
+       BTRFS_SEND_C_SNAPSHOT           = 2,
 
-       BTRFS_SEND_C_MKFILE,
-       BTRFS_SEND_C_MKDIR,
-       BTRFS_SEND_C_MKNOD,
-       BTRFS_SEND_C_MKFIFO,
-       BTRFS_SEND_C_MKSOCK,
-       BTRFS_SEND_C_SYMLINK,
+       BTRFS_SEND_C_MKFILE             = 3,
+       BTRFS_SEND_C_MKDIR              = 4,
+       BTRFS_SEND_C_MKNOD              = 5,
+       BTRFS_SEND_C_MKFIFO             = 6,
+       BTRFS_SEND_C_MKSOCK             = 7,
+       BTRFS_SEND_C_SYMLINK            = 8,
 
-       BTRFS_SEND_C_RENAME,
-       BTRFS_SEND_C_LINK,
-       BTRFS_SEND_C_UNLINK,
-       BTRFS_SEND_C_RMDIR,
+       BTRFS_SEND_C_RENAME             = 9,
+       BTRFS_SEND_C_LINK               = 10,
+       BTRFS_SEND_C_UNLINK             = 11,
+       BTRFS_SEND_C_RMDIR              = 12,
 
-       BTRFS_SEND_C_SET_XATTR,
-       BTRFS_SEND_C_REMOVE_XATTR,
+       BTRFS_SEND_C_SET_XATTR          = 13,
+       BTRFS_SEND_C_REMOVE_XATTR       = 14,
 
-       BTRFS_SEND_C_WRITE,
-       BTRFS_SEND_C_CLONE,
+       BTRFS_SEND_C_WRITE              = 15,
+       BTRFS_SEND_C_CLONE              = 16,
 
-       BTRFS_SEND_C_TRUNCATE,
-       BTRFS_SEND_C_CHMOD,
-       BTRFS_SEND_C_CHOWN,
-       BTRFS_SEND_C_UTIMES,
+       BTRFS_SEND_C_TRUNCATE           = 17,
+       BTRFS_SEND_C_CHMOD              = 18,
+       BTRFS_SEND_C_CHOWN              = 19,
+       BTRFS_SEND_C_UTIMES             = 20,
 
-       BTRFS_SEND_C_END,
-       BTRFS_SEND_C_UPDATE_EXTENT,
-       __BTRFS_SEND_C_MAX_V1,
+       BTRFS_SEND_C_END                = 21,
+       BTRFS_SEND_C_UPDATE_EXTENT      = 22,
+       BTRFS_SEND_C_MAX_V1             = 22,
 
        /* Version 2 */
-       __BTRFS_SEND_C_MAX_V2,
+       BTRFS_SEND_C_MAX_V2             = 22,
 
        /* End */
-       __BTRFS_SEND_C_MAX,
+       BTRFS_SEND_C_MAX                = 22,
 };
-#define BTRFS_SEND_C_MAX (__BTRFS_SEND_C_MAX - 1)
 
 /* attributes in send stream */
 enum {
-       BTRFS_SEND_A_UNSPEC,
-
-       BTRFS_SEND_A_UUID,
-       BTRFS_SEND_A_CTRANSID,
-
-       BTRFS_SEND_A_INO,
-       BTRFS_SEND_A_SIZE,
-       BTRFS_SEND_A_MODE,
-       BTRFS_SEND_A_UID,
-       BTRFS_SEND_A_GID,
-       BTRFS_SEND_A_RDEV,
-       BTRFS_SEND_A_CTIME,
-       BTRFS_SEND_A_MTIME,
-       BTRFS_SEND_A_ATIME,
-       BTRFS_SEND_A_OTIME,
-
-       BTRFS_SEND_A_XATTR_NAME,
-       BTRFS_SEND_A_XATTR_DATA,
-
-       BTRFS_SEND_A_PATH,
-       BTRFS_SEND_A_PATH_TO,
-       BTRFS_SEND_A_PATH_LINK,
-
-       BTRFS_SEND_A_FILE_OFFSET,
-       BTRFS_SEND_A_DATA,
-
-       BTRFS_SEND_A_CLONE_UUID,
-       BTRFS_SEND_A_CLONE_CTRANSID,
-       BTRFS_SEND_A_CLONE_PATH,
-       BTRFS_SEND_A_CLONE_OFFSET,
-       BTRFS_SEND_A_CLONE_LEN,
-
-       __BTRFS_SEND_A_MAX,
+       BTRFS_SEND_A_UNSPEC             = 0,
+
+       BTRFS_SEND_A_UUID               = 1,
+       BTRFS_SEND_A_CTRANSID           = 2,
+
+       BTRFS_SEND_A_INO                = 3,
+       BTRFS_SEND_A_SIZE               = 4,
+       BTRFS_SEND_A_MODE               = 5,
+       BTRFS_SEND_A_UID                = 6,
+       BTRFS_SEND_A_GID                = 7,
+       BTRFS_SEND_A_RDEV               = 8,
+       BTRFS_SEND_A_CTIME              = 9,
+       BTRFS_SEND_A_MTIME              = 10,
+       BTRFS_SEND_A_ATIME              = 11,
+       BTRFS_SEND_A_OTIME              = 12,
+
+       BTRFS_SEND_A_XATTR_NAME         = 13,
+       BTRFS_SEND_A_XATTR_DATA         = 14,
+
+       BTRFS_SEND_A_PATH               = 15,
+       BTRFS_SEND_A_PATH_TO            = 16,
+       BTRFS_SEND_A_PATH_LINK          = 17,
+
+       BTRFS_SEND_A_FILE_OFFSET        = 18,
+       BTRFS_SEND_A_DATA               = 19,
+
+       BTRFS_SEND_A_CLONE_UUID         = 20,
+       BTRFS_SEND_A_CLONE_CTRANSID     = 21,
+       BTRFS_SEND_A_CLONE_PATH         = 22,
+       BTRFS_SEND_A_CLONE_OFFSET       = 23,
+       BTRFS_SEND_A_CLONE_LEN          = 24,
+
+       BTRFS_SEND_A_MAX                = 24,
 };
-#define BTRFS_SEND_A_MAX (__BTRFS_SEND_A_MAX - 1)
 
 #ifdef __KERNEL__
 long btrfs_ioctl_send(struct inode *inode, struct btrfs_ioctl_send_args *arg);