[dvblast-devel] error: couldn't read from DVR device (Value too large for defined data type)
Georgi Chorbadzhiyski
gf at unixsol.org
Thu Jul 4 10:13:50 CEST 2013
Around 07/04/2013 10:58 AM, Honza Petrouš scribbled:
> But I don't see any other reason for such errno.
> I understand that it is not easy to track on production system,
> but I still think it must be some bottleneck in consumer
> processing.
>
> BTW, one hint - can you check for values in p_iov->iov_len?
> Google found some issues when iov_len was > MAX_INT32
> on filesystems not supporting LARGE_FILES (64bit operations).
Looks like iov_len is set to 188 /line 241/. For me the strangest thing
is that it happens on only one transponder /the machine tunes to 14/ and
it started happening a week ago, no problems with others at all.
228 /*****************************************************************************
229 * DVRRead
230 *****************************************************************************/
231 static block_t *DVRRead( void )
232 {
233 int i, i_len;
234 block_t *p_ts = p_freelist, **pp_current = &p_ts;
235 struct iovec p_iov[MAX_READ_ONCE];
236
237 for ( i = 0; i < MAX_READ_ONCE; i++ )
238 {
239 if ( (*pp_current) == NULL ) *pp_current = block_New();
240 p_iov[i].iov_base = (*pp_current)->p_ts;
241 p_iov[i].iov_len = TS_SIZE;
242 pp_current = &(*pp_current)->p_next;
243 }
244
245 if ( (i_len = readv(i_dvr, p_iov, MAX_READ_ONCE)) < 0 )
246 {
247 msg_Err( NULL, "couldn't read from DVR device (%s)",
248 strerror(errno) );
249 i_len = 0;
250 }
251 i_len /= TS_SIZE;
252
253 pp_current = &p_ts;
254 while ( i_len && *pp_current )
255 {
256 pp_current = &(*pp_current)->p_next;
257 i_len--;
258 }
259
260 p_freelist = *pp_current;
261 *pp_current = NULL;
262
263 return p_ts;
264 }
--
Georgi Chorbadzhiyski
http://georgi.unixsol.org/
http://github.com/gfto/
More information about the dvblast-devel
mailing list