@@ -213,8 +213,8 @@ struct hammer2_chain {
213213 TAILQ_ENTRY (hammer2_chain ) entry ; /* 0-refs LRU */
214214 hammer2_mtx_t lock ;
215215 hammer2_mtx_t diolk ; /* xop focus interlock */
216- struct rwlock inp_lock ;
217- char * inp_cv ;
216+ hammer2_lk_t inp_lock ;
217+ hammer2_lkc_t inp_cv ;
218218 hammer2_chain_core_t core ;
219219 hammer2_blockref_t bref ;
220220 hammer2_dev_t * hmp ;
@@ -440,6 +440,7 @@ struct hammer2_inode {
440440 hammer2_depend_t * depend ; /* non-NULL if SIDEQ */
441441 hammer2_depend_t depend_static ; /* (in-place allocation) */
442442 hammer2_mtx_t lock ; /* inode lock */
443+ hammer2_mtx_t truncate_lock ; /* prevent truncates */
443444 struct rrwlock vnlock ; /* vnode lock */
444445 hammer2_spin_t cluster_spin ; /* update cluster */
445446 hammer2_cluster_t cluster ;
@@ -504,7 +505,6 @@ struct hammer2_inode {
504505 */
505506struct hammer2_trans {
506507 uint32_t flags ;
507- uint32_t sync_wait ; /* unused */
508508};
509509
510510typedef struct hammer2_trans hammer2_trans_t ;
@@ -616,6 +616,14 @@ struct hammer2_xop_scanlhc {
616616 hammer2_key_t lhc ;
617617};
618618
619+ struct hammer2_xop_scanall {
620+ hammer2_xop_head_t head ;
621+ hammer2_key_t key_beg ; /* inclusive */
622+ hammer2_key_t key_end ; /* inclusive */
623+ int resolve_flags ;
624+ int lookup_flags ;
625+ };
626+
619627struct hammer2_xop_lookup {
620628 hammer2_xop_head_t head ;
621629 hammer2_key_t lhc ;
@@ -654,6 +662,12 @@ struct hammer2_xop_fsync {
654662 int clear_directdata ;
655663};
656664
665+ struct hammer2_xop_unlinkall {
666+ hammer2_xop_head_t head ;
667+ hammer2_key_t key_beg ;
668+ hammer2_key_t key_end ;
669+ };
670+
657671struct hammer2_xop_flush {
658672 hammer2_xop_head_t head ;
659673};
@@ -669,12 +683,14 @@ typedef struct hammer2_xop_readdir hammer2_xop_readdir_t;
669683typedef struct hammer2_xop_nresolve hammer2_xop_nresolve_t ;
670684typedef struct hammer2_xop_unlink hammer2_xop_unlink_t ;
671685typedef struct hammer2_xop_scanlhc hammer2_xop_scanlhc_t ;
686+ typedef struct hammer2_xop_scanall hammer2_xop_scanall_t ;
672687typedef struct hammer2_xop_lookup hammer2_xop_lookup_t ;
673688typedef struct hammer2_xop_mkdirent hammer2_xop_mkdirent_t ;
674689typedef struct hammer2_xop_create hammer2_xop_create_t ;
675690typedef struct hammer2_xop_destroy hammer2_xop_destroy_t ;
676691typedef struct hammer2_xop_bmap hammer2_xop_bmap_t ;
677692typedef struct hammer2_xop_fsync hammer2_xop_fsync_t ;
693+ typedef struct hammer2_xop_unlinkall hammer2_xop_unlinkall_t ;
678694typedef struct hammer2_xop_flush hammer2_xop_flush_t ;
679695typedef struct hammer2_xop_strategy hammer2_xop_strategy_t ;
680696
@@ -685,12 +701,14 @@ union hammer2_xop {
685701 hammer2_xop_nresolve_t xop_nresolve ;
686702 hammer2_xop_unlink_t xop_unlink ;
687703 hammer2_xop_scanlhc_t xop_scanlhc ;
704+ hammer2_xop_scanall_t xop_scanall ;
688705 hammer2_xop_lookup_t xop_lookup ;
689706 hammer2_xop_mkdirent_t xop_mkdirent ;
690707 hammer2_xop_create_t xop_create ;
691708 hammer2_xop_destroy_t xop_destroy ;
692709 hammer2_xop_bmap_t xop_bmap ;
693710 hammer2_xop_fsync_t xop_fsync ;
711+ hammer2_xop_unlinkall_t xop_unlinkall ;
694712 hammer2_xop_flush_t xop_flush ;
695713 hammer2_xop_strategy_t xop_strategy ;
696714};
@@ -824,10 +842,10 @@ struct hammer2_pfs {
824842 hammer2_spin_t inum_spin ; /* inumber lookup */
825843 hammer2_spin_t lru_spin ;
826844 hammer2_spin_t list_spin ;
827- struct rwlock xop_lock [HAMMER2_IHASH_SIZE ];
828- char * xop_cv [HAMMER2_IHASH_SIZE ];
829- struct rwlock trans_lock ; /* XXX temporary */
830- char * trans_cv ;
845+ hammer2_lk_t xop_lock [HAMMER2_IHASH_SIZE ];
846+ hammer2_lkc_t xop_cv [HAMMER2_IHASH_SIZE ];
847+ hammer2_lk_t trans_lock ; /* XXX temporary */
848+ hammer2_lkc_t trans_cv ;
831849 struct mount * mp ;
832850 struct uuid pfs_clid ;
833851 hammer2_trans_t trans ;
@@ -896,6 +914,7 @@ extern hammer2_xop_desc_t hammer2_readdir_desc;
896914extern hammer2_xop_desc_t hammer2_nresolve_desc ;
897915extern hammer2_xop_desc_t hammer2_unlink_desc ;
898916extern hammer2_xop_desc_t hammer2_scanlhc_desc ;
917+ extern hammer2_xop_desc_t hammer2_scanall_desc ;
899918extern hammer2_xop_desc_t hammer2_lookup_desc ;
900919extern hammer2_xop_desc_t hammer2_delete_desc ;
901920extern hammer2_xop_desc_t hammer2_inode_mkdirent_desc ;
@@ -905,6 +924,7 @@ extern hammer2_xop_desc_t hammer2_inode_create_ins_desc;
905924extern hammer2_xop_desc_t hammer2_inode_destroy_desc ;
906925extern hammer2_xop_desc_t hammer2_bmap_desc ;
907926extern hammer2_xop_desc_t hammer2_inode_chain_sync_desc ;
927+ extern hammer2_xop_desc_t hammer2_inode_unlinkall_desc ;
908928extern hammer2_xop_desc_t hammer2_inode_flush_desc ;
909929extern hammer2_xop_desc_t hammer2_strategy_read_desc ;
910930
@@ -918,6 +938,8 @@ int hammer2_xop_feed(hammer2_xop_head_t *, hammer2_chain_t *, int, int);
918938int hammer2_xop_collect (hammer2_xop_head_t * , int );
919939
920940/* hammer2_bulkfree.c */
941+ void hammer2_bulkfree_init (hammer2_dev_t * );
942+ void hammer2_bulkfree_uninit (hammer2_dev_t * );
921943int hammer2_bulkfree_pass (hammer2_dev_t * , hammer2_chain_t * ,
922944 struct hammer2_ioc_bulkfree * );
923945
@@ -973,6 +995,7 @@ void hammer2_cluster_rehold(hammer2_cluster_t *);
973995int hammer2_cluster_check (hammer2_cluster_t * , hammer2_key_t , int );
974996
975997/* hammer2_flush.c */
998+ void hammer2_trans_manage_init (hammer2_pfs_t * );
976999void hammer2_trans_init (hammer2_pfs_t * , uint32_t );
9771000void hammer2_trans_setflags (hammer2_pfs_t * , uint32_t );
9781001void hammer2_trans_clearflags (hammer2_pfs_t * , uint32_t );
@@ -1064,6 +1087,7 @@ int hammer2_get_dtype(uint8_t);
10641087int hammer2_get_vtype (uint8_t );
10651088uint8_t hammer2_get_obj_type (uint8_t );
10661089void hammer2_time_to_timespec (uint64_t , struct timespec * );
1090+ uint64_t hammer2_timespec_to_time (const struct timespec * );
10671091uint32_t hammer2_to_unix_xid (const struct uuid * );
10681092void hammer2_guid_to_uuid (struct uuid * , uint32_t );
10691093hammer2_key_t hammer2_dirhash (const char * , size_t );
@@ -1100,6 +1124,7 @@ void hammer2_xop_readdir(hammer2_xop_t *, int);
11001124void hammer2_xop_nresolve (hammer2_xop_t * , int );
11011125void hammer2_xop_unlink (hammer2_xop_t * , int );
11021126void hammer2_xop_scanlhc (hammer2_xop_t * , int );
1127+ void hammer2_xop_scanall (hammer2_xop_t * , int );
11031128void hammer2_xop_lookup (hammer2_xop_t * , int );
11041129void hammer2_xop_delete (hammer2_xop_t * , int );
11051130void hammer2_xop_inode_mkdirent (hammer2_xop_t * , int );
@@ -1109,6 +1134,7 @@ void hammer2_xop_inode_create_ins(hammer2_xop_t *, int);
11091134void hammer2_xop_inode_destroy (hammer2_xop_t * , int );
11101135void hammer2_xop_bmap (hammer2_xop_t * , int );
11111136void hammer2_xop_inode_chain_sync (hammer2_xop_t * , int );
1137+ void hammer2_xop_inode_unlinkall (hammer2_xop_t * , int );
11121138
11131139/* XXX no way to return multiple errnos */
11141140static __inline int
0 commit comments