[systemd-commits] src/journal src/readahead src/shared

Harald Hoyer harald at kemper.freedesktop.org
Thu Apr 18 06:21:02 PDT 2013


 src/journal/sd-journal.c          |   10 +++++-----
 src/readahead/readahead-collect.c |    2 +-
 src/shared/macro.h                |   18 ------------------
 src/shared/util.c                 |    5 ++---
 4 files changed, 8 insertions(+), 27 deletions(-)

New commits:
commit 4826f0b7b5c0aefa08b8cc7ef64d69027f84da2c
Author: Harald Hoyer <harald at redhat.com>
Date:   Thu Apr 18 14:50:42 2013 +0200

    Revert f_type fixups
    
    This reverts commit a858b64dddf79177e12ed30f5e8c47a1471c8bfe.
    This reverts commit aea275c43194b6ac519ef907b62c5c995050fde0.
    This reverts commit fc6e6d245ee3989c222a2a8cc82a33475f9922f3.
    This reverts commit c4073a27c555aeceac87a3b02a83141cde641a1e.
    This reverts commit cddf148028f525be8176e7f1cbbf4f862bd287f6.
    This reverts commit 8c68a70170b31f93c287f29fd06c6c17edaf19ad.
    
    The constants are now casted to __SWORD_TYPE, which should resolve the
    compiler warnings about signed vs unsigned.
    
    After talking to Kay, we concluded:
    
    This should be fixed in the kernel, not worked around in userspace tools.
    
    Architectures cannot use int and expect magic constants lager than INT_MAX
    to work correctly. The kernel header needs to be fixed.
    
    Even coreutils cannot handle it:
      #define RAMFS_MAGIC  0x858458f6
      # stat -f -c%t /
      ffffffff858458f6
    
      #define BTRFS_SUPER_MAGIC 0x9123683E
      # stat -f -c%t /mnt
      ffffffff9123683e
    
    Although I found the perfect working macro to fix the thing :)
    
            __extension__ ({                                                \
                            bool _ret = false;                              \
                            switch(f) { case c: _ret=true; };               \
                            ( _ret );                                       \
                    })

diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
index 064929b..88af68c 100644
--- a/src/journal/sd-journal.c
+++ b/src/journal/sd-journal.c
@@ -1248,11 +1248,11 @@ static void check_network(sd_journal *j, int fd) {
                 return;
 
         j->on_network =
-                F_TYPE_CMP(sfs.f_type, CIFS_MAGIC_NUMBER) ||
-                F_TYPE_CMP(sfs.f_type, CODA_SUPER_MAGIC) ||
-                F_TYPE_CMP(sfs.f_type, NCP_SUPER_MAGIC) ||
-                F_TYPE_CMP(sfs.f_type, NFS_SUPER_MAGIC) ||
-                F_TYPE_CMP(sfs.f_type, SMB_SUPER_MAGIC);
+                sfs.f_type == (__SWORD_TYPE) CIFS_MAGIC_NUMBER ||
+                sfs.f_type == (__SWORD_TYPE) CODA_SUPER_MAGIC ||
+                sfs.f_type == (__SWORD_TYPE) NCP_SUPER_MAGIC ||
+                sfs.f_type == (__SWORD_TYPE) NFS_SUPER_MAGIC ||
+                sfs.f_type == (__SWORD_TYPE) SMB_SUPER_MAGIC;
 }
 
 static int add_file(sd_journal *j, const char *prefix, const char *filename) {
diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
index 75ec5b7..02ecbe5 100644
--- a/src/readahead/readahead-collect.c
+++ b/src/readahead/readahead-collect.c
@@ -505,7 +505,7 @@ done:
         on_ssd = fs_on_ssd(root) > 0;
         log_debug("On SSD: %s", yes_no(on_ssd));
 
-        on_btrfs = statfs(root, &sfs) >= 0 && F_TYPE_CMP(sfs.f_type, BTRFS_SUPER_MAGIC);
+        on_btrfs = statfs(root, &sfs) >= 0 && sfs.f_type == (__SWORD_TYPE) BTRFS_SUPER_MAGIC;
         log_debug("On btrfs: %s", yes_no(on_btrfs));
 
         if (asprintf(&pack_fn_new, "%s/.readahead.new", root) < 0) {
diff --git a/src/shared/macro.h b/src/shared/macro.h
index 2bb72f0..9bf81dc 100644
--- a/src/shared/macro.h
+++ b/src/shared/macro.h
@@ -264,24 +264,6 @@ do {                                                                    \
         }                                                               \
 } while(false)
 
-/* Remove this macro, when the kernel has f_type as unsigned int or long
- * for every architecure. Currently some 64bit architecures (like s390x)
- * have int in the kernel, but long in userspace for f_type, so glibc
- * extends the int to long and carries over the sign. Negative numbers are
- * caused by the 32bit magic constants in linux/magic.h stuffed into the
- * signed int in the kernel and these negative numbers are extended to
- * long, which cannot be simply compared to the magic constants anymore.
- */
-#define F_TYPE_CMP(f_type, magic)                                       \
-        __extension__ ({                                                \
-                        __SWORD_TYPE _f = (f_type);                     \
-                        const __SWORD_TYPE _c = (magic);                \
-                        const int _c32 = 1 ? (magic)                    \
-                                    : sizeof((int[magic]){0});          \
-                        (_f == _c || _f == _c32 );                      \
-                })
-
-
 /* Returns the number of chars needed to format variables of the
  * specified type as a decimal string. Adds in extra space for a
  * negative '-' prefix. */
diff --git a/src/shared/util.c b/src/shared/util.c
index 1fc6c5a..5d03272 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -2779,9 +2779,8 @@ int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct
 
 static int is_temporary_fs(struct statfs *s) {
         assert(s);
-        return
-                F_TYPE_CMP(s->f_type, TMPFS_MAGIC) ||
-                F_TYPE_CMP(s->f_type, RAMFS_MAGIC);
+        return s->f_type == (__SWORD_TYPE) TMPFS_MAGIC ||
+                s->f_type == (__SWORD_TYPE) RAMFS_MAGIC;
 }
 
 int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev) {



More information about the systemd-commits mailing list