dragonfly.git
8 years ago/usr/Makefile: Fix typo in a message about the pkg bootstrap.
Sascha Wildner [Sat, 5 Sep 2015 17:14:36 +0000 (19:14 +0200)]
/usr/Makefile: Fix typo in a message about the pkg bootstrap.

8 years agoContinue working on libc symbol maps
John Marino [Sat, 5 Sep 2015 14:10:48 +0000 (16:10 +0200)]
Continue working on libc symbol maps

8 years agoAdd static keyword to four functions to match prototype (libc)
John Marino [Sat, 5 Sep 2015 14:09:13 +0000 (16:09 +0200)]
Add static keyword to four functions to match prototype (libc)

8 years agodrm: drm_fb_cma_helper.c has a restrictive license, remove it
François Tigeot [Sat, 5 Sep 2015 07:25:11 +0000 (09:25 +0200)]
drm: drm_fb_cma_helper.c has a restrictive license, remove it

8 years agosys/vfs/hammer: Rename btree_set_parent() to btree_set_parent_of_child()
Tomohiro Kusumi [Thu, 3 Sep 2015 17:15:17 +0000 (02:15 +0900)]
sys/vfs/hammer: Rename btree_set_parent() to btree_set_parent_of_child()

This commit renames btree_set_parent() to btree_set_parent_of_child()
since btree_set_parent() is counter-intuitive.

1. btree_get_parent(node)
returns node's parent, but
2. btree_set_parent(node, elm)
sets its child's parent to node instead of setting node's parent
to something, which isn't quite expected behavior from the way
these two functions are named.

8 years agosys/vfs/hammer: #if0 cursor_exclreq_count of inode and node
Tomohiro Kusumi [Wed, 2 Sep 2015 17:38:45 +0000 (02:38 +0900)]
sys/vfs/hammer: #if0 cursor_exclreq_count of inode and node

hammer code that refers to 'cursor_exclreq_count' is #if0'd,
so #if0 this field from struct definitions as well.

Since #if0'd code aren't logically obsolete but just disabled,
it's probably better not to remove them at this point.

The change does not affect abi as these structs and fields
are not size/position/ondisk-layout sensitive.

8 years agosys/vfs/hammer: Cleanup incore record tree lookup
Tomohiro Kusumi [Tue, 1 Sep 2015 11:27:37 +0000 (20:27 +0900)]
sys/vfs/hammer: Cleanup incore record tree lookup

8 years agosys/vfs/hammer: Cleanup parent inode dereferenced by record
Tomohiro Kusumi [Tue, 1 Sep 2015 11:27:09 +0000 (20:27 +0900)]
sys/vfs/hammer: Cleanup parent inode dereferenced by record

8 years agosbin/hammer: Add some assertions
Tomohiro Kusumi [Sun, 30 Aug 2015 14:00:36 +0000 (23:00 +0900)]
sbin/hammer: Add some assertions

8 years agosbin/hammer: Fix boundary test on hammer show [3/3]
Tomohiro Kusumi [Sun, 30 Aug 2015 09:25:12 +0000 (18:25 +0900)]
sbin/hammer: Fix boundary test on hammer show [3/3]

Separate child node test info RBN and non-RBN. hammer must
have set subtree_offset=0 for RBN and is considered error
if !=0.

8 years agosbin/hammer: Fix boundary test on hammer show [2/3]
Tomohiro Kusumi [Sun, 30 Aug 2015 07:50:18 +0000 (16:50 +0900)]
sbin/hammer: Fix boundary test on hammer show [2/3]

get_elm_flags() using HAMMER_BTREE_TYPE_INTERNAL for btype
of RBN of an internal node is not correct because btype of
RBN is actually not specified. It could be internal or leaf
or possibly 0, while RBN has no child regardless of the btype
value.

This results in get_elm_flags() having incorrect (but does
not fail with 'B' mark) condition for left/right elm test
for internal node. The correct way is to separate RBN case
from non-RBN case. RBN logically has no child node (hammer
erases child node offset with 0 on node split, if not zero
clears the whole elm), so it can't be handled in the same
switch(btype) cases like others are.

Separating RBN from non-RBN (normal ELM) makes possible for
each elm in an internal node to have correct left/right test.
* non-RBN is the same as leaf node, so add test_lr() and
  use this in both internal and leaf node.
* RBN needs to be handled differently, so add test_rbn_lr()
  and use this for RBN. The difference is that in RBN
  hammer_btree_cmp(&elm->base, right_bound) == 0
  could happen, so test_rbn_lr() can not set FLAG_TOOFARRIGHT
  when it's ==0. Below is some details on how this happens
  on RBN but not on non-RBN.

==========
(A)
This is what happens on internal split.

before split
I
0 1 2 3 ...     n
E E E E E E E E E R
           /
          /
         I                   62
         0 1 2 s ...       61|
         E E E E E E E E E E R

after split
I                 n+1
0 1 2 3 ...   p   |
E E E E E E E E E E R
           /   \
          /     \
         I       I           62-s-1
         0 1 2 s 0 1 2 ...   |
         E E E R=E E E E E E E R

From the way hammer_split_internal() is implemented,
E[p].base which points to the new child node is a copy of
E[0].base in the new child node. Given that this E[0] is
a copy of R(RBN) in the original child node (that was E[s]
before internal split and was src of bcopy()), E[p].base
also equals this R.base.

Therefore
hammer_btree_cmp(&elm->base, right_bound) == 0
does happen for a right boundary elm where elm is R(RBN)
and right_bound is &E[p].base. For non-RBN elms this is
considered error for the same reason as leaf split case
explained below.

==========
(B)
This is what happens on leaf split which is similar to above
but not the same.
before split
I
0 1 2 3 ...     n
E E E E E E E E E R
           /
          /
         L
         0 1 2 s ...         62
         E E E E E E E E E E E

after split
I                 n+1
0 1 2 3 ...   p   |
E E E E E E E E E E R
           /   \
          /     \
         L       L             62-s-1
         0 1 2 s 0 1 2 ...     |
         E E E   E E E E E E E E

hammer_leaf_split() basically does the same as internal,
but the difference is that E[s] in the original child node
does not become a boundary, nor does it point to a child.
E[s] is just a junk space just like all the rest of the
elms in the original child node.

(Also leaf split tries to make E[p].base <= E[0].base of
the new child node, instead of just copying E[0].base to
E[p].base and make them equal like internal split does.
See hammer_make_separator() for details.)

This makes
hammer_btree_cmp(&elm->base, right_bound) == 0
not happen and considered error if it happens, where elm
is either of E[0]..E[s-1] in the original child node and
right_bound is &E[p].base.

8 years agosbin/hammer: Fix boundary test on hammer show [1/3]
Tomohiro Kusumi [Sun, 30 Aug 2015 07:07:20 +0000 (16:07 +0900)]
sbin/hammer: Fix boundary test on hammer show [1/3]

This commit actually doesn't fix anything, but just to make
get_elm_flags() take elm index instead of btype.

get_elm_flags() needs elm index to correctly test boundary
and non-boundary elements. btype can be retrieved from elm
itself, so it doesn't need to be passed as an argument.

XXX part is where it needs to be fixed.

8 years agosbin/hammer: Make hammer show test node count
Tomohiro Kusumi [Sat, 29 Aug 2015 16:03:18 +0000 (01:03 +0900)]
sbin/hammer: Make hammer show test node count

8 years agosbin/hammer: Make hammer blockmap|checkmap|show print # of 'B' on -v
Tomohiro Kusumi [Sat, 29 Aug 2015 11:40:34 +0000 (20:40 +0900)]
sbin/hammer: Make hammer blockmap|checkmap|show print # of 'B' on -v

similar to the way hammer checkmap prints # of errors,
and some refactoring around that part.

(otherwise one has to search for "^B" to see if there
is any error in some 100M bytes hammer show result for
large fs)

8 years agosbin/hammer: Add hammer stats command (= bstats + iostats)
Tomohiro Kusumi [Fri, 28 Aug 2015 18:35:30 +0000 (03:35 +0900)]
sbin/hammer: Add hammer stats command (= bstats + iostats)

It's simply good to have a command that combines these two.
One often runs these two concurrently and tries to see both
at the same time anyway.

8 years agohammer: Remove cluster topology related comments
Tomohiro Kusumi [Fri, 28 Aug 2015 10:33:07 +0000 (19:33 +0900)]
hammer: Remove cluster topology related comments

that were written in the early stage of hammer devel
but do not reflect the actual implementation today,
such as super-cluster, etc.

8 years agosbin/hammer: Remove obsolete variable UsingSuperClusters
Tomohiro Kusumi [Fri, 28 Aug 2015 15:01:28 +0000 (00:01 +0900)]
sbin/hammer: Remove obsolete variable UsingSuperClusters

This variable is no longer used and not necessary.

This was added in the early stage of hammer devel
when the real clustering code was being written, but
never removed when the clustering part was removed.

8 years agosys/vfs/hammer: Remove redundant elm type check [2/2]
Tomohiro Kusumi [Sat, 29 Aug 2015 08:08:50 +0000 (17:08 +0900)]
sys/vfs/hammer: Remove redundant elm type check [2/2]

The following code(A) in hammer_cursor_down() is redundant.
It works the same with or without if/else conditional.

hammer_is_internal_node_elm(elm) == 1
and
node->ondisk->type == HAMMER_BTREE_TYPE_INTERNAL
are essentially the same thing from the way hammer's ondisk
data structure is designed.

If above is not true, then it ends up calling panic().
Then (A) can be written like (B), and (B) can be written
like (C) since it's either panic or not panic anyway.

Also the way (C) looks is natural given that the purpose
of this function is to move the cursor downward to one of
its children. It must be an internal (non-leaf) to be able
to go down.

=====(A)
if (hammer_is_internal_node_elm(elm)) {
/* below never fails if above is true, and */
/* above would have never failed if below is true */
KKASSERT(node->ondisk->type == HAMMER_BTREE_TYPE_INTERNAL);
go_down();
} else {
panic();
}
=====

=====(B)
if (node->ondisk->type == HAMMER_BTREE_TYPE_INTERNAL) {
go_down();
} else {
panic();
}
=====

=====(C)
KKASSERT(node->ondisk->type == HAMMER_BTREE_TYPE_INTERNAL);
go_down();
=====

8 years agosys/vfs/hammer: Remove redundant elm type check [1/2]
Tomohiro Kusumi [Thu, 27 Aug 2015 21:04:55 +0000 (06:04 +0900)]
sys/vfs/hammer: Remove redundant elm type check [1/2]

hammer_btree_lock_children() assumes the node is internal,
but not leaf or anything else. Also given that all elms[]
within a node has the same elm type (i.e. all elms[] use
the same union member of hammer_btree_elm_t), this function
doesn't need to check if each elms[i] is a node element
of an internal node.

If elms[] are not elements of an internal node, then the
caller is not using this function right rather than this
function missing sanity checks.

In fact this is (only)used by hammer_split_internal() and
reblock/rebalance code where they deal with internal nodes.
They all do pass an internal node.

8 years agosys/vfs/hammer: Remove prototype of not existing fucntion
Tomohiro Kusumi [Mon, 31 Aug 2015 10:20:09 +0000 (19:20 +0900)]
sys/vfs/hammer: Remove prototype of not existing fucntion

This function no longer exists.
Also fix wrong name in kprintf().

8 years agosys/vfs/hammer: Cleanup debug kprintfs for cursor/elm
Tomohiro Kusumi [Tue, 25 Aug 2015 15:30:37 +0000 (00:30 +0900)]
sys/vfs/hammer: Cleanup debug kprintfs for cursor/elm

Most of the kprintfs in sys/vfs/hammer/hammer_btree.c
that are used only when vfs.hammer.debug_btree is set
do the same thing (with slightly different format),
so integrate them into two inline functions.

8 years agosys/vfs/hammer: Add and fix comments
Tomohiro Kusumi [Wed, 26 Aug 2015 15:21:27 +0000 (00:21 +0900)]
sys/vfs/hammer: Add and fix comments

on
* inode's node cache
* btree node split
* volume header

8 years agosys/vfs/hammer: Remove obsolete macro HAMMER_CLUSTER_BUFS
Tomohiro Kusumi [Fri, 28 Aug 2015 15:20:41 +0000 (00:20 +0900)]
sys/vfs/hammer: Remove obsolete macro HAMMER_CLUSTER_BUFS

This macro is no longer used and not necessary.

HAMMER_CLUSTER_BUFS was once used by cluster_read()
but not anymore.

8 years agosys/vfs/hammer: Remove obsolete macro HAMMER_LOCALIZE_PSEUDOFS_INC
Tomohiro Kusumi [Thu, 27 Aug 2015 15:17:00 +0000 (00:17 +0900)]
sys/vfs/hammer: Remove obsolete macro HAMMER_LOCALIZE_PSEUDOFS_INC

This macro is no longer used and not necessary.

There used to be a code where hammer iterates PFS id
from min to max and HAMMER_LOCALIZE_PSEUDOFS_INC was
used to += the counter, but there is no such code now.

8 years agosys/vfs/hammer: Remove obsolete macro HAMMER_RECTYPE_MOVED
Tomohiro Kusumi [Tue, 25 Aug 2015 15:03:16 +0000 (00:03 +0900)]
sys/vfs/hammer: Remove obsolete macro HAMMER_RECTYPE_MOVED

This macro is no longer used and not necessary.

HAMMER_RECTYPE_MOVED was once used by reblock when
reblock was first implemented, but no longer used.

8 years agosys/vfs/hammer: Remove obsolete macro HAMMER_BLOCKMAP_FREE
Tomohiro Kusumi [Mon, 24 Aug 2015 20:01:42 +0000 (05:01 +0900)]
sys/vfs/hammer: Remove obsolete macro HAMMER_BLOCKMAP_FREE

This macro is no longer used and not necessary.

HAMMER_BLOCKMAP_FREE was once used to initialize layer1
phys_offset and some other fields, but no longer used
or those fields no longer exist.

8 years agosys/vfs/hammer: Don't return 0 on invalid elm.leaf.base.btype
Tomohiro Kusumi [Mon, 24 Aug 2015 19:24:24 +0000 (04:24 +0900)]
sys/vfs/hammer: Don't return 0 on invalid elm.leaf.base.btype

A leaf node only has records without any boundary elm,
so btype is always RECORD, anything else is invalid.

(There used to be several other types that no longer
exist that could be set to elm.leaf.base.btype)

8 years agosys/vfs/hammer: Properly kprintf 32bits localization value
Tomohiro Kusumi [Sat, 29 Aug 2015 07:11:12 +0000 (16:11 +0900)]
sys/vfs/hammer: Properly kprintf 32bits localization value

It should be %08x to fully show pfs# and type.

8 years agosys/vfs/hammer: Add hammer_elm_btype()
Tomohiro Kusumi [Mon, 24 Aug 2015 18:50:49 +0000 (03:50 +0900)]
sys/vfs/hammer: Add hammer_elm_btype()

Considered useful to get rid of (cond ? ascii : '?')
that exists only to print '?' for non-ascii error cases.

Also note that btype==0 isn't necessary an unknown type
since root_btree_beg|end use 0.

8 years agosys/vfs/hammer: Properly access node element base
Tomohiro Kusumi [Mon, 24 Aug 2015 16:53:41 +0000 (01:53 +0900)]
sys/vfs/hammer: Properly access node element base

elm should dereference leaf.base instead of internal.base
since the node that contains node elm here is a leaf node.
These two refer to the same address, but the leaf.base is
the right one in terms of code.

Also print elm->leaf.base.btype which is always expected
to be 'R'.

8 years agosys/vfs/hammer: Simplify hammer_print_btree_elm()
Tomohiro Kusumi [Sun, 23 Aug 2015 16:52:30 +0000 (01:52 +0900)]
sys/vfs/hammer: Simplify hammer_print_btree_elm()

Given that the purpose of hammer_print_btree_elm()
is to print a node elm info that points to a node
(but not a node info that contains the node elm),
it's better not to have any external info such as
node type and elm index as a part of arguments.

8 years agosys/vfs/hammer: Add hammer_is_internal|leaf_node_elm()
Tomohiro Kusumi [Mon, 24 Aug 2015 14:11:44 +0000 (23:11 +0900)]
sys/vfs/hammer: Add hammer_is_internal|leaf_node_elm()

The data structure of each elm of node::elms[63] (elms[62]
for internal node excluding boundary) is simply determined
by the type of node that contains node::elms[63].

This makes code like (A) very clear and straight forward,
but makes code like (B) not clear because what elms point
to can not be simply determined by the node type.

Adding inline functions hammer_is_internal|leaf_elm() as
shown in (C), which essentialy do the same thing, makes
code look as straight forward as (A).

There are several situations where hammer wants to find
out if the given elm is an element within an internal node,
and hammer_is_internal_elm() can make such code more clear
than using switch(elm.base.btype). These functions are only
used in btree search/iteration related code. Using these
inline functions doesn't affect performance.

Also see the next commit which is related to this and the
previous commit.

===== (A)
elm = &node->elms[i];
switch (node->type) {
case HAMMER_BTREE_TYPE_INTERNAL:  /* case matches union member */
elm->internal.subtree_offset...
break;
case HAMMER_BTREE_TYPE_LEAF:  /* case matches union member */
elm->leaf.data_offset...
break;
}
=====

===== (B)
elm = &node->elms[i];
switch (elm->base.btype) {
case HAMMER_BTREE_TYPE_INTERNAL:
case HAMMER_BTREE_TYPE_LEAF:  /* this is right but not obvious */
elm->internal.subtree_offset...
break;
case HAMMER_BTREE_TYPE_RECORD:  /* this is right but not obvious */
elm->leaf.data_offset...
break;
}
=====

===== (C)
elm = &node->elms[i];
if (hammer_is_internal_node_elm(elm)) {
elm->internal.subtree_offset...
} else {
/* or else if (hammer_is_leaf_node_elm(elm)) { */
elm->leaf.data_offset...
}
=====

8 years agosys/vfs/hammer: Fix wrong node type in switch/case
Tomohiro Kusumi [Sun, 23 Aug 2015 17:04:00 +0000 (02:04 +0900)]
sys/vfs/hammer: Fix wrong node type in switch/case

A node type is either internal or leaf (or deleted which
is originally internal or leaf), but not record.

A node element's btype could be internal, leaf or record,
but hammer_print_btree_node() is passing a node type to
this function, so cases must be either internal or leaf.

hammer_print_btree_node() and hammer_print_btree_elm()
are not used so nothing changes anyway.

8 years agosbin/hammer: Avoid volume# inconsistency in blkdevs arg
Tomohiro Kusumi [Thu, 27 Aug 2015 15:16:02 +0000 (00:16 +0900)]
sbin/hammer: Avoid volume# inconsistency in blkdevs arg

hammer commands that take blkdevs format arg (e.g. blockmap,
checkmap, show, etc) should check if # of volumes in blkdevs
format arg != vol_count in volume header, and fail if they
don't match.

Without checking this, these commands can proceed with invalid
number of volumes and results in either failure or wrong result.
It should be checked here just like hammer itself now checks
inconsistency on mount since c302e844.

Note that fsid check is done by setup_volume(), so no need
to do it here.

8 years agosbin/hammer: Cleanup localization initialization on reblock
Tomohiro Kusumi [Mon, 24 Aug 2015 13:31:41 +0000 (22:31 +0900)]
sbin/hammer: Cleanup localization initialization on reblock

and also adds a missing pattern (DATA | DIRS)
although there isn't a hammer reblock-data-dirs command.

8 years agosbin/hammer: Use HAMMER_IOC_DO_FLAGS
Tomohiro Kusumi [Mon, 24 Aug 2015 10:49:34 +0000 (19:49 +0900)]
sbin/hammer: Use HAMMER_IOC_DO_FLAGS

rather than -1 since it's defined.

8 years agosbin/hammer: Print bad btype on hammer show
Tomohiro Kusumi [Mon, 24 Aug 2015 10:36:10 +0000 (19:36 +0900)]
sbin/hammer: Print bad btype on hammer show

A leaf node can only have records for its children.

8 years agosys/vfs/hammer: Fold too long lines
Tomohiro Kusumi [Sun, 23 Aug 2015 18:37:30 +0000 (03:37 +0900)]
sys/vfs/hammer: Fold too long lines

8 years agosys/vfs/hammer: Remove unused (and never used) macro
Tomohiro Kusumi [Sun, 23 Aug 2015 14:22:57 +0000 (23:22 +0900)]
sys/vfs/hammer: Remove unused (and never used) macro

842e7a7 added HAMMER_PFSM_DELETED but no one has ever used it.
(HAMMER_PFSD_DELETED also exists and this one is used)

8 years agosio: Add pci-ids for Haswell and Broadwell vPro CPUs' SoL support.
Imre Vadász [Thu, 3 Sep 2015 19:20:30 +0000 (21:20 +0200)]
sio: Add pci-ids for Haswell and Broadwell vPro CPUs' SoL support.

8 years agohammer2 - refactor some chain bits, stabilization
Matthew Dillon [Thu, 3 Sep 2015 04:11:08 +0000 (21:11 -0700)]
hammer2 - refactor some chain bits, stabilization

* Refactor the hammer2_chain_t MODIFIED and UPDATE flags to not
  reference the chain.

* Automatically flag DESTROY on a chain on last-drop if chain->parent is
  NULL, and automatically clear UPDATE and try to clear MODIFY.  Add the
  chain to the delayed-flush queue if MODIFIED cannot be cleared.

* Fix a flags bug in hammer2_chain_hardlink_find() which could deadlock
  competing threads.

* The collect code now aggregates errors and the cluster check code now
  also aggregates errors.  This allows feeders to feed an error code to
  the collector.

* Fix rmdir and rename to disallow removal of non-empty directories.

* hammer2_inode_xop_flush() now proceeds with a flush if hmp->flushq
  is not empty, even if the chain is not marked for flushing.  This
  still needs some work.

* Add a sideq for dirty inodes that might have to be flushed.  Used for
  unlinked dirty inodes which might still be open.

* Call hammer2_inode_modify() whenever possible instead of setting the
  HAMMER2_INODE_MODIFIED flag manually.

* Test for chain leaks against blogbench, fsx, and fsstress.

8 years agoUpdate some more symbols maps for libc
John Marino [Wed, 2 Sep 2015 23:52:19 +0000 (01:52 +0200)]
Update some more symbols maps for libc

This continues the work towards versioning libc.  I found that a wchar
function, open_wmemstream(), had a prototype but was not implemented on
DragonFly (but it is on FreeBSD) so I filtered it out with #if 0 block.

8 years agolib/libc/stdlib/merge.c: add "static" to match setup prototype
John Marino [Wed, 2 Sep 2015 20:24:54 +0000 (22:24 +0200)]
lib/libc/stdlib/merge.c: add "static" to match setup prototype

8 years agohammer2 - stabilization - blogbench, others
Matthew Dillon [Wed, 2 Sep 2015 00:50:01 +0000 (17:50 -0700)]
hammer2 - stabilization - blogbench, others

* Fix some (but not all) issues with lost chains on unmount that show
  up in a kmalloc pool warning.

* Fix a bug in hammer2_chain_create_indirect() which retained a stale
  { base, count } across possible parent chain modifications, resulting
  in corruption and/or a panic.

* Track chain lock counts on a per-thread basis and add some helpful
  assertions in the XOP processing loop.  Also add
  hammer2_chain_push_shared_lock() and hammer2_chain_pull_shared_lock()
  to helpfully transfer ownership of (shared locks only) between threads.

* Add missing cpu_lfence() after fifo read index test.  Ensures that
  the memory load of the chain occurs after the write index change has
  been detected.

* Change the XOP ABI a bit.  hammer2_xop_feed() now replicates the
  shared lock, giving one to the collector and allowing the caller
  to retain its own.  This way the locking state of the chain passed
  to it does not change from the point of view of the caller.

  This also fixes one or two lost chain locks in the XOPs.

8 years agokernel - Use unused thread_t field for lock tracker.
Matthew Dillon [Wed, 2 Sep 2015 00:49:13 +0000 (17:49 -0700)]
kernel - Use unused thread_t field for lock tracker.

* Repurpose an unused struct thread field to add td_tracker.  Structure
  size does not change.  Used for debugging only.

8 years agodrm: Bring back a KNOTE() call, unbreak vblank handling
François Tigeot [Tue, 1 Sep 2015 20:07:59 +0000 (22:07 +0200)]
drm: Bring back a KNOTE() call, unbreak vblank handling

* Userland programs were no longer properly notified of vblank events

* We can't use the drm_poll() function present in Linux and its
  explicit poll_wait() call on file_priv->event_wait without introducing
  a completely new kernel infrastructure. Add back the KNOTE() call.

Noticed-by: ivadasz, many
8 years agolibc: Remove stack_protector.c from build
John Marino [Tue, 1 Sep 2015 19:53:00 +0000 (21:53 +0200)]
libc: Remove stack_protector.c from build

Both gcc47 and gcc50 use libssp for stack protection, so the stack
protector code appears to be obsolete.  On the direction of dillon,
just delist the source file in the makefile, and after a month with
some dports run experience, permanently remove stack-protector.c
from lib/libc/sys directory.

8 years agoTake II at unbreaking world
John Marino [Tue, 1 Sep 2015 18:24:04 +0000 (20:24 +0200)]
Take II at unbreaking world

8 years agoacpicall(8): Add -U option for passing UUIDs as buffers.
Sascha Wildner [Tue, 1 Sep 2015 16:21:15 +0000 (18:21 +0200)]
acpicall(8): Add -U option for passing UUIDs as buffers.

Great for _DSM's.

Tested-by: tollens
8 years agoAdd bootstrap workaround needed by ctype.h addition for localedef
John Marino [Tue, 1 Sep 2015 17:30:52 +0000 (19:30 +0200)]
Add bootstrap workaround needed by ctype.h addition for localedef

8 years agolocaledef.1: Clean up a bit.
Sascha Wildner [Tue, 1 Sep 2015 17:14:17 +0000 (19:14 +0200)]
localedef.1: Clean up a bit.

8 years agoAdd a small vmm(2) manual page for the related system calls.
Sascha Wildner [Tue, 1 Sep 2015 16:39:56 +0000 (18:39 +0200)]
Add a small vmm(2) manual page for the related system calls.

Namely, vmm_guest_ctl(2) and vmm_guest_sync_addr(2).

It is based on a manual page which Mihai Carabas submitted to me a
rather long time ago (apologies, Mihai).

8 years agoUTF8: fix a couple of number ctype definitions
John Marino [Tue, 1 Sep 2015 12:42:39 +0000 (14:42 +0200)]
UTF8: fix a couple of number ctype definitions

During testing of new number ctype, I found a typo one of the CJK number
definitions and two Roman Numeral characters that were set as numbers but
should not be (according to equivalent python check).

8 years agolibc: Redefine "number" ctype - no longer alias of "digit"
John Marino [Tue, 1 Sep 2015 11:39:38 +0000 (13:39 +0200)]
libc: Redefine "number" ctype - no longer alias of "digit"

FreeBSD extended ctypes to include numbers (e.g. isnumber()) but never
actually implemented it.  The isnumber() function was equivalent to the
isdigit() function in every case.

Now that DragonFly's ctype source files have number definitions, the
number ctype can finally be implemented.  It's given a new flag _CTYPE_N.
The isalnum() and iswalnum() functions have been changed to use this
flag rather than the _CTYPE_D digit flag.

While isalnum(), isnumber(), and their wide equivalents now return
different values in locale cases, the ishexnumber() and iswhexnumber()
functions are unchanged.  They are still aliases for isxdigit() and
iswxdigit().

Also change ctype.h for isdigit and isxdigit to use sbistype like the
other functions.

The "isnumber()" will not work until a full world build is made.  The
reason is that localedef is modified, but it's a bootstrap tool, so the
earlier version that does not support number ctype is still used in a
quickworld build.

8 years agoUTF8 locales: Fully consider "CIRCLED_" set as alphabet
John Marino [Tue, 1 Sep 2015 10:41:21 +0000 (12:41 +0200)]
UTF8 locales: Fully consider "CIRCLED_" set as alphabet

This means defining the "A"-"Z" and "a"-"z" circled versions of the
Enclosed Alphanumerics block (0x2460-24FF) as hexidecimal digits and
defining the to-upper and to-lower conversions between the upper case
and lower case circled alphabets.

8 years agoUTF-8: Multiple improvements (and detection of possible issue)
John Marino [Tue, 1 Sep 2015 09:11:41 +0000 (11:11 +0200)]
UTF-8: Multiple improvements (and detection of possible issue)

This commit started out intending to fix "digit" definition on unicode,
which it mostly does, but a lot more happened in the end, namely:

 * digits apparently are not part of CLDR definition.  I added a section
   in the manual portion of UTF-8 source file that defines digit classes
   for generated sections.
 * Add numbers classification for entire UTF-8.  Currently DragonFly and
   all BSDs do not support "number" type.  However, localedef understands
   it (its supported on Illumos), but currently the number flag value is
   zero, so it's a no-op.  A short term goal is to have DragonFly be the
   first BSD with proper number ctype handling.
 * Redefine "special" ctype once and for all.  There is no definitive
   agreement on what "special" characters are.  According to wiki which
   got it from unicode, it starts with 33 characters (0x20 - 0x2F, 0x3A -
   0x40, 0x5B - 0x60, 0x7B - 0x7E).  However, localedef objects to <space>
   because it sets "graph" and "print" flags, and <space> can't be graph.
   As a result, the <space> is not considered "special" here.  Moreover,
   the punctuation in Latin-1 supplement is "special".  The division and
   multiplication signs are ambiguous, so I set them to special (since
   plus and minus signs are special).  Finally, with the most doubt, the
   punctuation of "general punctuation" block is also considered special
   although I couldn't find convincing evidence either way.  Given the
   lack of definition, I don't think "special" classification is really
   used, especially not in unicode.
 * Fix NON-BREAK_SPACE classification (set as graph and space on previous
   commit)
 * the MICRO character was also warning due to being classified as both
   lower (in Greek section) and punctuation, so remove the punct. class.
 * When possible, don't define graph if digit is defined, and similarly
   with graph and punct.  Both digit and punct also set graph flag so
   having both is redundant.
 * add several new block definitions:
   - Syloti Nagri
   - Common Indic Number Forms
   - Phags-pa
   - Saurashra
   - Kayah Li
   - Rejang
   - Javanese
   - Cham
   - Tal Viet
   - Meetei Mayek & extension
 * Detection of possible bug in localedef
   The Tai Tham definition are producing the wrong code but there's
   nothing wrong with the definitions.  The 6 unused characters between
   the two digit definitions should not be graphable, but as soon as
   one "digit" is defined after the first digit range is defined, all
   the characters between are marked as graphable and digits.  There
   are similar "fill-ins" but so far only with Thai Tam.  It was
   detected while outputting all "digit" types against a python program
   that does the same and this error was reveal.  It requires further
   investigation about exactly what is causing it (and thus where the
   bug is) but right now it's either a bad definition elsewhere that
   affects Thai Tam or localedef has a bug somewhere (avl lookup?)

8 years agohammer2.8/newfs_hammer2.8: Some small fixes.
Sascha Wildner [Tue, 1 Sep 2015 08:06:26 +0000 (10:06 +0200)]
hammer2.8/newfs_hammer2.8: Some small fixes.

8 years agohammer2 - stabilization - Fix bugs found by blogbench
Matthew Dillon [Tue, 1 Sep 2015 07:28:18 +0000 (00:28 -0700)]
hammer2 - stabilization - Fix bugs found by blogbench

* Make sure that any inode without an associated vnode gets put on
  the sideq if it is dirtied, otherwise it might not ever get flushed.

* Fix a SMP race in hammer2_xop_start_except().  For asynchronous completions,
  the xop can become invalid the instant we release our spinlock if another
  thread manages to process, retire, and free it.

8 years agokernel - Improve namecache generation handling
Matthew Dillon [Tue, 1 Sep 2015 03:28:50 +0000 (20:28 -0700)]
kernel - Improve namecache generation handling

* Reduce mount->mnt_namecache_gen from 64 to 32 bits and add a dummy
  field so the structure size does not change.

* Reduce namecache->nc_namecache_gen from 64 to 32 bits and add a
  second generation number to detect cache_unlink() and cache_rename()
  calls.  Bump the counter in cache_rename() and _cache_unlink().
  Structure size did not change.

* Refactor kern_rename() to use namecache->nc_generation to detect
  a larger subset of changes to the namecache entries which can leak
  in due to the temporary unlock of fromnd->nl_nch.ncp.

8 years agohammer2 - stabilization - Fix a number of bugs revealed by fsx and fsstress.
Matthew Dillon [Tue, 1 Sep 2015 03:20:22 +0000 (20:20 -0700)]
hammer2 - stabilization - Fix a number of bugs revealed by fsx and fsstress.

* Fix block rewriting against deduped data (dedup_off != 0 in call to
  hammer2_chain_resize()).  It was hitting an assertion due to chain->bytes
  not being properly updated.

* A coarse lock is required on the pfs around any link() or rename() which
  needs to mess with hardlink targets.

* Fix an inode meta.nlinks race between the frontend and the backend.  The
  frontend tracks a master copy of the inode.  The backend must also adjust
  meta.nlinks during link and unlink operations because it reads the field
  to determine if the hardlink target should be removed or not.

  This required fixes in hammer2_xop_nlink() and hammer2_xop_nremove() and
  some functional augmentation to hammer2_xop_nlink().

* Leave the target inode locked through the whole rename sequence, the
  hardlink target shifts are just too complex (for now) to be able to rely
  on inode locks.

* Fix an incorrect shared lock in hammer2_xop_nrename() which could result
  in a parent modification being made while held shared instead of exclusive.

* Add debug output for an issue in hammer2_xop_nrename() that has not yet
  been fixed (kprintf... ENOENT).

8 years agouipc: Assert 0->1 reference count transition; it must not happen.
Sepherosa Ziehau [Mon, 31 Aug 2015 13:08:44 +0000 (21:08 +0800)]
uipc: Assert 0->1 reference count transition; it must not happen.

8 years agouipc: Check unp_conn again after unp_connect().
Sepherosa Ziehau [Mon, 31 Aug 2015 13:08:11 +0000 (21:08 +0800)]
uipc: Check unp_conn again after unp_connect().

Since the current unp's token could be released after unp_conn
assignment, we need to check unp_conn again even if unp_connect()
returns no error.

8 years agoacpicall(8): Style fixes.
Sascha Wildner [Mon, 31 Aug 2015 21:32:54 +0000 (23:32 +0200)]
acpicall(8): Style fixes.

8 years agodrm: Update drm_irq.c...
François Tigeot [Mon, 31 Aug 2015 19:35:34 +0000 (21:35 +0200)]
drm: Update drm_irq.c...

... to commit 56cc279b29c7b204fe7d0943509ae209b8b128db from Linux 3.18
drm: Fix deadlock between event_lock and vbl_lock/vblank_time_lock

Imre Vadász noticed a deadlock in the drm code handling vblank irqs.
Fortunately, this was also noticed by the Linux drm developers and fixing
the issue was just a matter of updating drm_irq.c

Reviewed-by: ivadasz
8 years agoacpicall.8: Fix backslashes in method paths.
Sascha Wildner [Mon, 31 Aug 2015 18:14:16 +0000 (20:14 +0200)]
acpicall.8: Fix backslashes in method paths.

8 years agoAdd a acpicall(8) utility for debugging and tweaking purposes.
Sascha Wildner [Mon, 31 Aug 2015 18:01:31 +0000 (20:01 +0200)]
Add a acpicall(8) utility for debugging and tweaking purposes.

It is based on ports' sysutils/acpi_call (from Maxim Ignatenko) with
a few changes by me:

* Rename acpi_call -> acpicall.

* Ioctl handling is in the main acpi.ko module.

* To enable it, the debug.acpi.allow_method_calls tunable needs to
  be set.

* In acpi_call, the mandatory -p option was used to pass the method's
  namespace path. I removed the option and made the path acpicall(8)'s
  argument.

* Wrote a manual page and cleaned up a bit.

The separate acpiio_mcall.h file was added because ACPIIO_DO_MCALL's
argument struct uses ACPICA types, so it needs acpi.h which acpiio.h
(a public header used by some ports) so far didn't need. So to avoid
any hassle, I put the ACPIIO_DO_MCALL ioctl into a separate header
(it's only used by acpicall(8) anyway).

The changes to kdump(1) and truss(1) are to include and build with
acpi.h.

Tested-by: tollens
8 years agohammer2 - bug fixes
Matthew Dillon [Mon, 31 Aug 2015 02:55:53 +0000 (19:55 -0700)]
hammer2 - bug fixes

* When a dirty inode is reclaimed meta-data changes stored in the inode
  structure could sometimes get lost.  These changes must be synchronized
  to the chains in the underlying cluster nodes.

  Repurpose the unlinkq into a more general 'sideq' that handles both
  deletion-on-reclaim and dirty-meta-data-on-reclaim.

  Add a flag to the inode to represent when it is on the sideq, preventing
  situations where it might be added twice.

* Enable the free->allocated transition in the bulkfree code.  Add
  additional statistics and an underflow/overflow check for
  hammer2_bmap_data->avail.  Also adjust the volume free space
  in both directions.  Do not update any live field if 'nofree' is
  set for the chain (~1GB granularity representing possible
  frontend/backend races).

8 years agouipc: Hold per-unp token for all unp usrreq methods
Sepherosa Ziehau [Sun, 30 Aug 2015 14:39:47 +0000 (22:39 +0800)]
uipc: Hold per-unp token for all unp usrreq methods

8 years agohammer2 - Refactor bulkfree
Matthew Dillon [Sun, 30 Aug 2015 21:17:35 +0000 (14:17 -0700)]
hammer2 - Refactor bulkfree

* Change the bulkfree scan from breadth-first to depth-first.  This
  improves disk performance significantly (~2x) and is also needed for the
  duplicate-detection feature.

* Create an 8-way set-associative hash table similar to what the live
  dedup code uses.  Record the data_off for elements we have processed
  and detect if a duplicate is encountered so we do not have to re-process
  the duplicate subtree.

  Also prioritize the table based on the aggregate bottom-up inode count
  to reduce the chance that a top-level duplicate (aka snapshot) will get
  kicked out of the hash table.

* Clean up the hammer2_chain_scan() API, making it more bref-centric
  which allows us to avoid instantiating chain structures for leaf
  entities.  This significantly improves performance and increases
  flexibility.

* Manual page adjustments for kern.maxvnodes settings suggestions.

8 years agoiswdigit(3), iswxdigit(3): Don't limit to U007F
John Marino [Sun, 30 Aug 2015 18:59:42 +0000 (20:59 +0200)]
iswdigit(3), iswxdigit(3): Don't limit to U007F

We inherited a valid range of 00 - 127 for checking wide characters for
type digit or xdigit.

This is a mistake.  The relationship between digits (iswdigit) and
numbers (iswnumber, iswalnum) is that digits are a subset of numbers.
Digits are also a subset of xdigits (iswxdigit).  Digits are limited
to radix-10.  Numeric typess, on the other hand, include factions,
Roman Numerals, circled, etc.  It should cover the entire unicode
(UTF-8) range.

Unfortunately, DragonFly doesn't support the "number" type yet.  The
iswnumber and iswalnum just use the "digit" definition.  Note that
before this commit, they used full range for "digit" type while the
iswdigit() and iswdigits() themselves were limited.

8 years agoUTF8 locales: Refine Latin supplement more
John Marino [Sun, 30 Aug 2015 15:25:58 +0000 (17:25 +0200)]
UTF8 locales: Refine Latin supplement more

The multiplication and division sign were missing, and the control
characters were not outlined.  Also set superscript 1,2,3 as digits.
There are not showing up with iswdigit() function so that requires
further investigation (iswdigit does work for '0','1',...'9' however)

8 years agoUTF8 locales: Include inverted exclamation mark too
John Marino [Sun, 30 Aug 2015 13:39:42 +0000 (15:39 +0200)]
UTF8 locales: Include inverted exclamation mark too

I was off by one character when I defined the first range on the previous
commit.  It starts with an inverted exclamation mark, not the cent sign.

8 years agoUTF8 locales: Complete implemenation of Latin-1 Supplement
John Marino [Sun, 30 Aug 2015 13:12:41 +0000 (15:12 +0200)]
UTF8 locales: Complete implemenation of Latin-1 Supplement

The Latin-1 Supplement block of UTF-8 (U0080-U00FF) was not fully
implemented.  Specifically it was missing U00A1 (inverted exclamation)
through U00BF (inverted question mark).  Some popular characters this
affected was cent sign, pound sign, Yen sign, broken bar, copyright
symbol and superscripts.  On international keyboards, AltGR + number
key wouldn't output correctly.  This addition to the manual ctype input
definitions (and subsequent regenerations) will fix these issues.

Reported by: profmakx, ivadasz
Diagnostics: YRabbit

8 years agohammer2 - live dedup, cleanup
Matthew Dillon [Sun, 30 Aug 2015 03:02:14 +0000 (20:02 -0700)]
hammer2 - live dedup, cleanup

* First attempt at a live dedup.  The H2 strategy code now caches
  {data_off, crc} info to track recently accessed data blocks.  The
  cache is checked in the strategy_write code after device-level
  block encoding.  If we get a cache hit, the disk block is compared
  against the write data and reused if it matches.

* This 'live' dedup should catch most typical 'cp' or 'cpdup' style
  commands.  There will also be a bulk dedup capable of catching
  everything.

* Note that 'df' output might be a bit confusing because the 'Used'
  field represents the topology and does not take into account dedups.
  'Avail' is calculated from the actual freemap.  To make things look
  right the total disk size is adjusted upward so it matches
  Used+Avail.  This mechanism will likely change.

  Here is an example with one copy of /usr/src and 13 copies of /usr/src.
  The first copy eats around 872MB, and a 'du' will show each copy eating
  about the same.  But because of dedup each subsequent copy actually only
  eats around 160MB as you can see from the 'Avail' field:

    test40# df -h /mnt
    Filesystem                             Size   Used  Avail Capacity
    /dev/serno/WD-WX51A82J2299.s1f@LOCAL    99G   934M    99G     1%
    Filesystem                             Size   Used  Avail Capacity
    /dev/serno/WD-WX51A82J2299.s1f@LOCAL   106G   8.5G    97G     8%

* Rename hammer2_bulkscan.c to hammer2_bulkfree.c since that is
  basically all it does.

* Move the synchronization code to its own file, hammer2_synchro.c.
  (note: This code is currently in rip-up mode and will not operate
  properly).

8 years agokernel: Use NULL for pointers in DRIVER_MODULE* calls.
Sascha Wildner [Sat, 29 Aug 2015 11:32:04 +0000 (13:32 +0200)]
kernel: Use NULL for pointers in DRIVER_MODULE* calls.

8 years agokernel: Add gnu/ to SUBDIR for MODULES_WITH_WORLD.
Sascha Wildner [Sat, 29 Aug 2015 10:44:53 +0000 (12:44 +0200)]
kernel: Add gnu/ to SUBDIR for MODULES_WITH_WORLD.

I forgot to do that in b993bb87ded5c733e1f0213efbef1be2660b2536.

8 years agohammer2 - bulkfree work, rip-up cluster sync.
Matthew Dillon [Fri, 28 Aug 2015 20:49:47 +0000 (13:49 -0700)]
hammer2 - bulkfree work, rip-up cluster sync.

* bulkfree no longer attempts to flush.  Instead it deals with races against
  live by refusing to free blocks in L1 freemap chains that have been modified
  since the last sync.  This is a temporary workaround.

* No longer propagate modify_tid during a flush.  modify_tid is now used
  as a localized but cluster-aware TID (whereas mirror_tid is only localized
  to a cluster node).

* Start work on adding an update_tid to the blockref.  This will ultimately
  be used by the cluster synchronization code instead of modify_tid.

* Adjust the DESIGN document for the new synchronization concept.

8 years agokernel: Adjust sys/conf/files for recent drm changes.
Sascha Wildner [Fri, 28 Aug 2015 13:55:24 +0000 (15:55 +0200)]
kernel: Adjust sys/conf/files for recent drm changes.

8 years agokernel/cxm: Add pcidevs.h to the Makefile (forgotten in dcb4b80).
Sascha Wildner [Fri, 28 Aug 2015 13:49:48 +0000 (15:49 +0200)]
kernel/cxm: Add pcidevs.h to the Makefile (forgotten in dcb4b80).

8 years agohammer2 - stabilization, sequencing
Matthew Dillon [Fri, 28 Aug 2015 06:15:17 +0000 (23:15 -0700)]
hammer2 - stabilization, sequencing

* Change the way XOPs are dispatched.  Instead of dispatching a XOP
  to specific service threads in the xgrp we now queue the XOP to a
  per-cluster-node xopq and allow the service threads to compete for
  work.

* Implement XOP dependency tracking.  Cluster nodes can complete execution
  of a XOP in any order and the frontend may complete early on-quorum while
  the XOP is still executing on other cluster nodes.  In this situation
  the inode lock may be released or cycled and another, dependent XOP may
  be issued, potentially executing out of order on the cluster nodes that
  have not yet finished (or possibly even started) the previous XOP.

  With the new queueing mechanism we also implement dependency tracking
  using the xop->ip1, ip2, and ip3 fields.  Dependent XOPs on (slow) cluster
  nodes will be held-back and ordering of dependent XOPS will be enforced.

  This fixes one of several cluster-related issues that will need to be
  addressed in order to free the frontend of slow backend cluster nodes.

* The strategy XOP now uses a per-XOP lock instead of an xgrp lock
  (xgrp is no longer used in the xop structure and XOPs are now
  distributed to potentially different xgrps for each cluster node).

* Normalize some structural field names.

* bulkfree now takes a snapshot of vchain, using a separate (temporary)
  chain structure which isolates the entire topology scan from the
  live filesystem.

  This required minor adjustments to base/count handling for
  HAMMER2_BREF_TYPE_VOLUME and HAMMER2_BREF_TYPE_FREEMAP.

* Debugging adjustments.

8 years agohammer2 - hide some debugging kprintfs
Matthew Dillon [Thu, 27 Aug 2015 06:31:43 +0000 (23:31 -0700)]
hammer2 - hide some debugging kprintfs

* Hide debugging kprintfs related to flushes so we do not default to
  feeding console messages back to syslogd.

8 years ago<regex.h>: REG_ENOSYS was removed in Issue 7 but up to 6 it's needed.
Sascha Wildner [Thu, 27 Aug 2015 17:09:21 +0000 (19:09 +0200)]
<regex.h>: REG_ENOSYS was removed in Issue 7 but up to 6 it's needed.

8 years agoRemove references to colldef(1) and mklocale(1) in manpages & comments.
Sascha Wildner [Thu, 27 Aug 2015 16:46:08 +0000 (18:46 +0200)]
Remove references to colldef(1) and mklocale(1) in manpages & comments.

8 years agodrm/i915: Update to Linux 3.17
François Tigeot [Thu, 27 Aug 2015 18:53:22 +0000 (20:53 +0200)]
drm/i915: Update to Linux 3.17

* With an Haswell stability fix from Linux 3.19

* Display-Port code not completely synced with Linux 3.17, this was
  breaking things as noticed by Rimvydas Jasinskas

* Broadwell and Cherryview support improvements

* Runtime power-management improvements

* Panel Self-Refresh (PSR) now enabled by default on Haswell and Broadwell,
  leading to further power savings

* Interrupt handling improvements

* backlight brightness locking fixes by Yellow Rabbit

* As usual, all sort of little fixes everywhere

8 years agoRemove colldef(1) manpage too via 'make upgrade'.
Sascha Wildner [Thu, 27 Aug 2015 16:34:55 +0000 (18:34 +0200)]
Remove colldef(1) manpage too via 'make upgrade'.

8 years agodrm: Add linux/notifier.h
François Tigeot [Thu, 27 Aug 2015 06:58:34 +0000 (08:58 +0200)]
drm: Add linux/notifier.h

Obtained-from: FreeBSD/OFED

8 years agohammer2 - cleanup
Matthew Dillon [Thu, 27 Aug 2015 05:45:37 +0000 (22:45 -0700)]
hammer2 - cleanup

* Cleanup some printfs.

8 years agomount_hammer2 - Allow serno/ relative paths
Matthew Dillon [Thu, 27 Aug 2015 05:45:21 +0000 (22:45 -0700)]
mount_hammer2 - Allow serno/ relative paths

* Allow paths to omit the /dev.

8 years agokernel - Add root mount support for hammer2
Matthew Dillon [Thu, 27 Aug 2015 05:21:21 +0000 (22:21 -0700)]
kernel - Add root mount support for hammer2

* Don't try to interpret the device string in mountroot for
  hammer2 either (it was already not being interpreted for hammer).

8 years agohammer2 - Add root mount support.
Matthew Dillon [Thu, 27 Aug 2015 05:21:00 +0000 (22:21 -0700)]
hammer2 - Add root mount support.

* Add root mount support to the hammer2 vfs.

8 years agohammer2 - Require a @label in the device path
Matthew Dillon [Thu, 27 Aug 2015 03:49:18 +0000 (20:49 -0700)]
hammer2 - Require a @label in the device path

* If the user forgets to specify an @label in a hammer2 mount, complain
  in a way that does not leave the user confused.

* newfs_hammer2 no longer creates a "BOOT" and "ROOT" PFS by default.
  It still always creates the "LOCAL" PFS which we may use later to hold
  hammer2 configuration data.

  Now hammer2 creates one additional label by default, when no -L option is
  specified, based on the partition from the device path:

  'a' - newfs_hammer2 will create a "BOOT" PFS
  'd' - newfs_hammer2 will create a "ROOT" PFS
   *  - newfs_hammer2 will create a "DATA" PFS

* When -L is specified to indicate label(s) to create, newfs_hammer2 no longer
  creates any default labels other than "LOCAL" (which must always be
  created).

* Adjust manual page.

8 years agohammer2 - Fix hammer2 probe in boot code
Matthew Dillon [Thu, 27 Aug 2015 03:45:55 +0000 (20:45 -0700)]
hammer2 - Fix hammer2 probe in boot code

* During boot2 the BIOS dskread might not be able to handle a 64KB read
  request.  Break requests up into 16KB pieces in the hammer2 read code,
  allowing DragonFly to boot from a HAMMER2 boot partition.

* Automatically dive the "BOOT" label under the superoot.

8 years agohammer2 - Add WANT_HAMMER2 to buildworld
Matthew Dillon [Thu, 27 Aug 2015 03:44:26 +0000 (20:44 -0700)]
hammer2 - Add WANT_HAMMER2 to buildworld

* Setting WANT_HAMMER=YES in /etc/make.conf will build the hammer2 pieces.

8 years agohammer2 - Fix unlink/reclaim panic, add macro for "BOOT" key
Matthew Dillon [Thu, 27 Aug 2015 03:37:04 +0000 (20:37 -0700)]
hammer2 - Fix unlink/reclaim panic, add macro for "BOOT" key

* Fix confusion where an inode would erronously be placed on the unlinkq
  even though it was not moved to the hidden directory.

* Add HAMMER2_BOOT_KEY for use by libstand.

8 years agokernel - allow '@' key at mountroot> prompt
Matthew Dillon [Thu, 27 Aug 2015 03:32:55 +0000 (20:32 -0700)]
kernel - allow '@' key at mountroot> prompt

* Allow the @ key to generate an '@' at the mountroot<> prompt
  so HAMMER2 label specifications can be typed in.

8 years agouipc: Fix lockless unp_conn accessing and uipc_detach() race.
Sepherosa Ziehau [Wed, 26 Aug 2015 12:32:03 +0000 (20:32 +0800)]
uipc: Fix lockless unp_conn accessing and uipc_detach() race.

           THREAD1                         THREAD2

  uipc_send(unp)                    uipc_detach(unp2)
  {                                 {
    lock(unp);                        unp_free(unp2)
    unp2 = unp->unp_conn;             {
      :                                 /* unp2 ref is 0 */
    unp_reference(unp2);                unp_detach(unp2); (***)
    /* unp2 ref is 1 */               }
      :                             }
    unp_free(unp2)                            :
    {                                         :
       /* unp2 ref is 0 */                    :
       unp_detach(unp2); (***)                :
    }                                         :
    unlock(unp);                              :
  }                                           :

Two calls of unp_detach() on unp2!

To fix this race, we drop all connections before calling unp_free()
on uipc_detach() and uipc_abort() path.

8 years agouipc: Assert global token is held in unp_connect_pair
Sepherosa Ziehau [Wed, 26 Aug 2015 12:31:37 +0000 (20:31 +0800)]
uipc: Assert global token is held in unp_connect_pair

8 years agoregex.3: Add LIBRARY section.
Sascha Wildner [Wed, 26 Aug 2015 16:32:01 +0000 (18:32 +0200)]
regex.3: Add LIBRARY section.

8 years agouipc: Return error from unp_connect_pair() if one of unps is not attached
Sepherosa Ziehau [Tue, 25 Aug 2015 15:12:42 +0000 (23:12 +0800)]
uipc: Return error from unp_connect_pair() if one of unps is not attached

8 years agouipc: Don't abuse unp_conn for unconnect DGRAM unix sockets.
Sepherosa Ziehau [Tue, 25 Aug 2015 14:06:57 +0000 (22:06 +0800)]
uipc: Don't abuse unp_conn for unconnect DGRAM unix sockets.

Use unp_find_lockref() to located the target unp instead.