Несколько вещей:
Вы хотите использовать «unlocked_ioctl», а не «compat_ioctl». Функциональный интерфейс для «device_ioctl» неверен (см. [F2]), это должно быть: long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
Приложение appln.c не проверяет коды ошибок (open, ioctl). После исправления кода код будет работать нормально.