Date: Wed, 16 Jun 2010 17:52:46 -0500 From: "Dustin J. Mitchell" <dustin@zmanda.com> To: freebsd-scsi@freebsd.org Cc: Jean-Louis Martineau <martineau@zmanda.com> Subject: sa: write returns 0 = LEOM? Message-ID: <AANLkTikULvhu5TRVDNAY59UvKII-BuBYBvDe83jQFLXR@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
I'm investigating a user bug report in Amanda: http://forums.zmanda.com/showthread.php?t=2832 The problem boils down to a write(2) call for a SCSI tape device (/dev/nsa0) returning 0 after quite a bit of data and a number of filemarks have been written. Jean-Louis suspected that this was an early warning EOM indication, and that a subsequent write() would succeed, with Amanda having been duly warned that a physical EOM is coming up. But looking at scsi_sa.c, this doesn't seem to be the case. It looks like an early warning would result in a successful write instead, because resid is set to zero. cam/scsi/scsi_sa.c: 2418 /* 2419 * Handle filemark, end of tape, mismatched record sizes.... 2420 * From this point out, we're only handling read/write cases. 2421 * Handle writes && reads differently. 2422 */ 2423 2424 if (csio->cdb_io.cdb_bytes[0] == SA_WRITE) { 2425 if (sense_key == SSD_KEY_VOLUME_OVERFLOW) { 2426 csio->resid = resid; 2427 error = ENOSPC; 2428 } else if (sense->flags & SSD_EOM) { 2429 softc->flags |= SA_FLAG_EOM_PENDING; 2430 /* 2431 * Grotesque as it seems, the few times 2432 * I've actually seen a non-zero resid, 2433 * the tape drive actually lied and had 2434 * written all the data!. 2435 */ 2436 csio->resid = 0; 2437 } That said, I don't know my way around the kernel source, so I'm probably missing something obvious. So: 1. What could cause a write syscall to return 0? 2. Since we will be using early warning in the next version of Amanda, hints as to the best way to handle early warning from userspace would be appreciated. Thanks for any pointers! Dustin -- Open Source Storage Engineer http://www.zmanda.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTikULvhu5TRVDNAY59UvKII-BuBYBvDe83jQFLXR>