Ceph is a distributed object, block, and file storage platform
Go to file
Sage Weil b04b6f4823 mds: make nested scatterlock state change check more robust
The predirty_journal_parents() calls wrlock_start() with nowait=true
because it has a journal entry open and we don't want to trigger a nested
scatterlock change that needs to journal something again (either
via scatter_writebehind or scatter_start).  (MDLog can only handle a single
log entry open at once because building multiple at once would require very
very very careful ordering of predirty() calls and versions.)

We were already check for the simple_lock() case (which may call
writebehind); fix up the check to also cover the scatter_mix() (which may
call scatter_start) case.

Fixes this crash:

mds/MDLog.h: In function 'void MDLog::start_entry(LogEvent*)':
mds/MDLog.h:191: FAILED assert(cur_event == __null)
 ceph version 0.24~rc (commit:fe10300317383ec29948d7dbe3cb31b3aa277e3c)
 1: (CInode::finish_scatter_update(ScatterLock*, CDir*, unsigned long, unsigned long)+0x804) [0x606e14]
 2: (CInode::start_scatter(ScatterLock*)+0xaa) [0x60dc1a]
 3: (Locker::scatter_mix(ScatterLock*, bool*)+0x1ca) [0x589a9a]
 4: (Locker::wrlock_start(SimpleLock*, MDRequest*, bool)+0x165) [0x597d65]
 5: (MDCache::predirty_journal_parents(Mutation*, EMetaBlob*, CInode*, CDir*, int, int, snapid_t)+0x153e) [0x55a70e]
 6: (Locker::scatter_writebehind(ScatterLock*)+0x42d) [0x58553d]
 7: (Locker::simple_lock(SimpleLock*, bool*)+0x7ab) [0x58beeb]
 8: (Locker::scatter_nudge(ScatterLock*, Context*, bool)+0x3ad) [0x58c49d]
 9: (Locker::scatter_tick()+0x28a) [0x58c98a]
 10: (MDS::tick()+0x4e4) [0x4b26a4]
 11: (SafeTimer::timer_thread()+0x22c) [0x6d164c]
 12: (SafeTimerThread::entry()+0xd) [0x6d34bd]
 13: (Thread::_entry_func(void*)+0xa) [0x4943da]
 14: /lib/libpthread.so.0 [0x7fc87810b73a]
 15: (clone()+0x6d) [0x7fc876dad69d]

Signed-off-by: Sage Weil <sage@newdream.net>
2010-12-17 21:02:58 -08:00
debian debian: don't strip rados classes 2010-12-17 08:31:00 -08:00
fusetrace reorganized source tree 2007-12-19 13:28:33 -08:00
man mkcephfs: require -k; update man page 2010-12-06 22:18:16 -08:00
qa mds: fix null_snapflush with multiple intervening snaps 2010-11-10 20:58:49 -08:00
src mds: make nested scatterlock state change check more robust 2010-12-17 21:02:58 -08:00
web web: updates 2008-03-10 09:20:51 -07:00
wireshark Bug #98: Unique names for include guards 2010-06-17 10:47:37 -07:00
.gitignore gitignore: Ignore cscope and vim temporary files 2010-09-30 18:13:44 -07:00
AUTHORS update authors 2010-07-02 10:14:41 -07:00
autogen.sh autogen.sh: check for pkg-config 2010-11-05 11:34:11 -07:00
builddebs.sh debian: update scripts to do packaging fixes 2010-10-18 10:19:28 -07:00
ceph.spec.in rpm: update changelog 2010-12-09 14:38:08 -08:00
ChangeLog first pass at autoconf and automake 2008-01-27 20:45:29 -08:00
configure.ac configure: detect crypto++ library 2010-12-06 15:25:34 -08:00
COPYING first pass at autoconf and automake 2008-01-27 20:45:29 -08:00
INSTALL autoconf changes to build on a debian/testing machine 2008-02-01 09:59:44 -08:00
Makefile.am Makefile: drop unnecessary dist-hook for make_version 2010-07-06 10:10:19 -07:00
NEWS first pass at autoconf and automake 2008-01-27 20:45:29 -08:00
publish.sh debian: sign/publish specific deb version 2010-10-18 13:29:21 -07:00
pull.sh debian: make helper scripts remember most recent release 2010-07-08 14:27:57 -07:00
push.sh debian: make helper scripts remember most recent release 2010-07-08 14:27:57 -07:00
README mkmonfs: remove all traces 2010-07-02 07:57:16 -07:00
RELEASE_CHECKLIST v0.22 2010-10-15 15:34:44 -07:00
release.sh debian: 0.22-4 2010-10-21 17:31:58 -07:00
sign.sh debian: sign/publish specific deb version 2010-10-18 13:29:21 -07:00
SubmittingPatches SubmittingPatches: initial version 2010-10-28 14:55:09 -07:00
update_pbuilder.sh debian: make update_pbuilder.sh update a single dist at a time 2010-09-17 15:52:54 -07:00

Ceph - a scalable distributed file system
-----------------------------------------

Please see http://ceph.newdream.net/ for current info.

----

To build the server daemons, and FUSE client,

$ ./autogen.sh
$ ./configure

$ make
 or
$ cd src
$ make

(Note that the FUSE client will only be built if libfuse is present.)

----

A quick summary of binaries that will be built in src/

daemons:
 cmon -- monitor daemon.  handles cluster state and configuration
         information.
 cosd -- storage daemon.  stores objects on a given block device.
 cmds -- metadata daemon.  handles file system namespace.
 ceph -- send management commands to the monitor cluster.

userland clients:
 cfuse -- fuse client.
 csyn -- synthetic workload generator client.

tools:
 monmaptool -- create/edit mon map
 osdmaptool -- create/edit osd map 
 crushtool -- create/edit crush map

scripts:
 mkcephfs -- cluster mkfs tool
 init-ceph -- init.d start/stop script