Patch "nfs/blocklayout: Don't attempt unregister for invalid block device" has been added to the 6.12-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    nfs/blocklayout: Don't attempt unregister for invalid block device

to the 6.12-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     nfs-blocklayout-don-t-attempt-unregister-for-invalid.patch
and it can be found in the queue-6.12 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 52931321544a8bd6473f22eaf886ba076342e536
Author: Benjamin Coddington <bcodding@xxxxxxxxxx>
Date:   Fri Nov 22 10:11:11 2024 -0500

    nfs/blocklayout: Don't attempt unregister for invalid block device
    
    [ Upstream commit 3a4ce14d9a6b868e0787e4582420b721c04ee41e ]
    
    Since commit d869da91cccb ("nfs/blocklayout: Fix premature PR key
    unregistration") an unmount of a pNFS SCSI layout-enabled NFS may
    dereference a NULL block_device in:
    
      bl_unregister_scsi+0x16/0xe0 [blocklayoutdriver]
      bl_free_device+0x70/0x80 [blocklayoutdriver]
      bl_free_deviceid_node+0x12/0x30 [blocklayoutdriver]
      nfs4_put_deviceid_node+0x60/0xc0 [nfsv4]
      nfs4_deviceid_purge_client+0x132/0x190 [nfsv4]
      unset_pnfs_layoutdriver+0x59/0x60 [nfsv4]
      nfs4_destroy_server+0x36/0x70 [nfsv4]
      nfs_free_server+0x23/0xe0 [nfs]
      deactivate_locked_super+0x30/0xb0
      cleanup_mnt+0xba/0x150
      task_work_run+0x59/0x90
      syscall_exit_to_user_mode+0x217/0x220
      do_syscall_64+0x8e/0x160
    
    This happens because even though we were able to create the
    nfs4_deviceid_node, the lookup for the device was unable to attach the
    block device to the pnfs_block_dev.
    
    If we never found a block device to register, we can avoid this case with
    the PNFS_BDEV_REGISTERED flag.  Move the deref behind the test for the
    flag.
    
    Fixes: d869da91cccb ("nfs/blocklayout: Fix premature PR key unregistration")
    Signed-off-by: Benjamin Coddington <bcodding@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
    Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/nfs/blocklayout/dev.c b/fs/nfs/blocklayout/dev.c
index 6252f44479457..cab8809f0e0f4 100644
--- a/fs/nfs/blocklayout/dev.c
+++ b/fs/nfs/blocklayout/dev.c
@@ -20,9 +20,6 @@ static void bl_unregister_scsi(struct pnfs_block_dev *dev)
 	const struct pr_ops *ops = bdev->bd_disk->fops->pr_ops;
 	int status;
 
-	if (!test_and_clear_bit(PNFS_BDEV_REGISTERED, &dev->flags))
-		return;
-
 	status = ops->pr_register(bdev, dev->pr_key, 0, false);
 	if (status)
 		trace_bl_pr_key_unreg_err(bdev, dev->pr_key, status);
@@ -58,7 +55,8 @@ static void bl_unregister_dev(struct pnfs_block_dev *dev)
 		return;
 	}
 
-	if (dev->type == PNFS_BLOCK_VOLUME_SCSI)
+	if (dev->type == PNFS_BLOCK_VOLUME_SCSI &&
+		test_and_clear_bit(PNFS_BDEV_REGISTERED, &dev->flags))
 		bl_unregister_scsi(dev);
 }
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux