RE: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-09 Thread David Laight
From: loody
...
 but what it really do is read sector, not media_change or test_unit_ready.

Maybe one of the programs that reads the mbr partition table can
be persuaded to do a direct read?

David



Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-09 Thread loody
hi all:
I try 2 methods today but there is no read command firing from usb
host to device
(I double check the existence of command by CATC protocol analyzer)
appreciate all your kind suggestion.

1. use busybox like below command
dd if=/dev/sda1 of=/dev/null bs=512 count=1 conv=sync
my dd in busybox doesn't have iflags option
# ./busybox.new dd help

BusyBox v1.19.2 (2014-07-09 13:43:36 CST) multi-call binary.
Usage: dd [if=FILE] [of=FILE] [ibs=N] [obs=N] [bs=N] [count=N] [skip=N]
[seek=N] [conv=notrunc|noerror|sync|fsync]
Copy a file with converting and formatting
if=FILE Read from FILE instead of stdin
of=FILE Write to FILE instead of stdout
bs=NRead and write N bytes at a time
ibs=N   Read N bytes at a time
obs=N   Write N bytes at a time
count=N Copy only N input blocks
skip=N  Skip N input blocks
seek=N  Skip N output blocks
conv=notruncDon't truncate output file
conv=noerrorContinue after read errors
conv=sync   Pad blocks with zeros
conv=fsync  Physically write data out before finishing

2. write c source file and open with O_DIRECT flag.
#include stdio.h
#include stdlib.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h

char message[] = /mnt/usb/4854344154343452/test.txt;
int main()
{
   int fd;
   char buffer[5];
   int count = 0;
   char *buf=1234567890;
   if((fd=open(message,O_CREAT|O_TRUNC|O_RDWR|O_DIRECT, 0777))0)
   {
   perror(open);
   return -1;
   }
   printf(fd=%d\n, fd);
   write(fd, buf, strlen(buf));
   while(1){
   lseek(fd,0,SEEK_SET);
   sleep(3);
   count = read(fd, buffer, 3);
   printf(count=%d,%x,%x,%x\n, count,buffer[0],buffer[1],buffer[2]);
   }

}

2014-07-09 16:37 GMT+08:00 David Laight david.lai...@aculab.com:
 From: loody
 ...
 but what it really do is read sector, not media_change or test_unit_ready.

 Maybe one of the programs that reads the mbr partition table can
 be persuaded to do a direct read?

 David




-- 
Regards,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-09 Thread loody
hi Bryn:

2014-07-08 0:25 GMT+08:00 Bryn M. Reeves b...@redhat.com:
 On Tue, Jul 08, 2014 at 12:15:54AM +0800, loody wrote:
 so sg_read will not hammer on the page cache like dd without iflags=direct

 thanks for your kind help,

 The sg_read program (and other programs in sg3_utils) sends a command directly
 to the device using an SG_IO ioctl. This bypasses all the caching layers in
 the kernel and always results in IO to the device (if it succeeds).

I download sg utility but I found if I need to use sg_read only, I
need to install sg_lig on my target system.
is there any simple source I can reference for just doing the scsi
read through IOCTL as you explained to us before?

appreciate your kind help,


-- 
Regards,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-09 Thread Alan Stern
On Wed, 9 Jul 2014, loody wrote:

 on that usb hard disk, no matter media_change or TEST_UNIT_READY, keep
 polling the device every 3mins.
 the disconnection still happen.
 
 So I am wondering, I can use the existence wheel, such as echo 4 
 /sys/block/sda/events_poll_
 msecs.
 but what it really do is read sector, not media_change or test_unit_ready.

No, you cannot change the event polling code.  Doing so would mess up 
other drives.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-09 Thread Alan Stern
On Wed, 9 Jul 2014, loody wrote:

 hi all:
 I try 2 methods today but there is no read command firing from usb
 host to device
 (I double check the existence of command by CATC protocol analyzer)
 appreciate all your kind suggestion.
 
 1. use busybox like below command
 dd if=/dev/sda1 of=/dev/null bs=512 count=1 conv=sync
 my dd in busybox doesn't have iflags option
 # ./busybox.new dd help
 
 BusyBox v1.19.2 (2014-07-09 13:43:36 CST) multi-call binary.
 Usage: dd [if=FILE] [of=FILE] [ibs=N] [obs=N] [bs=N] [count=N] [skip=N]
 [seek=N] [conv=notrunc|noerror|sync|fsync]
 Copy a file with converting and formatting
 if=FILE Read from FILE instead of stdin
 of=FILE Write to FILE instead of stdout
 bs=NRead and write N bytes at a time
 ibs=N   Read N bytes at a time
 obs=N   Write N bytes at a time
 count=N Copy only N input blocks
 skip=N  Skip N input blocks
 seek=N  Skip N output blocks
 conv=notruncDon't truncate output file
 conv=noerrorContinue after read errors
 conv=sync   Pad blocks with zeros
 conv=fsync  Physically write data out before finishing
 
 2. write c source file and open with O_DIRECT flag.
 #include stdio.h
 #include stdlib.h
 #include sys/types.h
 #include sys/stat.h
 #include fcntl.h
 
 char message[] = /mnt/usb/4854344154343452/test.txt;
 int main()
 {
int fd;
char buffer[5];
int count = 0;
char *buf=1234567890;
if((fd=open(message,O_CREAT|O_TRUNC|O_RDWR|O_DIRECT, 0777))0)
{
perror(open);
return -1;
}
printf(fd=%d\n, fd);
write(fd, buf, strlen(buf));
while(1){
lseek(fd,0,SEEK_SET);
sleep(3);
count = read(fd, buffer, 3);
printf(count=%d,%x,%x,%x\n, count,buffer[0],buffer[1],buffer[2]);
}
 
 }

You can do what you want by using the SCSI Generic API.  See the Linux 
SCSI Generic (sg) HOWTO:

http://tldp.org/HOWTO/SCSI-Generic-HOWTO/

With the proper ioctl call, you can send a READ(10) command telling the 
drive to read one block starting from block 0.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-08 Thread loody
hi Alan:

2014-07-08 1:02 GMT+08:00 Alan Stern st...@rowland.harvard.edu:
 On Tue, 8 Jul 2014, loody wrote:

  An alternative is to write a positive value, such as 24, to
 
  /sys/block/sdX/events_poll_msecs
 
  where X is replaced with the proper drive letter.  (24 ms = 240 s =
  4 m.)  I'm not sure this will work, but it's worth a try.

 I cannot find events_poll_msecs you mentioned in my system.
 Is this capability related to kernel version?
 ( my kernel version is 2.6.38.8 )

 Well, the in-kernel disk events mechanism was added in 2.6.38, but it
 may not have been implemented for your type of drive.
You are correct.
i can see events_poll_msecs when I change my kernel to 3.8.0
But the device still disconnect.
I have some question.
1. when I cat  /sys/block/sdX/events, I get the answer as media_change.
is there any events type we can choose, such as read capability or inquiry.

 Probably you don't actually need to do a read.  Simply opening the
 device file ought to be sufficient.
2. the open device you mean is like open(/dev/sda1)?

thanks for all your kind help,



-- 
Regards,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-08 Thread Alan Stern
On Tue, 8 Jul 2014, loody wrote:

 You are correct.
 i can see events_poll_msecs when I change my kernel to 3.8.0
 But the device still disconnect.
 I have some question.
 1. when I cat  /sys/block/sdX/events, I get the answer as media_change.
 is there any events type we can choose, such as read capability or 
 inquiry.

The only other event type is eject_request.  But that applies to CD
drives, not disk drives.

  Probably you don't actually need to do a read.  Simply opening the
  device file ought to be sufficient.
 2. the open device you mean is like open(/dev/sda1)?

Yes.  That will send a SCSI TEST UNIT READY command, the same as disk
events polling.  You can use usbmon to verify this.

However, maybe TEST UNIT READY won't work.  Your drive might need to 
see a READ or WRITE command.  If that's the case then neither 
events_poll_msecs nor a simple open() will help.

Have you tried using hdparm with the -B or -S flag?

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-08 Thread loody
hi Alan:

2014-07-09 0:00 GMT+08:00 Alan Stern st...@rowland.harvard.edu:
 On Tue, 8 Jul 2014, loody wrote:

 You are correct.
 i can see events_poll_msecs when I change my kernel to 3.8.0
 But the device still disconnect.
 I have some question.
 1. when I cat  /sys/block/sdX/events, I get the answer as media_change.
 is there any events type we can choose, such as read capability or 
 inquiry.

 The only other event type is eject_request.  But that applies to CD
 drives, not disk drives.

  Probably you don't actually need to do a read.  Simply opening the
  device file ought to be sufficient.
 2. the open device you mean is like open(/dev/sda1)?

 Yes.  That will send a SCSI TEST UNIT READY command, the same as disk
 events polling.  You can use usbmon to verify this.

 However, maybe TEST UNIT READY won't work.  Your drive might need to
 see a READ or WRITE command.  If that's the case then neither
 events_poll_msecs nor a simple open() will help.

 Have you tried using hdparm with the -B or -S flag?

there is one thing pop in my mind.
if events_poll_msecs is used for media_change, shouldn't we wrap is READ10?
the difference seems
1. change SCSI command
2. allocate 512 Byte for 1 sector dummy read
the periodically trigging flow should be the same.

if you think above is possible, where we should start from?
appreciate your help


-- 
Regards,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-08 Thread Alan Stern
On Wed, 9 Jul 2014, loody wrote:

 there is one thing pop in my mind.
 if events_poll_msecs is used for media_change, shouldn't we wrap is READ10?

No.  Why should media change polling use READ(10)?  TEST UNIT READY 
does a good job of detecting media changes.

 the difference seems
 1. change SCSI command
 2. allocate 512 Byte for 1 sector dummy read
 the periodically trigging flow should be the same.
 
 if you think above is possible, where we should start from?

Why do you want to make this change?

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-08 Thread loody
hi Alan:

2014-07-09 3:26 GMT+08:00 Alan Stern st...@rowland.harvard.edu:
 On Wed, 9 Jul 2014, loody wrote:

 there is one thing pop in my mind.
 if events_poll_msecs is used for media_change, shouldn't we wrap is READ10?

 No.  Why should media change polling use READ(10)?  TEST UNIT READY
 does a good job of detecting media changes.

 the difference seems
 1. change SCSI command
 2. allocate 512 Byte for 1 sector dummy read
 the periodically trigging flow should be the same.

 if you think above is possible, where we should start from?

 Why do you want to make this change?
on that usb hard disk, no matter media_change or TEST_UNIT_READY, keep
polling the device every 3mins.
the disconnection still happen.

So I am wondering, I can use the existence wheel, such as echo 4 
/sys/block/sda/events_poll_
msecs.
but what it really do is read sector, not media_change or test_unit_ready.

thanks for your kind help
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread Bryn M. Reeves
On Sun, Jul 06, 2014 at 01:18:03AM +0800, loody wrote:
 hi all:
 we met a USB Hard Disk that will go to suspend if host stop
 sending scsi command over 5mins.
 To save the IO, kernel will keep the file in page cache as much as
 he can and under this circumstances, the scsi command may disappear
 for a while longer enough to cause the device suspend.
 
 is there any kernel config or module parameter can do the dummy
 read or scsi command periodically?

No but you could set up a simple cron job to call an sg3_utils command.

E.g. issue an sg_read for one sector to the device every 4m:

  */4 * * * * sg_read count=1 if=/dev/disk

You'll probably want to disable mail notification for the job or have
it dropped or it'll get a bit noisy running that frequently.

Regards,
Bryn.

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread loody
hi Bryn:

2014-07-07 17:20 GMT+08:00 Bryn M. Reeves b...@redhat.com:
 On Sun, Jul 06, 2014 at 01:18:03AM +0800, loody wrote:
 hi all:
 we met a USB Hard Disk that will go to suspend if host stop
 sending scsi command over 5mins.
 To save the IO, kernel will keep the file in page cache as much as
 he can and under this circumstances, the scsi command may disappear
 for a while longer enough to cause the device suspend.

 is there any kernel config or module parameter can do the dummy
 read or scsi command periodically?

 No but you could set up a simple cron job to call an sg3_utils command.

 E.g. issue an sg_read for one sector to the device every 4m:

   */4 * * * * sg_read count=1 if=/dev/disk
Since my target platform arm embedded system,
does that mean I should include sg_read in my Busybox
or
cross-compile sg_read from sg3_utils?

appreciate your kind help,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread Lars Melin

On 2014-07-07 21:37, loody wrote:

hi Bryn:

2014-07-07 17:20 GMT+08:00 Bryn M. Reeves b...@redhat.com:

On Sun, Jul 06, 2014 at 01:18:03AM +0800, loody wrote:

hi all:
 we met a USB Hard Disk that will go to suspend if host stop
sending scsi command over 5mins.
 To save the IO, kernel will keep the file in page cache as much as
he can and under this circumstances, the scsi command may disappear
for a while longer enough to cause the device suspend.

 is there any kernel config or module parameter can do the dummy
read or scsi command periodically?

No but you could set up a simple cron job to call an sg3_utils command.

E.g. issue an sg_read for one sector to the device every 4m:

   */4 * * * * sg_read count=1 if=/dev/disk

Since my target platform arm embedded system,
does that mean I should include sg_read in my Busybox
or
cross-compile sg_read from sg3_utils?

appreciate your kind help,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

sgread is not included in BusyBox but you should have touch.
Create a dummy file on the disk and let cron touch it every 4 minutes.
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread David Laight
From: Lars Melin
...
 sgread is not included in BusyBox but you should have touch.
 Create a dummy file on the disk and let cron touch it every 4 minutes.

You don't need 'touch' a shell redirect eg : file will do open(..., 
O_CREAT|O_TRUNC).
However that still might not force an actual disc access.

In any case you really only want to do a read, doing a write will kill the NAND 
memory.

David

N�r��yb�X��ǧv�^�)޺{.n�+{��^n�r���z���h����G���h�(�階�ݢj���m��z�ޖ���f���h���~�m�

Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread loody
hi David:

2014-07-07 23:06 GMT+08:00 David Laight david.lai...@aculab.com:
 From: Lars Melin
 ...
 sgread is not included in BusyBox but you should have touch.
 Create a dummy file on the disk and let cron touch it every 4 minutes.

 You don't need 'touch' a shell redirect eg : file will do open(..., 
 O_CREAT|O_TRUNC).
 However that still might not force an actual disc access.

 In any case you really only want to do a read, doing a write will kill the 
 NAND memory.

actually I have searched the scsi/usb layer for possible dummy read,
even read sector 0 is fine, but in vain.

I found the read
a. determined by VFS - block layer,
b. Block layer put it in queue
c. call scsi pre-queue function to usb layer.

That mean if I try to read sector from usb devices, I have to create a
queue and follow above b) and c) rule.
is there any already kernel API I can use?

sincerely appreciate all yours help,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread Lars Melin

On 2014-07-07 22:39, loody wrote:

hi David:

2014-07-07 23:06 GMT+08:00 David Laight david.lai...@aculab.com:

From: Lars Melin
...

sgread is not included in BusyBox but you should have touch.
Create a dummy file on the disk and let cron touch it every 4 minutes.

You don't need 'touch' a shell redirect eg : file will do open(..., 
O_CREAT|O_TRUNC).
However that still might not force an actual disc access.

In any case you really only want to do a read, doing a write will kill the NAND 
memory.

actually I have searched the scsi/usb layer for possible dummy read,
even read sector 0 is fine, but in vain.

I found the read
a. determined by VFS - block layer,
b. Block layer put it in queue
c. call scsi pre-queue function to usb layer.

That mean if I try to read sector from usb devices, I have to create a
queue and follow above b) and c) rule.
is there any already kernel API I can use?

sincerely appreciate all yours help,

dd if=/dev/sda of=/dev/null count=1
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread Bryn M. Reeves
On Mon, Jul 07, 2014 at 11:39:05PM +0800, loody wrote:
 hi David:
 
 2014-07-07 23:06 GMT+08:00 David Laight david.lai...@aculab.com:
  From: Lars Melin
  ...
  sgread is not included in BusyBox but you should have touch.
  Create a dummy file on the disk and let cron touch it every 4 minutes.
 
  You don't need 'touch' a shell redirect eg : file will do open(..., 
  O_CREAT|O_TRUNC).
  However that still might not force an actual disc access.
 
  In any case you really only want to do a read, doing a write will kill the 
  NAND memory.
 
 actually I have searched the scsi/usb layer for possible dummy read,
 even read sector 0 is fine, but in vain.
 
 I found the read
 a. determined by VFS - block layer,
 b. Block layer put it in queue
 c. call scsi pre-queue function to usb layer.
 
 That mean if I try to read sector from usb devices, I have to create a
 queue and follow above b) and c) rule.
 is there any already kernel API I can use?
 
 sincerely appreciate all yours help,

If you don't want to put sg_read into your image you could just use a dd;
busybox includes an implementation that should be good enough.

Just make sure you use the right flags to use O_DIRECT access or you'll
just end up hammering on the page cache. Iirc that's iflags=direct (check
the busybox docs to make sure it's the same).

Regards,
Bryn.

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread Alan Stern
On Mon, 7 Jul 2014, loody wrote:

 hi Bryn:
 
 2014-07-07 17:20 GMT+08:00 Bryn M. Reeves b...@redhat.com:
  On Sun, Jul 06, 2014 at 01:18:03AM +0800, loody wrote:
  hi all:
  we met a USB Hard Disk that will go to suspend if host stop
  sending scsi command over 5mins.
  To save the IO, kernel will keep the file in page cache as much as
  he can and under this circumstances, the scsi command may disappear
  for a while longer enough to cause the device suspend.
 
  is there any kernel config or module parameter can do the dummy
  read or scsi command periodically?
 
  No but you could set up a simple cron job to call an sg3_utils command.
 
  E.g. issue an sg_read for one sector to the device every 4m:
 
*/4 * * * * sg_read count=1 if=/dev/disk
 Since my target platform arm embedded system,
 does that mean I should include sg_read in my Busybox
 or
 cross-compile sg_read from sg3_utils?

An alternative is to write a positive value, such as 24, to 

/sys/block/sdX/events_poll_msecs

where X is replaced with the proper drive letter.  (24 ms = 240 s = 
4 m.)  I'm not sure this will work, but it's worth a try.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread loody
hi Alan:

  E.g. issue an sg_read for one sector to the device every 4m:
 
*/4 * * * * sg_read count=1 if=/dev/disk
 Since my target platform arm embedded system,
 does that mean I should include sg_read in my Busybox
 or
 cross-compile sg_read from sg3_utils?

 An alternative is to write a positive value, such as 24, to

 /sys/block/sdX/events_poll_msecs

 where X is replaced with the proper drive letter.  (24 ms = 240 s =
 4 m.)  I'm not sure this will work, but it's worth a try.

I cannot find events_poll_msecs you mentioned in my system.
Is this capability related to kernel version?
( my kernel version is 2.6.38.8 )

Sincerely appreciate all yours kind help,

PS:
below is result of /sys/block/sdb/
/sys/block/sdb# ls -lht
total 0
-r--r--r-- 1 root root 4.0K 2014-07-08 00:08 alignment_offset
lrwxrwxrwx 1 root root0 2014-07-08 00:08 bdi -
../../../../../../../../../../virtual/bdi/8:16
-r--r--r-- 1 root root 4.0K 2014-07-08 00:08 capability
-r--r--r-- 1 root root 4.0K 2014-07-08 00:08 dev
lrwxrwxrwx 1 root root0 2014-07-08 00:08 device - ../../../3:0:0:0
-r--r--r-- 1 root root 4.0K 2014-07-08 00:08 discard_alignment
-r--r--r-- 1 root root 4.0K 2014-07-08 00:08 ext_range
-r--r--r-- 1 root root 4.0K 2014-07-08 00:08 inflight
drwxr-xr-x 2 root root0 2014-07-08 00:08 power
-r--r--r-- 1 root root 4.0K 2014-07-08 00:08 stat
drwxr-xr-x 2 root root0 2014-07-08 00:08 trace
drwxr-xr-x 2 root root0 2014-07-08 00:05 holders
drwxr-xr-x 3 root root0 2014-07-08 00:05 queue
-r--r--r-- 1 root root 4.0K 2014-07-08 00:05 range
-r--r--r-- 1 root root 4.0K 2014-07-08 00:05 ro
drwxr-xr-x 5 root root0 2014-07-08 00:05 sdb1
-r--r--r-- 1 root root 4.0K 2014-07-08 00:05 size
drwxr-xr-x 2 root root0 2014-07-08 00:05 slaves
-r--r--r-- 1 root root 4.0K 2014-07-08 00:05 removable
lrwxrwxrwx 1 root root0 2014-07-08 00:05 subsystem -
../../../../../../../../../../../class/block
-rw-r--r-- 1 root root 4.0K 2014-07-08 00:05 uevent
/sys/block/sdb#
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread loody
hi Bryn:


2014-07-07 23:52 GMT+08:00 Bryn M. Reeves b...@redhat.com:
 On Mon, Jul 07, 2014 at 11:39:05PM +0800, loody wrote:
 hi David:

 2014-07-07 23:06 GMT+08:00 David Laight david.lai...@aculab.com:
  From: Lars Melin
  ...
  sgread is not included in BusyBox but you should have touch.
  Create a dummy file on the disk and let cron touch it every 4 minutes.
 
  You don't need 'touch' a shell redirect eg : file will do open(..., 
  O_CREAT|O_TRUNC).
  However that still might not force an actual disc access.
 
  In any case you really only want to do a read, doing a write will kill the 
  NAND memory.

 actually I have searched the scsi/usb layer for possible dummy read,
 even read sector 0 is fine, but in vain.

 I found the read
 a. determined by VFS - block layer,
 b. Block layer put it in queue
 c. call scsi pre-queue function to usb layer.

 That mean if I try to read sector from usb devices, I have to create a
 queue and follow above b) and c) rule.
 is there any already kernel API I can use?

 sincerely appreciate all yours help,

 If you don't want to put sg_read into your image you could just use a dd;
 busybox includes an implementation that should be good enough.

 Just make sure you use the right flags to use O_DIRECT access or you'll
 just end up hammering on the page cache. Iirc that's iflags=direct (check
 the busybox docs to make sure it's the same).

so sg_read will not hammer on the page cache like dd without iflags=direct

thanks for your kind help,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread Bryn M. Reeves
On Tue, Jul 08, 2014 at 12:15:54AM +0800, loody wrote:
 so sg_read will not hammer on the page cache like dd without iflags=direct
 
 thanks for your kind help,

The sg_read program (and other programs in sg3_utils) sends a command directly
to the device using an SG_IO ioctl. This bypasses all the caching layers in
the kernel and always results in IO to the device (if it succeeds).

Regards,
Bryn.

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-07 Thread Alan Stern
On Tue, 8 Jul 2014, loody wrote:

  An alternative is to write a positive value, such as 24, to
 
  /sys/block/sdX/events_poll_msecs
 
  where X is replaced with the proper drive letter.  (24 ms = 240 s =
  4 m.)  I'm not sure this will work, but it's worth a try.
 
 I cannot find events_poll_msecs you mentioned in my system.
 Is this capability related to kernel version?
 ( my kernel version is 2.6.38.8 )

Well, the in-kernel disk events mechanism was added in 2.6.38, but it 
may not have been implemented for your type of drive.

Probably you don't actually need to do a read.  Simply opening the 
device file ought to be sufficient.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


dummy scsi read or scsi command periodically for external USB Hard Disk

2014-07-05 Thread loody
hi all:
we met a USB Hard Disk that will go to suspend if host stop
sending scsi command over 5mins.
To save the IO, kernel will keep the file in page cache as much as
he can and under this circumstances, the scsi command may disappear
for a while longer enough to cause the device suspend.

is there any kernel config or module parameter can do the dummy
read or scsi command periodically?

appreciate your help in advance,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html