Rubriques Unix et Oracle
Accueil du siteSystèmes UnixLinux
Blocage Samba Redhat 9
samedi 16 octobre 2004
par Laurent
popularité : 9%

Le bug

Le problème est assez simple. Lorsque vous essayez de monter un partage SMB sous votre linux sous Redhat 9. Le partage se réalise mais le process smbmount (mount.smbfs) ne rend pas la main. Cette opération devient pénible lorsque le montage de vos partages smb se fait au démarrage de votre système (via netfs).

Le problème vient du fait que, lorsque l’appel à smbmount est réalisé. Deux processus sont lancés. Le processus père étant détenu par root, le fils étant anonyme. C’est ce dernier qui est responsable du montage. Lorsque le montage est réalisé le père doit détacher le fils et se tuer (argh). Mais un léger problème de synchro inter-process empèche l’opération.

Résoudre le problème

Pour se faire, j’ai mis une petite "bidouille" dans le code de smbmount.c. Le truc est assez simple, comme il y a un problème de timing lors du signal au père que tout est OK et qu’il peut se suicider, on va allonger ce timing par ajout d’un petit sleep. Juste avant le montage pour ainsi dire, ce qui va avoir pour but de décaler les opérations du fils par rapport à ce qu’attend le papa !

Mon truc se situe (sous Samba 3.0.6) au niveau du fichier smbmount.c au niveau de la ligne 499 (fonction init_mount). On ajoute un sleep d’une seconde (ca marche et ca ne se sent pas). On obtient alors un truc comme ca :


if (sys_fork() == 0) {
 sleep(1); /* Ligne ajoutée */
 char *smbmnt_path;
 asprintf(&smbmnt_path, "%s/smbmnt", dyn_BINDIR);
        if (file_exist(smbmnt_path, NULL)) {
          execv(smbmnt_path, args);
          fprintf(stderr,
          "smbfs/init_mount: execv of %s failed. Error was %s.",smbmnt_path, strerror(errno));
        } else {
          execvp("smbmnt", args);
          fprintf(stderr,
          "smbfs/init_mount: execv of %s failed. Error was %s.",
          "smbmnt", strerror(errno));
        }
        free(smbmnt_path);
        exit(1);
}

Voilà, ca vaut ce que ca vaut, mais je n’ai pas trouvé de solution plus "propre".

 
Articles de cette rubrique
  1. Blocage Samba Redhat 9
    16 octobre 2004

  2. Bonding reseau sous Linux
    29 décembre 2004