[patch 0/7] Rework file::show_fdinfo method to use seq-files engine, v2

From: Cyrill Gorcunov
Date: Wed Nov 06 2013 - 06:49:12 EST


Hi, in criu we intensively use additional information provided by
/proc/<pid>/fdinfo/<fd> particular to the object opened file
represents. The output is printed out by calling the
file_operations::show_fdinfo method.

The implementation implies that data is getting printed in one
pass and returns error in case if seq buffer is overflowed, which
works fine while data fit one memory page. For epoll it's about
73 epoll targets can be printed, for notify system -- significantly
less depending on notify type and file handler. This limitation
didn't cause any problems in applications we're checkpointing
and restoring at moment, but might become a problem in future.

So to resolve the problem I considered two ways

1) Don't return error if seq-buffer overflowed thus, one
show() method is called the kernel will notice that buffer is
overflowed and double its size returning -EAGAIN. But I fear such
interface might be misused (say process creates epoll with a number
of target descriptors, then application opens a big number of fdinfo
reader causing kernel to allocate big seq-buffer for each reader).

2) Instead of printing fdinfo in one pass rather provide seq-operations
pointer in file_operations, and subsystems which need it simply hook
own seq-operations here. The main code in fs/proc/fd.c will call for
underlied seq-operation methods.

The second way looks more preferrable from my POV, here is the series.
Please take a look, thanks. Any comments are highly appreciated!
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/