Commit 670c12ce authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'for-6.11/dm-fixes' of...

Merge tag 'for-6.11/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm

Pull device mapper fixes from Mikulas Patocka:

 - fix misbehavior if suspend or resume is interrupted by a signal

 - fix wrong indentation in dm-crypt.rst

 - fix memory allocation failure in dm-persistent-data

* tag 'for-6.11/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
  dm persistent data: fix memory allocation failure
  Documentation: dm-crypt.rst warning + error fix
  dm resume: don't return EINVAL when signalled
  dm suspend: return -ERESTARTSYS instead of -EINTR
parents de53959e faada217
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@ iv_large_sectors


Module parameters::

   max_read_size
   max_write_size
      Maximum size of read or write requests. When a request larger than this size
+20 −2
Original line number Diff line number Diff line
@@ -1181,8 +1181,26 @@ static int do_resume(struct dm_ioctl *param)
			suspend_flags &= ~DM_SUSPEND_LOCKFS_FLAG;
		if (param->flags & DM_NOFLUSH_FLAG)
			suspend_flags |= DM_SUSPEND_NOFLUSH_FLAG;
		if (!dm_suspended_md(md))
			dm_suspend(md, suspend_flags);
		if (!dm_suspended_md(md)) {
			r = dm_suspend(md, suspend_flags);
			if (r) {
				down_write(&_hash_lock);
				hc = dm_get_mdptr(md);
				if (hc && !hc->new_map) {
					hc->new_map = new_map;
					new_map = NULL;
				} else {
					r = -ENXIO;
				}
				up_write(&_hash_lock);
				if (new_map) {
					dm_sync_table(md);
					dm_table_destroy(new_map);
				}
				dm_put(md);
				return r;
			}
		}

		old_size = dm_get_size(md);
		old_map = dm_swap_table(md, new_map);
+2 −2
Original line number Diff line number Diff line
@@ -2737,7 +2737,7 @@ static int dm_wait_for_bios_completion(struct mapped_device *md, unsigned int ta
			break;

		if (signal_pending_state(task_state, current)) {
			r = -EINTR;
			r = -ERESTARTSYS;
			break;
		}

@@ -2762,7 +2762,7 @@ static int dm_wait_for_completion(struct mapped_device *md, unsigned int task_st
			break;

		if (signal_pending_state(task_state, current)) {
			r = -EINTR;
			r = -ERESTARTSYS;
			break;
		}

+2 −2
Original line number Diff line number Diff line
@@ -277,7 +277,7 @@ static void sm_metadata_destroy(struct dm_space_map *sm)
{
	struct sm_metadata *smm = container_of(sm, struct sm_metadata, sm);

	kfree(smm);
	kvfree(smm);
}

static int sm_metadata_get_nr_blocks(struct dm_space_map *sm, dm_block_t *count)
@@ -772,7 +772,7 @@ struct dm_space_map *dm_sm_metadata_init(void)
{
	struct sm_metadata *smm;

	smm = kmalloc(sizeof(*smm), GFP_KERNEL);
	smm = kvmalloc(sizeof(*smm), GFP_KERNEL);
	if (!smm)
		return ERR_PTR(-ENOMEM);