projects
/
linux-2.6-microblaze.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'libnvdimm-for-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdim...
[linux-2.6-microblaze.git]
/
drivers
/
md
/
dm.c
diff --git
a/drivers/md/dm.c
b/drivers/md/dm.c
index
4657143
..
a011d09
100644
(file)
--- a/
drivers/md/dm.c
+++ b/
drivers/md/dm.c
@@
-8,6
+8,7
@@
#include "dm-core.h"
#include "dm-rq.h"
#include "dm-uevent.h"
#include "dm-core.h"
#include "dm-rq.h"
#include "dm-uevent.h"
+#include "dm-ima.h"
#include <linux/init.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/module.h>
@@
-261,9
+262,13
@@
static void (*_exits[])(void) = {
static int __init dm_init(void)
{
const int count = ARRAY_SIZE(_inits);
static int __init dm_init(void)
{
const int count = ARRAY_SIZE(_inits);
-
int r, i;
int r, i;
+#if (IS_ENABLED(CONFIG_IMA) && !IS_ENABLED(CONFIG_IMA_DISABLE_HTABLE))
+ DMWARN("CONFIG_IMA_DISABLE_HTABLE is disabled."
+ " Duplicate IMA measurements will not be recorded in the IMA log.");
+#endif
+
for (i = 0; i < count; i++) {
r = _inits[i]();
if (r)
for (i = 0; i < count; i++) {
r = _inits[i]();
if (r)
@@
-271,8
+276,7
@@
static int __init dm_init(void)
}
return 0;
}
return 0;
-
- bad:
+bad:
while (i--)
_exits[i]();
while (i--)
_exits[i]();
@@
-1693,14
+1697,13
@@
static void cleanup_mapped_device(struct mapped_device *md)
spin_lock(&_minor_lock);
md->disk->private_data = NULL;
spin_unlock(&_minor_lock);
spin_lock(&_minor_lock);
md->disk->private_data = NULL;
spin_unlock(&_minor_lock);
- del_gendisk(md->disk);
- }
-
- if (md->queue)
+ if (dm_get_md_type(md) != DM_TYPE_NONE) {
+ dm_sysfs_exit(md);
+ del_gendisk(md->disk);
+ }
dm_queue_destroy_keyslot_manager(md->queue);
dm_queue_destroy_keyslot_manager(md->queue);
-
- if (md->disk)
blk_cleanup_disk(md->disk);
blk_cleanup_disk(md->disk);
+ }
cleanup_srcu_struct(&md->io_barrier);
cleanup_srcu_struct(&md->io_barrier);
@@
-1792,7
+1795,6
@@
static struct mapped_device *alloc_dev(int minor)
goto bad;
}
goto bad;
}
- add_disk_no_queue_reg(md->disk);
format_dev_t(md->name, MKDEV(_major, minor));
md->wq = alloc_workqueue("kdmflush", WQ_MEM_RECLAIM, 0);
format_dev_t(md->name, MKDEV(_major, minor));
md->wq = alloc_workqueue("kdmflush", WQ_MEM_RECLAIM, 0);
@@
-1993,18
+1995,13
@@
static struct dm_table *__unbind(struct mapped_device *md)
*/
int dm_create(int minor, struct mapped_device **result)
{
*/
int dm_create(int minor, struct mapped_device **result)
{
- int r;
struct mapped_device *md;
md = alloc_dev(minor);
if (!md)
return -ENXIO;
struct mapped_device *md;
md = alloc_dev(minor);
if (!md)
return -ENXIO;
- r = dm_sysfs_init(md);
- if (r) {
- free_dev(md);
- return r;
- }
+ dm_ima_reset_data(md);
*result = md;
return 0;
*result = md;
return 0;
@@
-2056,9
+2053,9
@@
EXPORT_SYMBOL_GPL(dm_get_queue_limits);
*/
int dm_setup_md_queue(struct mapped_device *md, struct dm_table *t)
{
*/
int dm_setup_md_queue(struct mapped_device *md, struct dm_table *t)
{
-
int r
;
+
enum dm_queue_mode type = dm_table_get_type(t)
;
struct queue_limits limits;
struct queue_limits limits;
-
enum dm_queue_mode type = dm_get_md_type(md)
;
+
int r
;
switch (type) {
case DM_TYPE_REQUEST_BASED:
switch (type) {
case DM_TYPE_REQUEST_BASED:
@@
-2086,8
+2083,14
@@
int dm_setup_md_queue(struct mapped_device *md, struct dm_table *t)
if (r)
return r;
if (r)
return r;
-
blk_register_queue
(md->disk);
+
add_disk
(md->disk);
+ r = dm_sysfs_init(md);
+ if (r) {
+ del_gendisk(md->disk);
+ return r;
+ }
+ md->type = type;
return 0;
}
return 0;
}
@@
-2193,7
+2196,6
@@
static void __dm_destroy(struct mapped_device *md, bool wait)
DMWARN("%s: Forcibly removing mapped_device still in use! (%d users)",
dm_device_name(md), atomic_read(&md->holders));
DMWARN("%s: Forcibly removing mapped_device still in use! (%d users)",
dm_device_name(md), atomic_read(&md->holders));
- dm_sysfs_exit(md);
dm_table_destroy(__unbind(md));
free_dev(md);
}
dm_table_destroy(__unbind(md));
free_dev(md);
}