Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-4674

__{LITTLE,BIG}_ENDIAN macros used incorrectly

    XMLWordPrintable

Details

    • 3
    • 12829

    Description

      There are a few places in the source where __

      {LITTLE,BIG}

      _ENDIAN is tested with #ifdef:

      static __inline__ int ext2_set_bit(int nr, void *addr)
      {
      #ifdef __BIG_ENDIAN
              return set_bit((nr ^ ((BITS_PER_LONG-1) & ~0x7)), addr);
      #else
              return set_bit(nr, addr);
      #endif
      }
      
      const struct dt_rec *osd_quota_pack(struct osd_object *obj,
                                          const struct dt_rec *rec,
                                          union lquota_rec *quota_rec)
      {
      #ifdef __BIG_ENDIAN
              struct iam_descr        *descr;
      
              LASSERT(obj->oo_dir != NULL);
              descr = obj->oo_dir->od_container.ic_descr;
      
              memcpy(quota_rec, rec, descr->id_rec_size);
      
              osd_quota_swab((char *)quota_rec, descr->id_rec_size);
              return (const struct dt_rec *)quota_rec;
      #else
              return rec;
      #endif
      }
      

      In userspace, including endian.h always defines __BIG_ENDIAN to 4321. The correct test is '#if __BYTE_ORDER == __BIG_ENDIAN'. All uses of these macros should be audited.

      Attachments

        Activity

          People

            jhammond John Hammond
            jhammond John Hammond
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: