linux Argument type incompatible with `printk' format string AMIGA's ramdisk support contains a type error (reported as a warning by gcc) when LBDAF is enabled. The result of `blk_rq_pos(req)' has type `sector_t' and is printed as an unsigned long value. Yet, when LBDAF is enabled, type `sector_t' is defined as unsigned long long. There is no safe cast from unsigned long long to unsigned long. The fix consists in printing the value as unsigned long long instead, without losing precision when LBDAF is enabled.

Bug fixed by commit e1fbd9210d5
Type IncompatibleType
Config "AMIGA_Z2RAM && LBDAF" (2nd degree)
Fix-in code
Location drivers/
#include <stdio.h>

#ifdef CONFIG_LBDAF
typedef unsigned long long sector_t;
#else
typedef unsigned long sector_t;
#endif

sector_t blk_rq_pos() {
  return 0;
}

#ifdef CONFIG_AMIGA_Z2RAM
static void do_z2_request() {
  printf("bad access: block=%lu\n", blk_rq_pos()); // ERROR
}
#endif

int main() {
  #ifdef CONFIG_AMIGA_Z2RAM
  do_z2_request();
  #endif
  return 0;
}

#include <stdio.h>

#ifdef CONFIG_LBDAF
typedef unsigned long long sector_t;
#else
typedef unsigned long sector_t;
#endif

int main() {
  #ifdef CONFIG_AMIGA_Z2RAM
//  do_z2_request();
  printf("bad access: block=%lu\n", (sector_t) 0); // ERROR
  #endif
  return 0;
}
. drivers/block/z2ram.c:80: printk( KERN_ERR DEVICE_NAME ": bad access: block=%lu, count=%u\n",