jhb 4e6ab5e17b Fix some edge cases with rewinddir():
- In the unionfs case, opendir() and fdopendir() read the directory's full
  contents and cache it.  This cache is not refreshed when rewinddir() is
  called, so rewinddir() will not notice updates to a directory.  Fix this
  by splitting the code to fetch a directory's contents out of
  __opendir_common() into a new _filldir() function and call this from
  rewinddir() when operating on a unionfs directory.
- If rewinddir() is called on a directory opened with fdopendir() before
  any directory entries are fetched, rewinddir() will not adjust the seek
  location of the backing file descriptor.  If the file descriptor passed
  to fdopendir() had a non-zero offset, the rewinddir() will not rewind to
  the beginning.  Fix this by always seeking back to 0 in rewinddir().
  This means the dd_rewind hack can also be removed.

While here, add missing locking to rewinddir().

CR:   	    	https://phabric.freebsd.org/D312
Reviewed by:	jilles
MFC after:	1 week
2014-07-11 16:16:26 +00:00
..
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2011-12-29 14:41:17 +00:00
2010-02-16 19:39:50 +00:00
2014-07-11 16:16:26 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2011-12-20 22:56:13 +00:00
2014-01-23 02:47:36 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2012-01-07 16:10:15 +00:00
2010-02-16 19:39:50 +00:00
2011-12-25 20:15:41 +00:00
2013-04-23 13:03:03 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2010-02-16 19:39:50 +00:00
2013-05-25 16:58:12 +00:00
2010-02-16 19:39:50 +00:00
2010-01-13 17:29:55 +00:00