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 --- |