•  Back 
  •  Der Aufbau eines XFS 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File11.21.2.7  xfs_ddelete                                             TOS

 Name:         »xfs_ddelete« - löscht ein Verzeichnis

 Parameter:

                a0 =     DD *
                -> d0 =  long errcode

 Beschreibung: Diese Funktion musste ab MagiC Version 4.01 geändert 
               werden. Für MagiC < 4.01 (Kernelversion < 3) gilt:

               Beim Löschen ist darauf zu achten, daß kein Verzeichnis 
               durch den Kernel referenziert sein darf außer durch den 
               Aufruf selbst (d.h. es muß dd_refcnt == 1 sein). 
               Außerdem ist darauf zu achten, daß keine Dateien im 
               Verzeichnis liegen. ELINK darf nicht zurückgegeben 
               werden, symbolische Links dürfen nicht behandelt 
               werden. Die Zugriffsberechtigung muß (falls eine 
               existiert) vom XFS geprüft werden.

               Für MagiC < 4.01 (Kernelversion >= 3) gilt:

               Wegen Reentranzproblematiken ergeben sich einigen 
               Änderungen, wobei der Kernel dem XFS Zugriffskontrollen 
               abnimmt und weiterhin der Kernel den DD freigibt, nicht 
               das XFS: Der Kernel öffnet zunächst mit xfs_path2DD den 
               Parent des zu löschenden Verzeichnisses, dann testet er 
               mit xfs_xattr, ob es sich um einen Symlink handelt, und 
               löscht ihn ggf. per xfs_fdelete.

               Handelt es sich um ein Verzeichnis, öffnet der Kernel 
               dieses wieder per xfs_path2DD (Modus 1) und gibt den 
               Parent wieder per xfs_freeDD frei. Die Überprüfung von 
               dd_refcnt wird vom Kernel durchgeführt, der Zähler kann 
               und muß daher vom XFS ignoriert werden. Das XFS muß nun 
               sicherstellen, daß das zu löschende Verzeichnis bzw. 
               der DD nicht anderweitig geöffnet oder benutzt werden 
               können (wichtig für reentrante XFSs). Das XFS löscht 
               dann das Verzeichnis, gibt aber den DD nicht (!) frei, 
               damit der Kernel im Erfolgsfall (Rückgabe E_OK) vorher 
               seine Standardpfade freigeben kann. Der Kernel ruft 
               dann xfs_freeDD auf. Wie gehabt, muß das XFS prüfen, ob 
               das Verzeichnis leer ist, bzw. Zugriffsberechtigungen 
               existieren.

               Nochmal im Zusammenhang:

                  ∙ Kernel ermittelt zu löschenden DD, prüft 
                    Referenzzähler.

                  ∙ xfs_ddelete sperrt den DD. Wenn das nicht geht, 
                    wird EACCDN geliefert.

                  ∙ xfs_ddelete löscht das Verzeichnis, wenn es leer 
                    ist. Der DD wirkt dabei als Sperre für parallel 
                    laufende Versuche, das gerade gelöschte 
                    Verzeichnis zu benutzen.

                  ∙ xfs_ddelete läßt den jetzt ungültigen, aber noch 
                    als Sperre dienenden DD weiterhin gültig (im 
                    Gegensatz zum alten Konzept).

                  ∙ Der Kernel macht bei Erfolg seine Standardpfade 
                    ungültig.

                  ∙ Der Kernel gibt den DD frei.

 Gruppe:       Aufbau eines XFS

 Querverweis:  XFS-Konzept in MagiC   Ddelete