Re: sync action not working/ignored

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

 



On Sun, 23 Sep 2012 00:27:34 +0200 Alexander Kühn
<alexander.kuehn@xxxxxxxxxx> wrote:

> Hi,
> for some reason linux appears to be ignoring my sync_action requests:
> root@nas:~# uname -a
> Linux nas 3.5.4 #1 SMP Sat Sep 15 15:41:21 CEST 2012 x86_64 GNU/Linux
> root@nas:~# echo /sys/block/md*/md/sync_action
> /sys/block/md1/md/sync_action
> root@nas:~# cat /proc/mdstat
> Personalities : [raid6] [raid5] [raid4]
> md1 : active (auto-read-only) raid5 sdb[5] sdg[9] sdd[7] sdf[6] sde[8]  
> sdc[2] sda[1]
>        11719408128 blocks super 1.2 level 5, 64k chunk, algorithm 2  
> [7/7] [UUUUUUU]
>        bitmap: 0/15 pages [0KB], 65536KB chunk
> 
> unused devices: <none>
> root@nas:~# echo check >/sys/block/md1/md/sync_action
> root@nas:~# cat /proc/mdstat
> Personalities : [raid6] [raid5] [raid4]
> md1 : active (auto-read-only) raid5 sdb[5] sdg[9] sdd[7] sdf[6] sde[8]  
> sdc[2] sda[1]
>        11719408128 blocks super 1.2 level 5, 64k chunk, algorithm 2  
> [7/7] [UUUUUUU]
>        bitmap: 0/15 pages [0KB], 65536KB chunk
> 
> unused devices: <none>
> root@nas:~# echo repair >/sys/block/md1/md/sync_action
> root@nas:~# cat /proc/mdstat
> Personalities : [raid6] [raid5] [raid4]
> md1 : active (auto-read-only) raid5 sdb[5] sdg[9] sdd[7] sdf[6] sde[8]  
> sdc[2] sda[1]
>        11719408128 blocks super 1.2 level 5, 64k chunk, algorithm 2  
> [7/7] [UUUUUUU]
>        bitmap: 0/15 pages [0KB], 65536KB chunk
> 
> unused devices: <none>
> root@nas:~# mdadm -Q --detail /dev/md1
> /dev/md1:
>          Version : 1.2
>    Creation Time : Thu Sep  9 20:43:43 2010
>       Raid Level : raid5
>       Array Size : 11719408128 (11176.50 GiB 12000.67 GB)
>    Used Dev Size : 1953234688 (1862.75 GiB 2000.11 GB)
>     Raid Devices : 7
>    Total Devices : 7
>      Persistence : Superblock is persistent
> 
>    Intent Bitmap : Internal
> 
>      Update Time : Sat Sep 22 23:28:50 2012
>            State : active
>   Active Devices : 7
> Working Devices : 7
>   Failed Devices : 0
>    Spare Devices : 0
> 
>           Layout : left-symmetric
>       Chunk Size : 64K
> 
>             Name : nas:1  (local to host nas)
>             UUID : 5dbc572f:0e6b18bd:125db183:3511c054
>           Events : 109708
> 
>      Number   Major   Minor   RaidDevice State
>         5       8       16        0      active sync   /dev/sdb
>         1       8        0        1      active sync   /dev/sda
>         2       8       32        2      active sync   /dev/sdc
>         8       8       64        3      active sync   /dev/sde
>         6       8       80        4      active sync   /dev/sdf
>         7       8       48        5      active sync   /dev/sdd
>         9       8       96        6      active sync   /dev/sdg
> 
> Nothing in dmesg/syslog.
> No idea what's going on. :(

Thanks for the report.

I've queued up a patch which will cause changes to sync_action to clear the
read-auto status.

NeilBrown

From f1b6162a19c8217acd7762de03eeb80cea6d399b Mon Sep 17 00:00:00 2001
From: NeilBrown <neilb@xxxxxxx>
Date: Wed, 26 Sep 2012 11:46:00 +1000
Subject: [PATCH] md: writing to sync_action should clear the read-auto state.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

In some cases array are started in 'read-auto' state where in
nothing gets written to any device until the array is written
to.  The purpose of this is to make accidental auto-assembly
of the wrong arrays less of a risk, and to allow arrays to be
started to read suspend-to-disk images without actually changing
anything (as might happen if the array were dirty and a
resync seemed necessary).

Explicitly writing the 'sync_action' for a read-auto array currently
doesn't clear the read-auto state, so the sync action doesn't
happen, which can be confusing.

So allow any successful write to sync_action to clear any read-auto
state.

Reported-by: Alexander Kühn <alexander.kuehn@xxxxxxxxxx>
Signed-off-by: NeilBrown <neilb@xxxxxxx>

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 373b3eb..e868f0c 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -4296,6 +4296,13 @@ action_store(struct mddev *mddev, const char *page, size_t len)
 		set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
 		set_bit(MD_RECOVERY_SYNC, &mddev->recovery);
 	}
+	if (mddev->ro == 2) {
+		/* A write to sync_action is enough to justify
+		 * canceling read-auto mode
+		 */
+		mddev->ro = 0;
+		md_wakeup_thread(mddev->sync_thread);
+	}
 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
 	md_wakeup_thread(mddev->thread);
 	sysfs_notify_dirent_safe(mddev->sysfs_action);



Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux