Nowe posty

Autor Wątek: Jaki kod błędu zwracać z kernela?  (Przeczytany 171 razy)

Offline overcq

  • Nowy na forum
  • *
  • Wiadomości: 36
    • Zobacz profil
    • ‛overcq’
Jaki kod błędu zwracać z kernela?
« dnia: 2024-06-08, 18:26:47 »
Tworzę pewien moduł związany z systemem plików dla kernela Linuksa i zastanawiam się, jaki błąd ma zwracać ‘syscall’ w następującym przypadku: jeśli podczas montowania systemu plików wykryto błąd integralności struktury systemu plików uniemożliwiający zamontowanie. Jeśli by wybierać z podstawowych błędów z pliku “/usr/include/asm-generic/errno-base.h”:
#define EPERM            1      /* Operation not permitted */
#define ENOENT           2      /* No such file or directory */
#define ESRCH            3      /* No such process */
#define EINTR            4      /* Interrupted system call */
#define EIO              5      /* I/O error */
#define ENXIO            6      /* No such device or address */
#define E2BIG            7      /* Argument list too long */
#define ENOEXEC          8      /* Exec format error */
#define EBADF            9      /* Bad file number */
#define ECHILD          10      /* No child processes */
#define EAGAIN          11      /* Try again */
#define ENOMEM          12      /* Out of memory */
#define EACCES          13      /* Permission denied */
#define EFAULT          14      /* Bad address */
#define ENOTBLK         15      /* Block device required */
#define EBUSY           16      /* Device or resource busy */
#define EEXIST          17      /* File exists */
#define EXDEV           18      /* Cross-device link */
#define ENODEV          19      /* No such device */
#define ENOTDIR         20      /* Not a directory */
#define EISDIR          21      /* Is a directory */
#define EINVAL          22      /* Invalid argument */
#define ENFILE          23      /* File table overflow */
#define EMFILE          24      /* Too many open files */
#define ENOTTY          25      /* Not a typewriter */
#define ETXTBSY         26      /* Text file busy */
#define EFBIG           27      /* File too large */
#define ENOSPC          28      /* No space left on device */
#define ESPIPE          29      /* Illegal seek */
#define EROFS           30      /* Read-only file system */
#define EMLINK          31      /* Too many links */
#define EPIPE           32      /* Broken pipe */
#define EDOM            33      /* Math argument out of domain of func */
#define ERANGE          34      /* Math result not representable */
“EIO”? Ale wydaje się, że jest bardziej związane z błędem odczytu/zapisu.
“EFAULT”?
Brakuje czegoś takiego jak “EDATA”.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Jaki kod błędu zwracać z kernela?
« Odpowiedź #1 dnia: 2024-06-09, 07:24:34 »
A,co w tej sytuacji zwracają inne FSy? Ja bym grawitował w kierunku EINVAL.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline overcq

  • Nowy na forum
  • *
  • Wiadomości: 36
    • Zobacz profil
    • ‛overcq’
Odp: Jaki kod błędu zwracać z kernela?
« Odpowiedź #2 dnia: 2024-06-09, 09:18:02 »
A “EINVAL” to nie w przypadku podawania do procedury niepoprawnego argumentu?
Na przykład w pliku “fs/ext4/inode.c” są zwracane następujące błędy:
EAGAIN
EBUSY
EFBIG
EFSCORRUPTED
EINVAL
EIO
ENOMEM
ENOSPC
ENOTBLK
EOPNOTSUPP
EOVERFLOW
EPERM
ERANGE
EROFS

Wygląda na to, że panuje pełna dowolność, brak specyfikacji. Niektóre błędy mówią o tym, że coś jest uszkodzone czyli system plików nie jest ‘clean’ (“EFSCORRUPTED”, przy czym jest to niestandardowy błąd), inne – że skończył się zakres liczby (“EOVERFLOW”), jeszcze inne – że system plików jest tylko do odczytu mimo błędu (“EROFS”), podczas gdy “EIO” jest jako ‘default’, głównie przy operacjach odczytu/zapisu.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Jaki kod błędu zwracać z kernela?
« Odpowiedź #3 dnia: 2024-06-09, 12:29:22 »
To mam wrażenie, że właśnie sam odpowiedziałeś na swoje pytanie :)
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy