]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Fri, 3 Dec 2010 21:03:40 +0000 (13:03 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 3 Dec 2010 21:03:40 +0000 (13:03 -0800)
queue-2.6.32/reiserfs-don-t-acquire-lock-recursively-in-reiserfs_acl_chmod.patch [new file with mode: 0644]
queue-2.6.32/reiserfs-fix-dependency-inversion-between-inode-and-reiserfs-mutexes.patch [new file with mode: 0644]
queue-2.6.32/reiserfs-fix-unwanted-reiserfs-lock-recursion.patch [new file with mode: 0644]
queue-2.6.32/series
queue-2.6.32/staging-asus_oled-fix-up-my-fixup-for-some-sysfs-attribute-permissions.patch [new file with mode: 0644]
queue-2.6.32/staging-asus_oled-fix-up-some-sysfs-attribute-permissions.patch [new file with mode: 0644]
queue-2.6.32/staging-line6-fix-up-some-sysfs-attribute-permissions.patch [new file with mode: 0644]

diff --git a/queue-2.6.32/reiserfs-don-t-acquire-lock-recursively-in-reiserfs_acl_chmod.patch b/queue-2.6.32/reiserfs-don-t-acquire-lock-recursively-in-reiserfs_acl_chmod.patch
new file mode 100644 (file)
index 0000000..4cb9e1a
--- /dev/null
@@ -0,0 +1,51 @@
+From 238af8751f64a75f8b638193353b1c31ea32e738 Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <fweisbec@gmail.com>
+Date: Thu, 2 Dec 2010 14:31:16 -0800
+Subject: reiserfs: don't acquire lock recursively in reiserfs_acl_chmod
+
+From: Frederic Weisbecker <fweisbec@gmail.com>
+
+commit 238af8751f64a75f8b638193353b1c31ea32e738 upstream.
+
+reiserfs_acl_chmod() can be called by reiserfs_set_attr() and then take
+the reiserfs lock a second time.  Thereafter it may call journal_begin()
+that definitely requires the lock not to be nested in order to release
+it before taking the journal mutex because the reiserfs lock depends on
+the journal mutex already.
+
+So, aviod nesting the lock in reiserfs_acl_chmod().
+
+Reported-by: Pawel Zawora <pzawora@gmail.com>
+Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
+Tested-by: Pawel Zawora <pzawora@gmail.com>
+Cc: Jeff Mahoney <jeffm@suse.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/reiserfs/xattr_acl.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/fs/reiserfs/xattr_acl.c
++++ b/fs/reiserfs/xattr_acl.c
+@@ -466,7 +466,9 @@ int reiserfs_acl_chmod(struct inode *ino
+               struct reiserfs_transaction_handle th;
+               size_t size = reiserfs_xattr_nblocks(inode,
+                                            reiserfs_acl_size(clone->a_count));
+-              reiserfs_write_lock(inode->i_sb);
++              int depth;
++
++              depth = reiserfs_write_lock_once(inode->i_sb);
+               error = journal_begin(&th, inode->i_sb, size * 2);
+               if (!error) {
+                       int error2;
+@@ -476,7 +478,7 @@ int reiserfs_acl_chmod(struct inode *ino
+                       if (error2)
+                               error = error2;
+               }
+-              reiserfs_write_unlock(inode->i_sb);
++              reiserfs_write_unlock_once(inode->i_sb, depth);
+       }
+       posix_acl_release(clone);
+       return error;
diff --git a/queue-2.6.32/reiserfs-fix-dependency-inversion-between-inode-and-reiserfs-mutexes.patch b/queue-2.6.32/reiserfs-fix-dependency-inversion-between-inode-and-reiserfs-mutexes.patch
new file mode 100644 (file)
index 0000000..1d2124f
--- /dev/null
@@ -0,0 +1,98 @@
+From 3f259d092c7a2fdf217823e8f1838530adb0cdb0 Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <fweisbec@gmail.com>
+Date: Thu, 30 Sep 2010 15:15:37 -0700
+Subject: reiserfs: fix dependency inversion between inode and reiserfs mutexes
+
+From: Frederic Weisbecker <fweisbec@gmail.com>
+
+commit 3f259d092c7a2fdf217823e8f1838530adb0cdb0 upstream.
+
+The reiserfs mutex already depends on the inode mutex, so we can't lock
+the inode mutex in reiserfs_unpack() without using the safe locking API,
+because reiserfs_unpack() is always called with the reiserfs mutex locked.
+
+This fixes:
+
+  =======================================================
+  [ INFO: possible circular locking dependency detected ]
+  2.6.35c #13
+  -------------------------------------------------------
+  lilo/1606 is trying to acquire lock:
+   (&sb->s_type->i_mutex_key#8){+.+.+.}, at: [<d0329450>] reiserfs_unpack+0x60/0x110 [reiserfs]
+
+  but task is already holding lock:
+   (&REISERFS_SB(s)->lock){+.+.+.}, at: [<d032a268>] reiserfs_write_lock+0x28/0x40 [reiserfs]
+
+  which lock already depends on the new lock.
+
+  the existing dependency chain (in reverse order) is:
+
+  -> #1 (&REISERFS_SB(s)->lock){+.+.+.}:
+         [<c1056347>] lock_acquire+0x67/0x80
+         [<c12f083d>] __mutex_lock_common+0x4d/0x410
+         [<c12f0c58>] mutex_lock_nested+0x18/0x20
+         [<d032a268>] reiserfs_write_lock+0x28/0x40 [reiserfs]
+         [<d0329e9a>] reiserfs_lookup_privroot+0x2a/0x90 [reiserfs]
+         [<d0316b81>] reiserfs_fill_super+0x941/0xe60 [reiserfs]
+         [<c10b7d17>] get_sb_bdev+0x117/0x170
+         [<d0313e21>] get_super_block+0x21/0x30 [reiserfs]
+         [<c10b74ba>] vfs_kern_mount+0x6a/0x1b0
+         [<c10b7659>] do_kern_mount+0x39/0xe0
+         [<c10cebe0>] do_mount+0x340/0x790
+         [<c10cf0b4>] sys_mount+0x84/0xb0
+         [<c12f25cd>] syscall_call+0x7/0xb
+
+  -> #0 (&sb->s_type->i_mutex_key#8){+.+.+.}:
+         [<c1056186>] __lock_acquire+0x1026/0x1180
+         [<c1056347>] lock_acquire+0x67/0x80
+         [<c12f083d>] __mutex_lock_common+0x4d/0x410
+         [<c12f0c58>] mutex_lock_nested+0x18/0x20
+         [<d0329450>] reiserfs_unpack+0x60/0x110 [reiserfs]
+         [<d0329772>] reiserfs_ioctl+0x272/0x320 [reiserfs]
+         [<c10c3228>] vfs_ioctl+0x28/0xa0
+         [<c10c3c5d>] do_vfs_ioctl+0x32d/0x5c0
+         [<c10c3f53>] sys_ioctl+0x63/0x70
+         [<c12f25cd>] syscall_call+0x7/0xb
+
+  other info that might help us debug this:
+
+  1 lock held by lilo/1606:
+   #0:  (&REISERFS_SB(s)->lock){+.+.+.}, at: [<d032a268>] reiserfs_write_lock+0x28/0x40 [reiserfs]
+
+  stack backtrace:
+  Pid: 1606, comm: lilo Not tainted 2.6.35c #13
+  Call Trace:
+   [<c1056186>] __lock_acquire+0x1026/0x1180
+   [<c1056347>] lock_acquire+0x67/0x80
+   [<c12f083d>] __mutex_lock_common+0x4d/0x410
+   [<c12f0c58>] mutex_lock_nested+0x18/0x20
+   [<d0329450>] reiserfs_unpack+0x60/0x110 [reiserfs]
+   [<d0329772>] reiserfs_ioctl+0x272/0x320 [reiserfs]
+   [<c10c3228>] vfs_ioctl+0x28/0xa0
+   [<c10c3c5d>] do_vfs_ioctl+0x32d/0x5c0
+   [<c10c3f53>] sys_ioctl+0x63/0x70
+   [<c12f25cd>] syscall_call+0x7/0xb
+
+Reported-by: Jarek Poplawski <jarkao2@gmail.com>
+Tested-by: Jarek Poplawski <jarkao2@gmail.com>
+Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Jeff Mahoney <jeffm@suse.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/reiserfs/ioctl.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/reiserfs/ioctl.c
++++ b/fs/reiserfs/ioctl.c
+@@ -178,7 +178,7 @@ int reiserfs_unpack(struct inode *inode,
+       /* we need to make sure nobody is changing the file size beneath
+        ** us
+        */
+-      mutex_lock(&inode->i_mutex);
++      reiserfs_mutex_lock_safe(&inode->i_mutex, inode->i_sb);
+       reiserfs_write_lock(inode->i_sb);
+       write_from = inode->i_size & (blocksize - 1);
diff --git a/queue-2.6.32/reiserfs-fix-unwanted-reiserfs-lock-recursion.patch b/queue-2.6.32/reiserfs-fix-unwanted-reiserfs-lock-recursion.patch
new file mode 100644 (file)
index 0000000..d8c6da6
--- /dev/null
@@ -0,0 +1,129 @@
+From 9d8117e72bf453dd9d85e0cd322ce4a0f8bccbc0 Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <fweisbec@gmail.com>
+Date: Thu, 30 Sep 2010 15:15:38 -0700
+Subject: reiserfs: fix unwanted reiserfs lock recursion
+
+From: Frederic Weisbecker <fweisbec@gmail.com>
+
+commit 9d8117e72bf453dd9d85e0cd322ce4a0f8bccbc0 upstream.
+
+Prevent from recursively locking the reiserfs lock in reiserfs_unpack()
+because we may call journal_begin() that requires the lock to be taken
+only once, otherwise it won't be able to release the lock while taking
+other mutexes, ending up in inverted dependencies between the journal
+mutex and the reiserfs lock for example.
+
+This fixes:
+
+  =======================================================
+  [ INFO: possible circular locking dependency detected ]
+  2.6.35.4.4a #3
+  -------------------------------------------------------
+  lilo/1620 is trying to acquire lock:
+   (&journal->j_mutex){+.+...}, at: [<d0325bff>] do_journal_begin_r+0x7f/0x340 [reiserfs]
+
+  but task is already holding lock:
+   (&REISERFS_SB(s)->lock){+.+.+.}, at: [<d032a278>] reiserfs_write_lock+0x28/0x40 [reiserfs]
+
+  which lock already depends on the new lock.
+
+  the existing dependency chain (in reverse order) is:
+
+  -> #1 (&REISERFS_SB(s)->lock){+.+.+.}:
+         [<c10562b7>] lock_acquire+0x67/0x80
+         [<c12facad>] __mutex_lock_common+0x4d/0x410
+         [<c12fb0c8>] mutex_lock_nested+0x18/0x20
+         [<d032a278>] reiserfs_write_lock+0x28/0x40 [reiserfs]
+         [<d0325c06>] do_journal_begin_r+0x86/0x340 [reiserfs]
+         [<d0325f77>] journal_begin+0x77/0x140 [reiserfs]
+         [<d0315be4>] reiserfs_remount+0x224/0x530 [reiserfs]
+         [<c10b6a20>] do_remount_sb+0x60/0x110
+         [<c10cee25>] do_mount+0x625/0x790
+         [<c10cf014>] sys_mount+0x84/0xb0
+         [<c12fca3d>] syscall_call+0x7/0xb
+
+  -> #0 (&journal->j_mutex){+.+...}:
+         [<c10560f6>] __lock_acquire+0x1026/0x1180
+         [<c10562b7>] lock_acquire+0x67/0x80
+         [<c12facad>] __mutex_lock_common+0x4d/0x410
+         [<c12fb0c8>] mutex_lock_nested+0x18/0x20
+         [<d0325bff>] do_journal_begin_r+0x7f/0x340 [reiserfs]
+         [<d0325f77>] journal_begin+0x77/0x140 [reiserfs]
+         [<d0326271>] reiserfs_persistent_transaction+0x41/0x90 [reiserfs]
+         [<d030d06c>] reiserfs_get_block+0x22c/0x1530 [reiserfs]
+         [<c10db9db>] __block_prepare_write+0x1bb/0x3a0
+         [<c10dbbe6>] block_prepare_write+0x26/0x40
+         [<d030b738>] reiserfs_prepare_write+0x88/0x170 [reiserfs]
+         [<d03294d6>] reiserfs_unpack+0xe6/0x120 [reiserfs]
+         [<d0329782>] reiserfs_ioctl+0x272/0x320 [reiserfs]
+         [<c10c3188>] vfs_ioctl+0x28/0xa0
+         [<c10c3bbd>] do_vfs_ioctl+0x32d/0x5c0
+         [<c10c3eb3>] sys_ioctl+0x63/0x70
+         [<c12fca3d>] syscall_call+0x7/0xb
+
+  other info that might help us debug this:
+
+  2 locks held by lilo/1620:
+   #0:  (&sb->s_type->i_mutex_key#8){+.+.+.}, at: [<d032945a>] reiserfs_unpack+0x6a/0x120 [reiserfs]
+   #1:  (&REISERFS_SB(s)->lock){+.+.+.}, at: [<d032a278>] reiserfs_write_lock+0x28/0x40 [reiserfs]
+
+  stack backtrace:
+  Pid: 1620, comm: lilo Not tainted 2.6.35.4.4a #3
+  Call Trace:
+   [<c10560f6>] __lock_acquire+0x1026/0x1180
+   [<c10562b7>] lock_acquire+0x67/0x80
+   [<c12facad>] __mutex_lock_common+0x4d/0x410
+   [<c12fb0c8>] mutex_lock_nested+0x18/0x20
+   [<d0325bff>] do_journal_begin_r+0x7f/0x340 [reiserfs]
+   [<d0325f77>] journal_begin+0x77/0x140 [reiserfs]
+   [<d0326271>] reiserfs_persistent_transaction+0x41/0x90 [reiserfs]
+   [<d030d06c>] reiserfs_get_block+0x22c/0x1530 [reiserfs]
+   [<c10db9db>] __block_prepare_write+0x1bb/0x3a0
+   [<c10dbbe6>] block_prepare_write+0x26/0x40
+   [<d030b738>] reiserfs_prepare_write+0x88/0x170 [reiserfs]
+   [<d03294d6>] reiserfs_unpack+0xe6/0x120 [reiserfs]
+   [<d0329782>] reiserfs_ioctl+0x272/0x320 [reiserfs]
+   [<c10c3188>] vfs_ioctl+0x28/0xa0
+   [<c10c3bbd>] do_vfs_ioctl+0x32d/0x5c0
+   [<c10c3eb3>] sys_ioctl+0x63/0x70
+   [<c12fca3d>] syscall_call+0x7/0xb
+
+Reported-by: Jarek Poplawski <jarkao2@gmail.com>
+Tested-by: Jarek Poplawski <jarkao2@gmail.com>
+Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Jeff Mahoney <jeffm@suse.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/reiserfs/ioctl.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/fs/reiserfs/ioctl.c
++++ b/fs/reiserfs/ioctl.c
+@@ -160,6 +160,7 @@ int reiserfs_prepare_write(struct file *
+ int reiserfs_unpack(struct inode *inode, struct file *filp)
+ {
+       int retval = 0;
++      int depth;
+       int index;
+       struct page *page;
+       struct address_space *mapping;
+@@ -179,7 +180,7 @@ int reiserfs_unpack(struct inode *inode,
+        ** us
+        */
+       reiserfs_mutex_lock_safe(&inode->i_mutex, inode->i_sb);
+-      reiserfs_write_lock(inode->i_sb);
++      depth = reiserfs_write_lock_once(inode->i_sb);
+       write_from = inode->i_size & (blocksize - 1);
+       /* if we are on a block boundary, we are already unpacked.  */
+@@ -214,6 +215,6 @@ int reiserfs_unpack(struct inode *inode,
+       out:
+       mutex_unlock(&inode->i_mutex);
+-      reiserfs_write_unlock(inode->i_sb);
++      reiserfs_write_unlock_once(inode->i_sb, depth);
+       return retval;
+ }
index 60041a8e0dfc2497f2f5beabf034be5582ee6db0..49bd33f4006f02907b79ded4b612a426f0bac259 100644 (file)
@@ -9,3 +9,9 @@ i2c-pca-platform-change-device-name-of-request_irq.patch
 sunrpc-after-calling-xprt_release-we-must-restart-from-call_reserve.patch
 microblaze-fix-build-with-make-3.82.patch
 net-clear-heap-allocation-for-ethtool_grxclsrlall.patch
+reiserfs-fix-dependency-inversion-between-inode-and-reiserfs-mutexes.patch
+reiserfs-fix-unwanted-reiserfs-lock-recursion.patch
+reiserfs-don-t-acquire-lock-recursively-in-reiserfs_acl_chmod.patch
+staging-asus_oled-fix-up-some-sysfs-attribute-permissions.patch
+staging-asus_oled-fix-up-my-fixup-for-some-sysfs-attribute-permissions.patch
+staging-line6-fix-up-some-sysfs-attribute-permissions.patch
diff --git a/queue-2.6.32/staging-asus_oled-fix-up-my-fixup-for-some-sysfs-attribute-permissions.patch b/queue-2.6.32/staging-asus_oled-fix-up-my-fixup-for-some-sysfs-attribute-permissions.patch
new file mode 100644 (file)
index 0000000..5a21633
--- /dev/null
@@ -0,0 +1,40 @@
+From 515b4987ccd097cdf5416530b05fdf9e01afe95a Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@suse.de>
+Date: Thu, 18 Nov 2010 11:21:04 -0800
+Subject: Staging: asus_oled: fix up my fixup for some sysfs attribute permissions
+
+From: Greg Kroah-Hartman <gregkh@suse.de>
+
+commit 515b4987ccd097cdf5416530b05fdf9e01afe95a upstream.
+
+They should be writable by root, not readable.
+Doh, stupid me with the wrong flags.
+
+Reported-by: Jonathan Cameron <jic23@cam.ac.uk>
+Cc: Jakub Schmidtke <sjakub@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/asus_oled/asus_oled.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/staging/asus_oled/asus_oled.c
++++ b/drivers/staging/asus_oled/asus_oled.c
+@@ -609,13 +609,13 @@ static ssize_t class_set_picture(struct
+ #define ASUS_OLED_DEVICE_ATTR(_file)          dev_attr_asus_oled_##_file
+-static DEVICE_ATTR(asus_oled_enabled, S_IRUSR | S_IRUGO,
++static DEVICE_ATTR(asus_oled_enabled, S_IWUSR | S_IRUGO,
+                  get_enabled, set_enabled);
+-static DEVICE_ATTR(asus_oled_picture, S_IRUSR , NULL, set_picture);
++static DEVICE_ATTR(asus_oled_picture, S_IWUSR , NULL, set_picture);
+-static DEVICE_ATTR(enabled, S_IRUSR | S_IRUGO,
++static DEVICE_ATTR(enabled, S_IWUSR | S_IRUGO,
+                  class_get_enabled, class_set_enabled);
+-static DEVICE_ATTR(picture, S_IRUSR, NULL, class_set_picture);
++static DEVICE_ATTR(picture, S_IWUSR, NULL, class_set_picture);
+ static int asus_oled_probe(struct usb_interface *interface,
+                          const struct usb_device_id *id)
diff --git a/queue-2.6.32/staging-asus_oled-fix-up-some-sysfs-attribute-permissions.patch b/queue-2.6.32/staging-asus_oled-fix-up-some-sysfs-attribute-permissions.patch
new file mode 100644 (file)
index 0000000..2d9f7a3
--- /dev/null
@@ -0,0 +1,39 @@
+From 590b0b9754bd8928926bae7194b6da7ead9bda3b Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@suse.de>
+Date: Tue, 16 Nov 2010 11:17:01 -0800
+Subject: Staging: asus_oled: fix up some sysfs attribute permissions
+
+From: Greg Kroah-Hartman <gregkh@suse.de>
+
+commit 590b0b9754bd8928926bae7194b6da7ead9bda3b upstream.
+
+They should not be writable by any user
+
+Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Jakub Schmidtke <sjakub@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/asus_oled/asus_oled.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/staging/asus_oled/asus_oled.c
++++ b/drivers/staging/asus_oled/asus_oled.c
+@@ -609,13 +609,13 @@ static ssize_t class_set_picture(struct
+ #define ASUS_OLED_DEVICE_ATTR(_file)          dev_attr_asus_oled_##_file
+-static DEVICE_ATTR(asus_oled_enabled, S_IWUGO | S_IRUGO,
++static DEVICE_ATTR(asus_oled_enabled, S_IRUSR | S_IRUGO,
+                  get_enabled, set_enabled);
+-static DEVICE_ATTR(asus_oled_picture, S_IWUGO , NULL, set_picture);
++static DEVICE_ATTR(asus_oled_picture, S_IRUSR , NULL, set_picture);
+-static DEVICE_ATTR(enabled, S_IWUGO | S_IRUGO,
++static DEVICE_ATTR(enabled, S_IRUSR | S_IRUGO,
+                  class_get_enabled, class_set_enabled);
+-static DEVICE_ATTR(picture, S_IWUGO, NULL, class_set_picture);
++static DEVICE_ATTR(picture, S_IRUSR, NULL, class_set_picture);
+ static int asus_oled_probe(struct usb_interface *interface,
+                          const struct usb_device_id *id)
diff --git a/queue-2.6.32/staging-line6-fix-up-some-sysfs-attribute-permissions.patch b/queue-2.6.32/staging-line6-fix-up-some-sysfs-attribute-permissions.patch
new file mode 100644 (file)
index 0000000..d1a1ba6
--- /dev/null
@@ -0,0 +1,343 @@
+From 2018845b6a169f75341f8e68ad1089cb6697cf24 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@suse.de>
+Date: Tue, 16 Nov 2010 11:23:33 -0800
+Subject: Staging: line6: fix up some sysfs attribute permissions
+
+From: Greg Kroah-Hartman <gregkh@suse.de>
+
+commit 2018845b6a169f75341f8e68ad1089cb6697cf24 and
+2018845b6a169f75341f8e68ad1089cb6697cf24 upstream merged together as it
+had to be backported by hand.
+
+They should not be writable by any user
+
+Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Markus Grabner <grabner@icg.tugraz.at>
+Cc: Mariusz Kozlowski <m.kozlowski@tuxland.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/line6/control.c  |  204 +++++++++++++++++++--------------------
+ drivers/staging/line6/midi.c     |    4 
+ drivers/staging/line6/pod.c      |   32 +++---
+ drivers/staging/line6/toneport.c |    4 
+ drivers/staging/line6/variax.c   |   12 +-
+ 5 files changed, 128 insertions(+), 128 deletions(-)
+
+--- a/drivers/staging/line6/control.c
++++ b/drivers/staging/line6/control.c
+@@ -259,108 +259,108 @@ VARIAX_PARAM_R(float, mix2);
+ VARIAX_PARAM_R(float, mix1);
+ VARIAX_PARAM_R(int, pickup_wiring);
+-static DEVICE_ATTR(tweak, S_IWUGO | S_IRUGO, pod_get_tweak, pod_set_tweak);
+-static DEVICE_ATTR(wah_position, S_IWUGO | S_IRUGO, pod_get_wah_position, pod_set_wah_position);
+-static DEVICE_ATTR(compression_gain, S_IWUGO | S_IRUGO, pod_get_compression_gain, pod_set_compression_gain);
+-static DEVICE_ATTR(vol_pedal_position, S_IWUGO | S_IRUGO, pod_get_vol_pedal_position, pod_set_vol_pedal_position);
+-static DEVICE_ATTR(compression_threshold, S_IWUGO | S_IRUGO, pod_get_compression_threshold, pod_set_compression_threshold);
+-static DEVICE_ATTR(pan, S_IWUGO | S_IRUGO, pod_get_pan, pod_set_pan);
+-static DEVICE_ATTR(amp_model_setup, S_IWUGO | S_IRUGO, pod_get_amp_model_setup, pod_set_amp_model_setup);
+-static DEVICE_ATTR(amp_model, S_IWUGO | S_IRUGO, pod_get_amp_model, pod_set_amp_model);
+-static DEVICE_ATTR(drive, S_IWUGO | S_IRUGO, pod_get_drive, pod_set_drive);
+-static DEVICE_ATTR(bass, S_IWUGO | S_IRUGO, pod_get_bass, pod_set_bass);
+-static DEVICE_ATTR(mid, S_IWUGO | S_IRUGO, pod_get_mid, pod_set_mid);
+-static DEVICE_ATTR(lowmid, S_IWUGO | S_IRUGO, pod_get_lowmid, pod_set_lowmid);
+-static DEVICE_ATTR(treble, S_IWUGO | S_IRUGO, pod_get_treble, pod_set_treble);
+-static DEVICE_ATTR(highmid, S_IWUGO | S_IRUGO, pod_get_highmid, pod_set_highmid);
+-static DEVICE_ATTR(chan_vol, S_IWUGO | S_IRUGO, pod_get_chan_vol, pod_set_chan_vol);
+-static DEVICE_ATTR(reverb_mix, S_IWUGO | S_IRUGO, pod_get_reverb_mix, pod_set_reverb_mix);
+-static DEVICE_ATTR(effect_setup, S_IWUGO | S_IRUGO, pod_get_effect_setup, pod_set_effect_setup);
+-static DEVICE_ATTR(band_1_frequency, S_IWUGO | S_IRUGO, pod_get_band_1_frequency, pod_set_band_1_frequency);
+-static DEVICE_ATTR(presence, S_IWUGO | S_IRUGO, pod_get_presence, pod_set_presence);
+-static DEVICE_ATTR2(treble__bass, treble, S_IWUGO | S_IRUGO, pod_get_treble__bass, pod_set_treble__bass);
+-static DEVICE_ATTR(noise_gate_enable, S_IWUGO | S_IRUGO, pod_get_noise_gate_enable, pod_set_noise_gate_enable);
+-static DEVICE_ATTR(gate_threshold, S_IWUGO | S_IRUGO, pod_get_gate_threshold, pod_set_gate_threshold);
+-static DEVICE_ATTR(gate_decay_time, S_IWUGO | S_IRUGO, pod_get_gate_decay_time, pod_set_gate_decay_time);
+-static DEVICE_ATTR(stomp_enable, S_IWUGO | S_IRUGO, pod_get_stomp_enable, pod_set_stomp_enable);
+-static DEVICE_ATTR(comp_enable, S_IWUGO | S_IRUGO, pod_get_comp_enable, pod_set_comp_enable);
+-static DEVICE_ATTR(stomp_time, S_IWUGO | S_IRUGO, pod_get_stomp_time, pod_set_stomp_time);
+-static DEVICE_ATTR(delay_enable, S_IWUGO | S_IRUGO, pod_get_delay_enable, pod_set_delay_enable);
+-static DEVICE_ATTR(mod_param_1, S_IWUGO | S_IRUGO, pod_get_mod_param_1, pod_set_mod_param_1);
+-static DEVICE_ATTR(delay_param_1, S_IWUGO | S_IRUGO, pod_get_delay_param_1, pod_set_delay_param_1);
+-static DEVICE_ATTR(delay_param_1_note_value, S_IWUGO | S_IRUGO, pod_get_delay_param_1_note_value, pod_set_delay_param_1_note_value);
+-static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUGO | S_IRUGO, pod_get_band_2_frequency__bass, pod_set_band_2_frequency__bass);
+-static DEVICE_ATTR(delay_param_2, S_IWUGO | S_IRUGO, pod_get_delay_param_2, pod_set_delay_param_2);
+-static DEVICE_ATTR(delay_volume_mix, S_IWUGO | S_IRUGO, pod_get_delay_volume_mix, pod_set_delay_volume_mix);
+-static DEVICE_ATTR(delay_param_3, S_IWUGO | S_IRUGO, pod_get_delay_param_3, pod_set_delay_param_3);
+-static DEVICE_ATTR(reverb_enable, S_IWUGO | S_IRUGO, pod_get_reverb_enable, pod_set_reverb_enable);
+-static DEVICE_ATTR(reverb_type, S_IWUGO | S_IRUGO, pod_get_reverb_type, pod_set_reverb_type);
+-static DEVICE_ATTR(reverb_decay, S_IWUGO | S_IRUGO, pod_get_reverb_decay, pod_set_reverb_decay);
+-static DEVICE_ATTR(reverb_tone, S_IWUGO | S_IRUGO, pod_get_reverb_tone, pod_set_reverb_tone);
+-static DEVICE_ATTR(reverb_pre_delay, S_IWUGO | S_IRUGO, pod_get_reverb_pre_delay, pod_set_reverb_pre_delay);
+-static DEVICE_ATTR(reverb_pre_post, S_IWUGO | S_IRUGO, pod_get_reverb_pre_post, pod_set_reverb_pre_post);
+-static DEVICE_ATTR(band_2_frequency, S_IWUGO | S_IRUGO, pod_get_band_2_frequency, pod_set_band_2_frequency);
+-static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUGO | S_IRUGO, pod_get_band_3_frequency__bass, pod_set_band_3_frequency__bass);
+-static DEVICE_ATTR(wah_enable, S_IWUGO | S_IRUGO, pod_get_wah_enable, pod_set_wah_enable);
+-static DEVICE_ATTR(modulation_lo_cut, S_IWUGO | S_IRUGO, pod_get_modulation_lo_cut, pod_set_modulation_lo_cut);
+-static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUGO | S_IRUGO, pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut);
+-static DEVICE_ATTR(volume_pedal_minimum, S_IWUGO | S_IRUGO, pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum);
+-static DEVICE_ATTR(eq_pre_post, S_IWUGO | S_IRUGO, pod_get_eq_pre_post, pod_set_eq_pre_post);
+-static DEVICE_ATTR(volume_pre_post, S_IWUGO | S_IRUGO, pod_get_volume_pre_post, pod_set_volume_pre_post);
+-static DEVICE_ATTR(di_model, S_IWUGO | S_IRUGO, pod_get_di_model, pod_set_di_model);
+-static DEVICE_ATTR(di_delay, S_IWUGO | S_IRUGO, pod_get_di_delay, pod_set_di_delay);
+-static DEVICE_ATTR(mod_enable, S_IWUGO | S_IRUGO, pod_get_mod_enable, pod_set_mod_enable);
+-static DEVICE_ATTR(mod_param_1_note_value, S_IWUGO | S_IRUGO, pod_get_mod_param_1_note_value, pod_set_mod_param_1_note_value);
+-static DEVICE_ATTR(mod_param_2, S_IWUGO | S_IRUGO, pod_get_mod_param_2, pod_set_mod_param_2);
+-static DEVICE_ATTR(mod_param_3, S_IWUGO | S_IRUGO, pod_get_mod_param_3, pod_set_mod_param_3);
+-static DEVICE_ATTR(mod_param_4, S_IWUGO | S_IRUGO, pod_get_mod_param_4, pod_set_mod_param_4);
+-static DEVICE_ATTR(mod_param_5, S_IWUGO | S_IRUGO, pod_get_mod_param_5, pod_set_mod_param_5);
+-static DEVICE_ATTR(mod_volume_mix, S_IWUGO | S_IRUGO, pod_get_mod_volume_mix, pod_set_mod_volume_mix);
+-static DEVICE_ATTR(mod_pre_post, S_IWUGO | S_IRUGO, pod_get_mod_pre_post, pod_set_mod_pre_post);
+-static DEVICE_ATTR(modulation_model, S_IWUGO | S_IRUGO, pod_get_modulation_model, pod_set_modulation_model);
+-static DEVICE_ATTR(band_3_frequency, S_IWUGO | S_IRUGO, pod_get_band_3_frequency, pod_set_band_3_frequency);
+-static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUGO | S_IRUGO, pod_get_band_4_frequency__bass, pod_set_band_4_frequency__bass);
+-static DEVICE_ATTR(mod_param_1_double_precision, S_IWUGO | S_IRUGO, pod_get_mod_param_1_double_precision, pod_set_mod_param_1_double_precision);
+-static DEVICE_ATTR(delay_param_1_double_precision, S_IWUGO | S_IRUGO, pod_get_delay_param_1_double_precision, pod_set_delay_param_1_double_precision);
+-static DEVICE_ATTR(eq_enable, S_IWUGO | S_IRUGO, pod_get_eq_enable, pod_set_eq_enable);
+-static DEVICE_ATTR(tap, S_IWUGO | S_IRUGO, pod_get_tap, pod_set_tap);
+-static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUGO | S_IRUGO, pod_get_volume_tweak_pedal_assign, pod_set_volume_tweak_pedal_assign);
+-static DEVICE_ATTR(band_5_frequency, S_IWUGO | S_IRUGO, pod_get_band_5_frequency, pod_set_band_5_frequency);
+-static DEVICE_ATTR(tuner, S_IWUGO | S_IRUGO, pod_get_tuner, pod_set_tuner);
+-static DEVICE_ATTR(mic_selection, S_IWUGO | S_IRUGO, pod_get_mic_selection, pod_set_mic_selection);
+-static DEVICE_ATTR(cabinet_model, S_IWUGO | S_IRUGO, pod_get_cabinet_model, pod_set_cabinet_model);
+-static DEVICE_ATTR(stomp_model, S_IWUGO | S_IRUGO, pod_get_stomp_model, pod_set_stomp_model);
+-static DEVICE_ATTR(roomlevel, S_IWUGO | S_IRUGO, pod_get_roomlevel, pod_set_roomlevel);
+-static DEVICE_ATTR(band_4_frequency, S_IWUGO | S_IRUGO, pod_get_band_4_frequency, pod_set_band_4_frequency);
+-static DEVICE_ATTR(band_6_frequency, S_IWUGO | S_IRUGO, pod_get_band_6_frequency, pod_set_band_6_frequency);
+-static DEVICE_ATTR(stomp_param_1_note_value, S_IWUGO | S_IRUGO, pod_get_stomp_param_1_note_value, pod_set_stomp_param_1_note_value);
+-static DEVICE_ATTR(stomp_param_2, S_IWUGO | S_IRUGO, pod_get_stomp_param_2, pod_set_stomp_param_2);
+-static DEVICE_ATTR(stomp_param_3, S_IWUGO | S_IRUGO, pod_get_stomp_param_3, pod_set_stomp_param_3);
+-static DEVICE_ATTR(stomp_param_4, S_IWUGO | S_IRUGO, pod_get_stomp_param_4, pod_set_stomp_param_4);
+-static DEVICE_ATTR(stomp_param_5, S_IWUGO | S_IRUGO, pod_get_stomp_param_5, pod_set_stomp_param_5);
+-static DEVICE_ATTR(stomp_param_6, S_IWUGO | S_IRUGO, pod_get_stomp_param_6, pod_set_stomp_param_6);
+-static DEVICE_ATTR(amp_switch_select, S_IWUGO | S_IRUGO, pod_get_amp_switch_select, pod_set_amp_switch_select);
+-static DEVICE_ATTR(delay_param_4, S_IWUGO | S_IRUGO, pod_get_delay_param_4, pod_set_delay_param_4);
+-static DEVICE_ATTR(delay_param_5, S_IWUGO | S_IRUGO, pod_get_delay_param_5, pod_set_delay_param_5);
+-static DEVICE_ATTR(delay_pre_post, S_IWUGO | S_IRUGO, pod_get_delay_pre_post, pod_set_delay_pre_post);
+-static DEVICE_ATTR(delay_model, S_IWUGO | S_IRUGO, pod_get_delay_model, pod_set_delay_model);
+-static DEVICE_ATTR(delay_verb_model, S_IWUGO | S_IRUGO, pod_get_delay_verb_model, pod_set_delay_verb_model);
+-static DEVICE_ATTR(tempo_msb, S_IWUGO | S_IRUGO, pod_get_tempo_msb, pod_set_tempo_msb);
+-static DEVICE_ATTR(tempo_lsb, S_IWUGO | S_IRUGO, pod_get_tempo_lsb, pod_set_tempo_lsb);
+-static DEVICE_ATTR(wah_model, S_IWUGO | S_IRUGO, pod_get_wah_model, pod_set_wah_model);
+-static DEVICE_ATTR(bypass_volume, S_IWUGO | S_IRUGO, pod_get_bypass_volume, pod_set_bypass_volume);
+-static DEVICE_ATTR(fx_loop_on_off, S_IWUGO | S_IRUGO, pod_get_fx_loop_on_off, pod_set_fx_loop_on_off);
+-static DEVICE_ATTR(tweak_param_select, S_IWUGO | S_IRUGO, pod_get_tweak_param_select, pod_set_tweak_param_select);
+-static DEVICE_ATTR(amp1_engage, S_IWUGO | S_IRUGO, pod_get_amp1_engage, pod_set_amp1_engage);
+-static DEVICE_ATTR(band_1_gain, S_IWUGO | S_IRUGO, pod_get_band_1_gain, pod_set_band_1_gain);
+-static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUGO | S_IRUGO, pod_get_band_2_gain__bass, pod_set_band_2_gain__bass);
+-static DEVICE_ATTR(band_2_gain, S_IWUGO | S_IRUGO, pod_get_band_2_gain, pod_set_band_2_gain);
+-static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUGO | S_IRUGO, pod_get_band_3_gain__bass, pod_set_band_3_gain__bass);
+-static DEVICE_ATTR(band_3_gain, S_IWUGO | S_IRUGO, pod_get_band_3_gain, pod_set_band_3_gain);
+-static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUGO | S_IRUGO, pod_get_band_4_gain__bass, pod_set_band_4_gain__bass);
+-static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUGO | S_IRUGO, pod_get_band_5_gain__bass, pod_set_band_5_gain__bass);
+-static DEVICE_ATTR(band_4_gain, S_IWUGO | S_IRUGO, pod_get_band_4_gain, pod_set_band_4_gain);
+-static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUGO | S_IRUGO, pod_get_band_6_gain__bass, pod_set_band_6_gain__bass);
++static DEVICE_ATTR(tweak, S_IWUSR | S_IRUGO, pod_get_tweak, pod_set_tweak);
++static DEVICE_ATTR(wah_position, S_IWUSR | S_IRUGO, pod_get_wah_position, pod_set_wah_position);
++static DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO, pod_get_compression_gain, pod_set_compression_gain);
++static DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO, pod_get_vol_pedal_position, pod_set_vol_pedal_position);
++static DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO, pod_get_compression_threshold, pod_set_compression_threshold);
++static DEVICE_ATTR(pan, S_IWUSR | S_IRUGO, pod_get_pan, pod_set_pan);
++static DEVICE_ATTR(amp_model_setup, S_IWUSR | S_IRUGO, pod_get_amp_model_setup, pod_set_amp_model_setup);
++static DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model, pod_set_amp_model);
++static DEVICE_ATTR(drive, S_IWUSR | S_IRUGO, pod_get_drive, pod_set_drive);
++static DEVICE_ATTR(bass, S_IWUSR | S_IRUGO, pod_get_bass, pod_set_bass);
++static DEVICE_ATTR(mid, S_IWUSR | S_IRUGO, pod_get_mid, pod_set_mid);
++static DEVICE_ATTR(lowmid, S_IWUSR | S_IRUGO, pod_get_lowmid, pod_set_lowmid);
++static DEVICE_ATTR(treble, S_IWUSR | S_IRUGO, pod_get_treble, pod_set_treble);
++static DEVICE_ATTR(highmid, S_IWUSR | S_IRUGO, pod_get_highmid, pod_set_highmid);
++static DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol, pod_set_chan_vol);
++static DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix, pod_set_reverb_mix);
++static DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup, pod_set_effect_setup);
++static DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO, pod_get_band_1_frequency, pod_set_band_1_frequency);
++static DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence, pod_set_presence);
++static DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO, pod_get_treble__bass, pod_set_treble__bass);
++static DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO, pod_get_noise_gate_enable, pod_set_noise_gate_enable);
++static DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold, pod_set_gate_threshold);
++static DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time, pod_set_gate_decay_time);
++static DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable, pod_set_stomp_enable);
++static DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable, pod_set_comp_enable);
++static DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time, pod_set_stomp_time);
++static DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable, pod_set_delay_enable);
++static DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1, pod_set_mod_param_1);
++static DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1, pod_set_delay_param_1);
++static DEVICE_ATTR(delay_param_1_note_value, S_IWUSR | S_IRUGO, pod_get_delay_param_1_note_value, pod_set_delay_param_1_note_value);
++static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUSR | S_IRUGO, pod_get_band_2_frequency__bass, pod_set_band_2_frequency__bass);
++static DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2, pod_set_delay_param_2);
++static DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO, pod_get_delay_volume_mix, pod_set_delay_volume_mix);
++static DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3, pod_set_delay_param_3);
++static DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable, pod_set_reverb_enable);
++static DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type, pod_set_reverb_type);
++static DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay, pod_set_reverb_decay);
++static DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone, pod_set_reverb_tone);
++static DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO, pod_get_reverb_pre_delay, pod_set_reverb_pre_delay);
++static DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post, pod_set_reverb_pre_post);
++static DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO, pod_get_band_2_frequency, pod_set_band_2_frequency);
++static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUSR | S_IRUGO, pod_get_band_3_frequency__bass, pod_set_band_3_frequency__bass);
++static DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable, pod_set_wah_enable);
++static DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO, pod_get_modulation_lo_cut, pod_set_modulation_lo_cut);
++static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO, pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut);
++static DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO, pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum);
++static DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post, pod_set_eq_pre_post);
++static DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post, pod_set_volume_pre_post);
++static DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model, pod_set_di_model);
++static DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay, pod_set_di_delay);
++static DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable, pod_set_mod_enable);
++static DEVICE_ATTR(mod_param_1_note_value, S_IWUSR | S_IRUGO, pod_get_mod_param_1_note_value, pod_set_mod_param_1_note_value);
++static DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2, pod_set_mod_param_2);
++static DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3, pod_set_mod_param_3);
++static DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4, pod_set_mod_param_4);
++static DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5, pod_set_mod_param_5);
++static DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix, pod_set_mod_volume_mix);
++static DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post, pod_set_mod_pre_post);
++static DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO, pod_get_modulation_model, pod_set_modulation_model);
++static DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO, pod_get_band_3_frequency, pod_set_band_3_frequency);
++static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUSR | S_IRUGO, pod_get_band_4_frequency__bass, pod_set_band_4_frequency__bass);
++static DEVICE_ATTR(mod_param_1_double_precision, S_IWUSR | S_IRUGO, pod_get_mod_param_1_double_precision, pod_set_mod_param_1_double_precision);
++static DEVICE_ATTR(delay_param_1_double_precision, S_IWUSR | S_IRUGO, pod_get_delay_param_1_double_precision, pod_set_delay_param_1_double_precision);
++static DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable, pod_set_eq_enable);
++static DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap);
++static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO, pod_get_volume_tweak_pedal_assign, pod_set_volume_tweak_pedal_assign);
++static DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO, pod_get_band_5_frequency, pod_set_band_5_frequency);
++static DEVICE_ATTR(tuner, S_IWUSR | S_IRUGO, pod_get_tuner, pod_set_tuner);
++static DEVICE_ATTR(mic_selection, S_IWUSR | S_IRUGO, pod_get_mic_selection, pod_set_mic_selection);
++static DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model, pod_set_cabinet_model);
++static DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model, pod_set_stomp_model);
++static DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel, pod_set_roomlevel);
++static DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO, pod_get_band_4_frequency, pod_set_band_4_frequency);
++static DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO, pod_get_band_6_frequency, pod_set_band_6_frequency);
++static DEVICE_ATTR(stomp_param_1_note_value, S_IWUSR | S_IRUGO, pod_get_stomp_param_1_note_value, pod_set_stomp_param_1_note_value);
++static DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2, pod_set_stomp_param_2);
++static DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3, pod_set_stomp_param_3);
++static DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4, pod_set_stomp_param_4);
++static DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5, pod_set_stomp_param_5);
++static DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6, pod_set_stomp_param_6);
++static DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO, pod_get_amp_switch_select, pod_set_amp_switch_select);
++static DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4, pod_set_delay_param_4);
++static DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5, pod_set_delay_param_5);
++static DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post, pod_set_delay_pre_post);
++static DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model, pod_set_delay_model);
++static DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO, pod_get_delay_verb_model, pod_set_delay_verb_model);
++static DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb, pod_set_tempo_msb);
++static DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb, pod_set_tempo_lsb);
++static DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model, pod_set_wah_model);
++static DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume, pod_set_bypass_volume);
++static DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off, pod_set_fx_loop_on_off);
++static DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO, pod_get_tweak_param_select, pod_set_tweak_param_select);
++static DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage, pod_set_amp1_engage);
++static DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain, pod_set_band_1_gain);
++static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain__bass, pod_set_band_2_gain__bass);
++static DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain, pod_set_band_2_gain);
++static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain__bass, pod_set_band_3_gain__bass);
++static DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain, pod_set_band_3_gain);
++static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain__bass, pod_set_band_4_gain__bass);
++static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUSR | S_IRUGO, pod_get_band_5_gain__bass, pod_set_band_5_gain__bass);
++static DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain, pod_set_band_4_gain);
++static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUSR | S_IRUGO, pod_get_band_6_gain__bass, pod_set_band_6_gain__bass);
+ static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write);
+ static DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable, line6_nop_write);
+ static DEVICE_ATTR(pickup1_type, S_IRUGO, variax_get_pickup1_type, line6_nop_write);
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -349,8 +349,8 @@ static ssize_t midi_set_midi_mask_receiv
+       return count;
+ }
+-static DEVICE_ATTR(midi_mask_transmit, S_IWUGO | S_IRUGO, midi_get_midi_mask_transmit, midi_set_midi_mask_transmit);
+-static DEVICE_ATTR(midi_mask_receive, S_IWUGO | S_IRUGO, midi_get_midi_mask_receive, midi_set_midi_mask_receive);
++static DEVICE_ATTR(midi_mask_transmit, S_IWUSR | S_IRUGO, midi_get_midi_mask_transmit, midi_set_midi_mask_transmit);
++static DEVICE_ATTR(midi_mask_receive, S_IWUSR | S_IRUGO, midi_get_midi_mask_receive, midi_set_midi_mask_receive);
+ /* MIDI device destructor */
+ static int snd_line6_midi_free(struct snd_device *device)
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -912,33 +912,33 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1, 1);
+ #undef GET_SYSTEM_PARAM
+ /* POD special files: */
+-static DEVICE_ATTR(channel, S_IWUGO | S_IRUGO, pod_get_channel, pod_set_channel);
++static DEVICE_ATTR(channel, S_IWUSR | S_IRUGO, pod_get_channel, pod_set_channel);
+ static DEVICE_ATTR(clip, S_IRUGO, pod_wait_for_clip, line6_nop_write);
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+ static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write);
+-static DEVICE_ATTR(dump, S_IWUGO | S_IRUGO, pod_get_dump, pod_set_dump);
+-static DEVICE_ATTR(dump_buf, S_IWUGO | S_IRUGO, pod_get_dump_buf, pod_set_dump_buf);
+-static DEVICE_ATTR(finish, S_IWUGO, line6_nop_read, pod_set_finish);
++static DEVICE_ATTR(dump, S_IWUSR | S_IRUGO, pod_get_dump, pod_set_dump);
++static DEVICE_ATTR(dump_buf, S_IWUSR | S_IRUGO, pod_get_dump_buf, pod_set_dump_buf);
++static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish);
+ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, line6_nop_write);
+-static DEVICE_ATTR(midi_postprocess, S_IWUGO | S_IRUGO, pod_get_midi_postprocess, pod_set_midi_postprocess);
+-static DEVICE_ATTR(monitor_level, S_IWUGO | S_IRUGO, pod_get_monitor_level, pod_set_monitor_level);
++static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, pod_get_midi_postprocess, pod_set_midi_postprocess);
++static DEVICE_ATTR(monitor_level, S_IWUSR | S_IRUGO, pod_get_monitor_level, pod_set_monitor_level);
+ static DEVICE_ATTR(name, S_IRUGO, pod_get_name, line6_nop_write);
+ static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write);
+-static DEVICE_ATTR(retrieve_amp_setup, S_IWUGO, line6_nop_read, pod_set_retrieve_amp_setup);
+-static DEVICE_ATTR(retrieve_channel, S_IWUGO, line6_nop_read, pod_set_retrieve_channel);
+-static DEVICE_ATTR(retrieve_effects_setup, S_IWUGO, line6_nop_read, pod_set_retrieve_effects_setup);
+-static DEVICE_ATTR(routing, S_IWUGO | S_IRUGO, pod_get_routing, pod_set_routing);
++static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read, pod_set_retrieve_amp_setup);
++static DEVICE_ATTR(retrieve_channel, S_IWUSR, line6_nop_read, pod_set_retrieve_channel);
++static DEVICE_ATTR(retrieve_effects_setup, S_IWUSR, line6_nop_read, pod_set_retrieve_effects_setup);
++static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing, pod_set_routing);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, line6_nop_write);
+-static DEVICE_ATTR(store_amp_setup, S_IWUGO, line6_nop_read, pod_set_store_amp_setup);
+-static DEVICE_ATTR(store_channel, S_IWUGO, line6_nop_read, pod_set_store_channel);
+-static DEVICE_ATTR(store_effects_setup, S_IWUGO, line6_nop_read, pod_set_store_effects_setup);
+-static DEVICE_ATTR(tuner_freq, S_IWUGO | S_IRUGO, pod_get_tuner_freq, pod_set_tuner_freq);
+-static DEVICE_ATTR(tuner_mute, S_IWUGO | S_IRUGO, pod_get_tuner_mute, pod_set_tuner_mute);
++static DEVICE_ATTR(store_amp_setup, S_IWUSR, line6_nop_read, pod_set_store_amp_setup);
++static DEVICE_ATTR(store_channel, S_IWUSR, line6_nop_read, pod_set_store_channel);
++static DEVICE_ATTR(store_effects_setup, S_IWUSR, line6_nop_read, pod_set_store_effects_setup);
++static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq, pod_set_tuner_freq);
++static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute, pod_set_tuner_mute);
+ static DEVICE_ATTR(tuner_note, S_IRUGO, pod_get_tuner_note, line6_nop_write);
+ static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write);
+ #if CREATE_RAW_FILE
+-static DEVICE_ATTR(raw, S_IWUGO, line6_nop_read, line6_set_raw);
++static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw);
+ #endif
+ /*
+--- a/drivers/staging/line6/toneport.c
++++ b/drivers/staging/line6/toneport.c
+@@ -117,8 +117,8 @@ static ssize_t toneport_set_led_green(st
+       return count;
+ }
+-static DEVICE_ATTR(led_red, S_IWUGO | S_IRUGO, line6_nop_read, toneport_set_led_red);
+-static DEVICE_ATTR(led_green, S_IWUGO | S_IRUGO, line6_nop_read, toneport_set_led_green);
++static DEVICE_ATTR(led_red, S_IWUSR | S_IRUGO, line6_nop_read, toneport_set_led_red);
++static DEVICE_ATTR(led_green, S_IWUSR | S_IRUGO, line6_nop_read, toneport_set_led_green);
+ static int toneport_send_cmd(struct usb_device *usbdev, int cmd1, int cmd2)
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -366,17 +366,17 @@ static ssize_t variax_set_raw2(struct de
+ #endif
+ /* Variax workbench special files: */
+-static DEVICE_ATTR(model, S_IWUGO | S_IRUGO, variax_get_model, variax_set_model);
+-static DEVICE_ATTR(volume, S_IWUGO | S_IRUGO, variax_get_volume, variax_set_volume);
+-static DEVICE_ATTR(tone, S_IWUGO | S_IRUGO, variax_get_tone, variax_set_tone);
++static DEVICE_ATTR(model, S_IWUSR | S_IRUGO, variax_get_model, variax_set_model);
++static DEVICE_ATTR(volume, S_IWUSR | S_IRUGO, variax_get_volume, variax_set_volume);
++static DEVICE_ATTR(tone, S_IWUSR | S_IRUGO, variax_get_tone, variax_set_tone);
+ static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write);
+ static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write);
+ static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write);
+-static DEVICE_ATTR(active, S_IWUGO | S_IRUGO, variax_get_active, variax_set_active);
++static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active, variax_set_active);
+ #if CREATE_RAW_FILE
+-static DEVICE_ATTR(raw, S_IWUGO, line6_nop_read, line6_set_raw);
+-static DEVICE_ATTR(raw2, S_IWUGO, line6_nop_read, variax_set_raw2);
++static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw);
++static DEVICE_ATTR(raw2, S_IWUSR, line6_nop_read, variax_set_raw2);
+ #endif