Benjamin Coddington 3a4ce14d9a nfs/blocklayout: Don't attempt unregister for invalid block device
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@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
2024-11-28 12:55:32 -05:00
..
2024-09-16 13:07:59 +02:00
2024-11-01 07:37:10 -10:00
2024-11-01 07:21:03 -10:00
2024-11-01 07:31:47 -10:00
2024-07-15 11:14:59 -07:00
2024-07-15 11:14:59 -07:00
2024-09-16 09:14:02 +02:00
2024-10-11 15:12:07 +00:00
2024-10-17 00:28:06 -07:00
2024-10-25 17:05:49 +02:00
2024-09-23 11:55:17 -07:00
2024-11-01 07:45:00 -10:00
2024-10-22 09:40:37 -05:00
2024-11-02 09:27:11 -10:00
2024-10-08 10:53:06 -07:00
2024-10-21 10:48:24 -07:00
2024-09-19 10:18:15 +02:00
2024-05-28 11:52:53 +02:00
\n
2024-09-23 10:49:28 -07:00
2024-08-21 22:32:58 +02:00
2024-04-23 13:27:43 +02:00
2024-11-02 09:22:16 -10:00
2024-10-02 12:02:15 -07:00
2024-08-29 06:20:44 +12:00
2024-07-15 11:14:59 -07:00
2024-09-16 08:54:30 +02:00
2024-09-16 08:35:09 +02:00
2024-09-18 08:53:53 +02:00
2024-08-28 13:05:39 +02:00
2024-09-16 08:54:30 +02:00
2024-09-24 15:29:42 -07:00
2024-09-16 11:15:26 +02:00
2024-09-27 08:18:43 -07:00
2024-09-27 18:29:19 +02:00
2024-09-27 08:18:43 -07:00
2024-05-02 16:28:20 +02:00