DELETE_MODULE

Manuel du programmeur Linux (2)
8 novembre 2012
 

NOM

delete_module - Décharger un module de noyau  

SYNOPSIS

int delete_module(const char *name, int flags);

Remarque : il n'existe pas de fonction glibc autour de cet appel système ; consultez NOTES.  

DESCRIPTION

L'appel système delete_module() essaye de supprimer une entrée de module chargeable inutilisée identifiée par name. Si le module à une fonction exit, alors cette fonction est exécutée avant de décharger le module. L'argument flags est utilisé pour modifier le comportement de l'appel système, conformément à la description ci-dessous. Cet appel système nécessite des droits.

La suppression de module est essayée d'après les règles suivantes.

1.
Si d'autres modules chargés dépendent de (c'est-à-dire font référence aux symboles définis dans) ce module, alors l'appel échoue.
2.
Sinon, si le nombre de références pour ce module (c'est-à-dire le nombre de processus utilisant actuellement ce module) est nul, alors le module est immédiatement déchargé.
3.
Si un module a un nombre de références non nul, alors le comportement dépend des bits définis dans flags. En utilisation normale (consultez NOTES), l'attribut O_NONBLOCK est toujours indiqué, et l'attribut O_TRUNC pourrait être aussi indiqué.

Les diverses combinaisons de flags ont les effets suivants.

flags == O_NONBLOCK
L'appel se termine immédiatement, avec une erreur.
flags == (O_NONBLOCK | O_TRUNC)
Le module est déchargé immédiatement, quelque soit le nombre de références.
(flags & O_NONBLOCK) == 0
Si flags n'indique pas O_NONBLOCK, les étapes suivantes se succèdent :
*
le module est marqué de telle sorte qu'aucune nouvelle référence est permise ;
*
si le nombre de références du module est non nul, l'appelant est placé en état de sommeil non interruptible (TASK_UNINTERRUPTIBLE) jusqu'à ce que le nombre de références soit nul, à ce moment l'appel est débloqué ;
*
le module est déchargé normalement

L'attribut O_TRUNC a un effet supplémentaire sur les réglés décrites précédemment. Par défaut, si un module a une fonction init mais pas de fonction exit, essayer de supprimer ce module échouera. Cependant, si O_TRUNC a été indiqué, cette condition est contournée.

Utiliser l'attribut O_TRUNC est dangereux. Si le noyau n'a pas été construit avec CONFIG_MODULE_FORCE_UNLOAD, cet attribut est ignoré silencieusement (normalement, CONFIG_MODULE_FORCE_UNLOAD est activé). Utiliser cet attribut corrompt le noyau (TAINT_FORCED_RMMOD).  

VALEUR RENVOYÉE

S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et définit errno en conséquence.  

ERREURS

EBUSY
Le module n'est pas « actif » (c'est-à-dire qu'il est encore en cours d'initialisation ou déjà marqué pour la suppression), ou le module a une fonction init mais pas de fonction exit, et O_TRUNC n'a pas été indiqué dans flags.
EFAULT
name fait référence à un emplacement en dehors de l'espace d'adressage accessible du processus.
ENOENT
Il n'existe aucun module de ce nom.
EPERM
L'appelant n'avait pas les droits (n'avait pas la capacité CAP_SYS_MODULE), ou le déchargement de module est désactivé (consultez /proc/sys/kernel/modules_disabled dans proc(5)).
EWOULDBLOCK
D'autres modules dépendent de ce module, ou O_NONBLOCK a été indiqué dans flags, mais le nombre de références est non nul et O_TRUNC n'a pas été indiqué dans flags.
 

CONFORMITÉ

delete_module() est spécifique à Linux.  

NOTES

La glibc ne fournit pas de fonction autour de cet appel système ; utilisez syscall(2) pour l'appeler.

Le sommeil non interruptible qui peut arriver si O_NONBLOCK est omis de flags est considéré indésirable, parce que le processus dormant est laissé dans un état non tuable. Avec Linux 3.7, indiquer O_NONBLOCK est facultatif, mais à l'avenir, ce sera probablement obligatoire.  

Linux 2.4 et antérieurs

Dans Linux 2.4 et antérieurs, l'appel système ne prend qu'un argument :

int delete_module(const char *name);

Si name est NULL, tous les modules non utilisés marqués à nettoyer automatiquement sont supprimés.

De plus amples précisions sur les différences de comportement de delete_module() dans Linux 2.4 et antérieurs ne sont actuellement pas expliquées dans cette page de manuel.  

VOIR AUSSI

create_module(2), init_module(2), query_module(2), lsmod(8), modprobe(8), rmmod(8)  

COLOPHON

Cette page fait partie de la publication 3.66 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.  

TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Alain Portal <http://manpagesfr.free.fr/> (2006-2007).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».


 

Index

NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
NOTES
Linux 2.4 et antérieurs
VOIR AUSSI
COLOPHON
TRADUCTION

This document was created by man2html, using the manual pages.
Time: 21:52:34 GMT, July 12, 2014