ceph: fix snap writeback when racing with writes
authorSage Weil <sage@newdream.net>
Tue, 26 Jul 2011 18:26:31 +0000 (11:26 -0700)
committerSage Weil <sage@newdream.net>
Tue, 26 Jul 2011 18:26:31 +0000 (11:26 -0700)
commitaf0ed569d7019f1b49e9e51e77b47092e656b00e
treea8b0ad426b22548eec9e2d350c131426e13af989
parent9cfa1098dcfb34f71c5f3b7bcdbbb435a0cecab2
ceph: fix snap writeback when racing with writes

There are two problems that come up when we try to queue a capsnap while a
write is in progress:

 - The FILE_WR cap is held, but not yet dirty, so we may queue a capsnap
   with dirty == 0.  That will crash later in __ceph_flush_snaps().  Or
   on the FILE_WR cap if a write is in progress.
 - We may not have i_head_snapc set, which causes problems pretty quickly.
   Look to the snaprealm in this case.

Reviewed-by: Yehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/snap.c