Skip to content

Commit 93a3844

Browse files
bergwolfTrond Myklebust
authored andcommitted
pnfsblock: don't spinlock when freeing block_dev
bl_free_block_dev() may sleep. We can not call it with spinlock held. Besides, there is no need to take bm_lock as we are last user freeing bm_devlist. Cc: <[email protected]> raspberrypi#3.1+ Signed-off-by: Peng Tao <[email protected]> Signed-off-by: Benny Halevy <[email protected]> Signed-off-by: Trond Myklebust <[email protected]>
1 parent 57582b3 commit 93a3844

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

fs/nfs/blocklayout/blocklayout.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -780,16 +780,13 @@ bl_cleanup_layoutcommit(struct nfs4_layoutcommit_data *lcdata)
780780
static void free_blk_mountid(struct block_mount_id *mid)
781781
{
782782
if (mid) {
783-
struct pnfs_block_dev *dev;
784-
spin_lock(&mid->bm_lock);
785-
while (!list_empty(&mid->bm_devlist)) {
786-
dev = list_first_entry(&mid->bm_devlist,
787-
struct pnfs_block_dev,
788-
bm_node);
783+
struct pnfs_block_dev *dev, *tmp;
784+
785+
/* No need to take bm_lock as we are last user freeing bm_devlist */
786+
list_for_each_entry_safe(dev, tmp, &mid->bm_devlist, bm_node) {
789787
list_del(&dev->bm_node);
790788
bl_free_block_dev(dev);
791789
}
792-
spin_unlock(&mid->bm_lock);
793790
kfree(mid);
794791
}
795792
}

0 commit comments

Comments
 (0)