Use MUTEX_FSTRANS mutex type
There are regions in the ZFS code where it is desirable to be able to be set PF_FSTRANS while a specific mutex is held. The ZFS code could be updated to set/clear this flag in all the correct places, but this is undesirable for a few reasons. 1) It would require changes to a significant amount of the ZFS code. This would complicate applying patches from upstream. 2) It would be easy to accidentally miss a critical region in the initial patch or to have an future change introduce a new one. Both of these concerns can be addressed by using a new mutex type which is responsible for managing PF_FSTRANS, support for which was added to the SPL in commit zfsonlinux/spl@9099312 - Merge branch 'kmem-rework'. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tim Chase <tim@chase2k.com> Closes #3050 Closes #3055 Closes #3062 Closes #3132 Closes #3142 Closes #2983
This commit is contained in:
parent
d14cfd83da
commit
4ec15b8dcf
@ -273,6 +273,7 @@ typedef struct kmutex {
|
||||
} kmutex_t;
|
||||
|
||||
#define MUTEX_DEFAULT 0
|
||||
#define MUTEX_FSTRANS MUTEX_DEFAULT
|
||||
#define MUTEX_HELD(m) ((m)->m_owner == curthread)
|
||||
#define MUTEX_NOT_HELD(m) (!MUTEX_HELD(m))
|
||||
|
||||
|
@ -928,7 +928,7 @@ buf_init(void)
|
||||
|
||||
for (i = 0; i < BUF_LOCKS; i++) {
|
||||
mutex_init(&buf_hash_table.ht_locks[i].ht_lock,
|
||||
NULL, MUTEX_DEFAULT, NULL);
|
||||
NULL, MUTEX_FSTRANS, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -331,7 +331,7 @@ dbuf_init(void)
|
||||
0, dbuf_cons, dbuf_dest, NULL, NULL, NULL, 0);
|
||||
|
||||
for (i = 0; i < DBUF_MUTEXES; i++)
|
||||
mutex_init(&h->hash_mutexes[i], NULL, MUTEX_DEFAULT, NULL);
|
||||
mutex_init(&h->hash_mutexes[i], NULL, MUTEX_FSTRANS, NULL);
|
||||
|
||||
dbuf_stats_init(h);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user