Deleted Added
full compact
ffs_softdep.c (175294) ffs_softdep.c (176519)
1/*-
2 * Copyright 1998, 2000 Marshall Kirk McKusick. All Rights Reserved.
3 *
4 * The soft updates code is derived from the appendix of a University
5 * of Michigan technical report (Gregory R. Ganger and Yale N. Patt,
6 * "Soft Updates: A Solution to the Metadata Update Problem in File
7 * Systems", CSE-TR-254-95, August 1995).
8 *

--- 25 unchanged lines hidden (view full) ---

34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 *
38 * from: @(#)ffs_softdep.c 9.59 (McKusick) 6/21/00
39 */
40
41#include <sys/cdefs.h>
1/*-
2 * Copyright 1998, 2000 Marshall Kirk McKusick. All Rights Reserved.
3 *
4 * The soft updates code is derived from the appendix of a University
5 * of Michigan technical report (Gregory R. Ganger and Yale N. Patt,
6 * "Soft Updates: A Solution to the Metadata Update Problem in File
7 * Systems", CSE-TR-254-95, August 1995).
8 *

--- 25 unchanged lines hidden (view full) ---

34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 *
38 * from: @(#)ffs_softdep.c 9.59 (McKusick) 6/21/00
39 */
40
41#include <sys/cdefs.h>
42__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_softdep.c 175294 2008-01-13 14:44:15Z attilio $");
42__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_softdep.c 176519 2008-02-24 16:38:58Z attilio $");
43
44/*
45 * For now we want the safety net that the DEBUG flag provides.
46 */
47#ifndef DEBUG
48#define DEBUG
49#endif
50

--- 508 unchanged lines hidden (view full) ---

559
560static struct mtx lk;
561MTX_SYSINIT(softdep_lock, &lk, "Softdep Lock", MTX_DEF);
562
563#define TRY_ACQUIRE_LOCK(lk) mtx_trylock(lk)
564#define ACQUIRE_LOCK(lk) mtx_lock(lk)
565#define FREE_LOCK(lk) mtx_unlock(lk)
566
43
44/*
45 * For now we want the safety net that the DEBUG flag provides.
46 */
47#ifndef DEBUG
48#define DEBUG
49#endif
50

--- 508 unchanged lines hidden (view full) ---

559
560static struct mtx lk;
561MTX_SYSINIT(softdep_lock, &lk, "Softdep Lock", MTX_DEF);
562
563#define TRY_ACQUIRE_LOCK(lk) mtx_trylock(lk)
564#define ACQUIRE_LOCK(lk) mtx_lock(lk)
565#define FREE_LOCK(lk) mtx_unlock(lk)
566
567#define BUF_AREC(bp) ((bp)->b_lock.lk_flags |= LK_CANRECURSE)
568#define BUF_NOREC(bp) ((bp)->b_lock.lk_flags &= ~LK_CANRECURSE)
569
567/*
568 * Worklist queue management.
569 * These routines require that the lock be held.
570 */
571#ifndef /* NOT */ DEBUG
572#define WORKLIST_INSERT(head, item) do { \
573 (item)->wk_state |= ONWORKLIST; \
574 LIST_INSERT_HEAD(head, item, wk_list); \

--- 4671 unchanged lines hidden (view full) ---

5246 if (bp)
5247 break;
5248 }
5249 VI_UNLOCK(vp);
5250 if (bp == NULL)
5251 return (0);
5252loop:
5253 /* While syncing snapshots, we must allow recursive lookups */
570/*
571 * Worklist queue management.
572 * These routines require that the lock be held.
573 */
574#ifndef /* NOT */ DEBUG
575#define WORKLIST_INSERT(head, item) do { \
576 (item)->wk_state |= ONWORKLIST; \
577 LIST_INSERT_HEAD(head, item, wk_list); \

--- 4671 unchanged lines hidden (view full) ---

5249 if (bp)
5250 break;
5251 }
5252 VI_UNLOCK(vp);
5253 if (bp == NULL)
5254 return (0);
5255loop:
5256 /* While syncing snapshots, we must allow recursive lookups */
5254 bp->b_lock.lk_flags |= LK_CANRECURSE;
5257 BUF_AREC(bp);
5255 ACQUIRE_LOCK(&lk);
5256 /*
5257 * As we hold the buffer locked, none of its dependencies
5258 * will disappear.
5259 */
5260 LIST_FOREACH(wk, &bp->b_dep, wk_list) {
5261 switch (wk->wk_type) {
5262

--- 125 unchanged lines hidden (view full) ---

5388 panic("softdep_sync_metadata: Unknown type %s",
5389 TYPENAME(wk->wk_type));
5390 /* NOTREACHED */
5391 }
5392 loop_end:
5393 /* We reach here only in error and unlocked */
5394 if (error == 0)
5395 panic("softdep_sync_metadata: zero error");
5258 ACQUIRE_LOCK(&lk);
5259 /*
5260 * As we hold the buffer locked, none of its dependencies
5261 * will disappear.
5262 */
5263 LIST_FOREACH(wk, &bp->b_dep, wk_list) {
5264 switch (wk->wk_type) {
5265

--- 125 unchanged lines hidden (view full) ---

5391 panic("softdep_sync_metadata: Unknown type %s",
5392 TYPENAME(wk->wk_type));
5393 /* NOTREACHED */
5394 }
5395 loop_end:
5396 /* We reach here only in error and unlocked */
5397 if (error == 0)
5398 panic("softdep_sync_metadata: zero error");
5396 bp->b_lock.lk_flags &= ~LK_CANRECURSE;
5399 BUF_NOREC(bp);
5397 bawrite(bp);
5398 return (error);
5399 }
5400 FREE_LOCK(&lk);
5401 VI_LOCK(vp);
5402 while ((nbp = TAILQ_NEXT(bp, b_bobufs)) != NULL) {
5403 nbp = getdirtybuf(nbp, VI_MTX(vp), MNT_WAIT);
5404 if (nbp)
5405 break;
5406 }
5407 VI_UNLOCK(vp);
5400 bawrite(bp);
5401 return (error);
5402 }
5403 FREE_LOCK(&lk);
5404 VI_LOCK(vp);
5405 while ((nbp = TAILQ_NEXT(bp, b_bobufs)) != NULL) {
5406 nbp = getdirtybuf(nbp, VI_MTX(vp), MNT_WAIT);
5407 if (nbp)
5408 break;
5409 }
5410 VI_UNLOCK(vp);
5408 bp->b_lock.lk_flags &= ~LK_CANRECURSE;
5411 BUF_NOREC(bp);
5409 bawrite(bp);
5410 if (nbp != NULL) {
5411 bp = nbp;
5412 goto loop;
5413 }
5414 /*
5415 * The brief unlock is to allow any pent up dependency
5416 * processing to be done. Then proceed with the second pass.

--- 886 unchanged lines hidden ---
5412 bawrite(bp);
5413 if (nbp != NULL) {
5414 bp = nbp;
5415 goto loop;
5416 }
5417 /*
5418 * The brief unlock is to allow any pent up dependency
5419 * processing to be done. Then proceed with the second pass.

--- 886 unchanged lines hidden ---