summaryrefslogtreecommitdiff
path: root/sys/geom/geom_int.h
Commit message (Collapse)AuthorAgeFilesLines
* Remove duplicate g_debugflags declaration.Alexander Motin2019-12-051-12/+0
| | | | | | | | | | While there, define G_F_FOOTSHOOTING instead of numeric constants. MFC after: 13 days X-MFX-with: r355412 Notes: svn path=/head/; revision=355420
* Use sbuf_cat() in GEOM confxml generation.Alexander Motin2019-06-191-0/+1
| | | | | | | | | | | When it comes to megabytes of text, difference between sbuf_printf() and sbuf_cat() becomes substantial. MFC after: 2 weeks Sponsored by: iXsystems, Inc. Notes: svn path=/head/; revision=349195
* sys/geom: adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-271-0/+2
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using misidentified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326270
* Escape special XML chars, returned by some devices, confusing XML parsers.Alexander Motin2013-11-271-0/+1
| | | | | | | MFC after: 1 month Notes: svn path=/head/; revision=258683
* Merge GEOM direct dispatch changes from the projects/camlock branch.Alexander Motin2013-10-221-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When safety requirements are met, it allows to avoid passing I/O requests to GEOM g_up/g_down thread, executing them directly in the caller context. That allows to avoid CPU bottlenecks in g_up/g_down threads, plus avoid several context switches per I/O. The defined now safety requirements are: - caller should not hold any locks and should be reenterable; - callee should not depend on GEOM dual-threaded concurency semantics; - on the way down, if request is unmapped while callee doesn't support it, the context should be sleepable; - kernel thread stack usage should be below 50%. To keep compatibility with GEOM classes not meeting above requirements new provider and consumer flags added: - G_CF_DIRECT_SEND -- consumer code meets caller requirements (request); - G_CF_DIRECT_RECEIVE -- consumer code meets callee requirements (done); - G_PF_DIRECT_SEND -- provider code meets caller requirements (done); - G_PF_DIRECT_RECEIVE -- provider code meets callee requirements (request). Capable GEOM class can set them, allowing direct dispatch in cases where it is safe. If any of requirements are not met, request is queued to g_up or g_down thread same as before. Such GEOM classes were reviewed and updated to support direct dispatch: CONCAT, DEV, DISK, GATE, MD, MIRROR, MULTIPATH, NOP, PART, RAID, STRIPE, VFS, ZERO, ZFS::VDEV, ZFS::ZVOL, all classes based on g_slice KPI (LABEL, MAP, FLASHMAP, etc). To declare direct completion capability disk(9) KPI got new flag equivalent to G_PF_DIRECT_SEND -- DISKFLAG_DIRECT_COMPLETION. da(4) and ada(4) disk drivers got it set now thanks to earlier CAM locking work. This change more then twice increases peak block storage performance on systems with manu CPUs, together with earlier CAM locking changes reaching more then 1 million IOPS (512 byte raw reads from 16 SATA SSDs on 4 HBAs to 256 user-level threads). Sponsored by: iXsystems, Inc. MFC after: 2 months Notes: svn path=/head/; revision=256880
* Introduce a kern.geom.notaste sysctl that can be used to temporarilyDag-Erling Smørgrav2013-09-241-0/+1
| | | | | | | | | | | | | disable GEOM tasting to avoid the "bouncing GEOM" problem where, when you shut down the consumer of a provider which can be viewed in multiple ways (typically a mirror whose members are labeled partitions), GEOM will immediately taste that provider's alter ego and reattach the consumer. Approved by: re (glebius) Notes: svn path=/head/; revision=255860
* Make g_wither_washer() to not loop by itself, but only when there was someAlexander Motin2013-03-241-1/+1
| | | | | | | | | | | | more topology change done that may require its attention. Add few missing g_do_wither() calls in respective places to signal it. This fixes potential infinite loop here when some provider is withered, but still opened or connected for some reason and so can not be destroyed. For example, see r227009 and r227510. Notes: svn path=/head/; revision=248674
* Use unit number allocation functions for GEOM minor numbers.Poul-Henning Kamp2004-10-251-8/+0
| | | | Notes: svn path=/head/; revision=136946
* Make withering water tight.Poul-Henning Kamp2004-07-081-0/+2
| | | | | | | | | | | | When we orphan/wither a provider, an attached geom+consumer could end up being withered as a result and it may be in front of us in the normal object scanning order so we need to do multi-pass. On the other hand, there may be withering stuff we can't get rid off (yet), so we need to keep track of both the existence of withering stuff and if there is more we can do at this time. Notes: svn path=/head/; revision=131820
* Rearrange some of the GEOM debugging tools to be more structured.Poul-Henning Kamp2004-03-101-3/+1
| | | | | | | | | | | | | | | | | | | | | Retire g_sanity() and corresponding debugflag (0x8) Retire g_{stall,release}_events(). Under #ifdef DIAGNOSTIC: Make g_valid_obj() an official function and have it return an an non-zero integer which indicates the kind of object when found. Implement G_VALID_{CLASS,GEOM,CONSUMER,PROVIDER}() macros based on g_valid_obj(). Sprinkle calls to these macros liberally over the infrastructure. Always check that we do not free a live object. Notes: svn path=/head/; revision=126798
* More of the event stuff can now be private to geom_event.cPoul-Henning Kamp2003-04-231-11/+0
| | | | Notes: svn path=/head/; revision=113938
* Rename g_call_me() to g_post_event(), and give it a flagPoul-Henning Kamp2003-04-231-1/+1
| | | | | | | argument to determine if we can M_WAITOK in malloc. Notes: svn path=/head/; revision=113937
* Remove the now unused hardcoded g_post_event() event support.Poul-Henning Kamp2003-04-231-12/+0
| | | | Notes: svn path=/head/; revision=113934
* Turn EV_NEW_PROVIDER into a g_call_me() event.Poul-Henning Kamp2003-04-231-1/+0
| | | | Notes: svn path=/head/; revision=113930
* Convert EV_SPOILED event to use g_call_me().Poul-Henning Kamp2003-04-231-1/+0
| | | | Notes: svn path=/head/; revision=113929
* Turn the hardwired NEW_CLASS event into a g_call_me() event.Poul-Henning Kamp2003-04-231-1/+0
| | | | Notes: svn path=/head/; revision=113927
* Move the shutdown eventhandler stuff to a more logical place.Poul-Henning Kamp2003-04-231-0/+1
| | | | Notes: svn path=/head/; revision=113926
* Add handling for cancelled events in the g_call_me() methods.Poul-Henning Kamp2003-04-021-1/+0
| | | | Notes: svn path=/head/; revision=112989
* Change events to have an array of "void *" references, and give thePoul-Henning Kamp2003-04-021-9/+8
| | | | | | | | | | | | | | event posting functions varargs to fill these. Attribute g_call_me() to appropriate g_geom's where necessary. Add a flag argument to g_call_me() methods which will be used to signal cancellation of events in the future. This commit should be a no-op. Notes: svn path=/head/; revision=112988
* Remove some debugging in the new OAM[*] and add a debug flag for otherPoul-Henning Kamp2003-03-311-0/+1
| | | | | | | | | | | | parts of it. [*] I've been asked what "OAM" means: It's an acronym used in the telecom industry, "Operations And Maintenance", and there it covers anything from a single unlabeled led on the frontpanel the the full nightmare of CMIP for SS7. Notes: svn path=/head/; revision=112876
* Turn /dev/geom.ctl from a GEOM class into a plain character device driverPoul-Henning Kamp2003-03-241-0/+3
| | | | | | | instead, it will never see a disk-I/O transaction, so this is a lot simpler. Notes: svn path=/head/; revision=112534
* Introduce g_cancel_events() and use it a couple of places where it makesPoul-Henning Kamp2003-03-231-0/+1
| | | | | | | sense. Notes: svn path=/head/; revision=112518
* Introduce an SX lock which allows us to stall event processingPoul-Henning Kamp2003-03-231-0/+2
| | | | | | | during OAM operations. Notes: svn path=/head/; revision=112517
* Mitigate deadlock situation pending a more complete solution.Poul-Henning Kamp2003-03-211-1/+4
| | | | Notes: svn path=/head/; revision=112476
* Retire the GEOM private statistics code and use devstat instead.Poul-Henning Kamp2003-03-181-5/+0
| | | | Notes: svn path=/head/; revision=112370
* Implement a handle for efficient implementation of perforations inPoul-Henning Kamp2003-02-121-4/+7
| | | | | | | | | | | | | | | | lower extremities. Setting bit 4 in debugflags (sysctl kern.geom.debugflags=16) will allow any open to succeed on rank#1 providers. This will generally correspond to the physical disk devices: ad0, da0, md0 etc. This fundamentally violates the mechanics of GEOMs autoconfiguration, and is only provided as a debugging facility, so obviously error reports on GEOM where this bit is or has been set will not be accepted. Notes: svn path=/head/; revision=110759
* Move the g_stat struct to its own .h file, we will export it to other code.Poul-Henning Kamp2003-02-081-0/+5
| | | | | | | | | | | | | | | | | | | | | Insted of embedding a struct g_stat in consumers and providers, merely include a pointer. Remove a couple of <sys/time.h> includes now unneeded. Add a special allocator for struct g_stat. This allocator will allocate entire pages and hand out g_stat functions from there. The "id" field indicates free/used status. Add "/dev/geom.stats" device driver whic exports the pages from the allocator to userland with mmap(2) in read-only mode. This mmap(2) interface should be considered a non-public interface and the functions in libgeom (not yet committed) should be used to access the statistics data. Notes: svn path=/head/; revision=110541
* Move #defines of major/minor to internal header file so other bits canPoul-Henning Kamp2003-02-081-1/+8
| | | | | | | share and coordinate with geom_dev. Notes: svn path=/head/; revision=110540
* Commit the correct copy of the g_stat structure.Poul-Henning Kamp2003-02-071-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add debug.sizeof.g_stat sysctl. Set the id field of the g_stat when we create consumers and providers. Remove biocount from consumer, we will use the counters in the g_stat structure instead. Replace one field which will need to be atomically manipulated with two fields which will not (stat.nop and stat.nend). Change add companion field to bio_children: bio_inbed for the exact same reason. Don't output the biocount in the confdot output. Fix KASSERT in g_io_request(). Add sysctl kern.geom.collectstats defaulting to off. Collect the following raw statistics conditioned on this sysctl: for each consumer and provider { total number of operations started. total number of operations completed. time last operation completed. sum of idle-time. for each of BIO_READ, BIO_WRITE and BIO_DELETE { number of operations completed. number of bytes completed. number of ENOMEM errors. number of other errors. sum of transaction time. } } API for getting hold of these statistics data not included yet. Notes: svn path=/head/; revision=110523
* Add the remaning part of the new libdisk interaction.Poul-Henning Kamp2002-10-281-0/+1
| | | | | | | | | | WARNING: This is not a published interface, it is a stopgap measure for WARNING: libdisk so we can get 5.0-R out of the door. Sponsored by: DARPA & NAI Labs Notes: svn path=/head/; revision=106101
* Properly isolate the locking domains of sysctl from the topology lockPoul-Henning Kamp2002-10-041-3/+3
| | | | | | | | | for the sysctls which report the configuration. Sponsored by: DARPA & NAI Labs. Notes: svn path=/head/; revision=104452
* Disable the g_sanity() check unless people ask for it in the debugflags.Poul-Henning Kamp2002-09-301-0/+4
| | | | | | | Sponsored by: DARPA & NAI Labs. Notes: svn path=/head/; revision=104191
* Style, whitespace and lint fixes.Poul-Henning Kamp2002-09-281-1/+0
| | | | | | | Sponsored by: DARPA & NAI Labs. Notes: svn path=/head/; revision=104087
* Implement g_call_me() as a way for geom methods to schedule operationsPoul-Henning Kamp2002-09-271-0/+3
| | | | | | | | | | | | | | | | | | | to be performed in the event-thread. To do this, we need to lock the eventlist with g_eventlock (nee g_doorlock), since g_call_me() being called from the UP/DOWN paths will not be able to aquire g_topology_lock. This also means that for now these events are not referenced on any particular consumer/provider/geom. For UP/DOWN path use, this will not become a problem since the access() function will make sure we drain any bio's before we dismantle. Sponsored by: DARPA & NAI Labs. Notes: svn path=/head/; revision=104056
* s/classs/classes/ to fixup grammer after the previous global renaming.Poul-Henning Kamp2002-04-041-1/+1
| | | | | | | Sponsored by: DARPA & NAI Labs Notes: svn path=/head/; revision=93774
* Eliminate some thread pointers which do not make sense anymore.Poul-Henning Kamp2002-03-261-0/+87
Split private parts of geom.h into geom_int.h. The latter should never be included in class implemtations. Notes: svn path=/head/; revision=93250