usage of usb sticks on the laptops

2007-06-28 Thread Tomeu Vizoso
Hi all,

we've recently added support for usb sticks in the datastore and the
journal activity and I'm a bit worried about the kids pulling out the
stick before the data has been fully written into the stick.

Perhaps we'll need to do the same as is done everywhere and notify when
a device that needs to be safely unmounted is mounted, and complain to
the user when the stick is removed unsafely.

But I wanted to ask first to more knowledgeable people if there's any
way to reduce this problem, for example by mounting the sticks with the
mount option 'sync'. Perhaps in some cases (small drives) we can
exchange the perf hit for a bit more of safety.

Thanks,

Tomeu

___
Devel mailing list
Devel@lists.laptop.org
http://lists.laptop.org/listinfo/devel


Re: usage of usb sticks on the laptops

2007-06-28 Thread Ivan Krstić

On Jun 28, 2007, at 5:30 AM, Tomeu Vizoso wrote:
 Perhaps we'll need to do the same as is done everywhere and notify  
 when
 a device that needs to be safely unmounted is mounted, and  
 complain to
 the user when the stick is removed unsafely.

Normally, complaining is all you can do because the OS provides  
unmediated access to the underlying FS on the USB stick. But hey,  
we're not doing that; we're talking to the datastore on the device  
first. So you have an elegant way of avoiding this whole problem.

When you're about to write a file to the USB device, here's what you do:

1. Start transaction in USB stick datastore.
2. Add a row to the pending_writes table in USB stick datatore  
specifying file name, size, and path of file to be written.
3. End transaction.
4. Copy file to USB stick.
5. Sync.
6. Begin transaction in USB stick datastore.
7. Remove row from pending_writes table.
8. Add row to normal file table.
9. End transaction.

Now, every time when mounting an USB stick, for every row in the  
pending_writes table of the stick's datastore:

1. Does file size on stick match size in pending_writes table? If so,  
go to step 6 above. If not, proceed with next step.
2. Unlink file from stick.
3. Begin transaction in stick datastore.
4. Remove row from pending_writes table.
5. End transaction.

That's it. I had this implemented and working perfectly in Yellow,  
and I was using MD5 instead of file size as the validity check. It  
didn't slow things down because having to even check it is a corner  
case already.

Cheers,

--
Ivan Krstić [EMAIL PROTECTED] | GPG: 0x147C722D

___
Devel mailing list
Devel@lists.laptop.org
http://lists.laptop.org/listinfo/devel