Re: fs compression

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



So I've just gotten this all working.  The last notable change I made was to
inode size: I added an i_compressed_size member and then did some macro
hackage to ensure that the fs implementation (eg. fs/ext4) sees the
compressed size while everything else sees the uncompressed size.

I'll be testing further tomorrow.

On Thu, May 28, 2015 at 01:55:15PM -0700, Tom Marshall wrote:
> On Wed, May 27, 2015 at 07:38:00PM -0400, Theodore Ts'o wrote:
> > On Wed, May 27, 2015 at 11:53:17AM -0700, Tom Marshall wrote:
> > > But one thing I'm wrestling with is how to be asynchronously notified when
> > > the lower readpage/readpages complete.  The two ideas that come to mind are
> > > (1) plumbing a callback into mpage_end_io(), (2) allowing override of
> > > mpage_end_io() with a custom function, (3) creating kernel threads analogous
> > > to kblockd to wait for pending pages.
> > 
> > Not all file systems use mpage_end_io(), so that's not a good
> > solution.
> > 
> > You can do something like
> > 
> > 	wait_on_page_bit(page, PG_uptodate);
> > 
> > ... although to be robust you will also need to wake up if PG_error is
> > set (if there is an I/O error, PG_error is set instead of
> > PG_uptodate).  So that means you'd have to spin your own wait function
> > using the waitqueue primitives and page_waitqueue(), using
> > __wait_on_bit() as an initial model.
> 
> My current thought is to use a workqueue and queue a work object for each
> cluster read that is in flight.  The work function does wait_on_page_locked
> for each lower page.  If/when all complete without error, the data is then
> decompressed and the upper pages are entered.  This is currently a work in
> progress, it's not yet functional.
> 
> So basically my questions here are:
> 
> (1) Does this seem sane?
> 
> (2) Is it ok to wait on !locked instead of waiting on (uptodate|error)?
> 
> (3) Do I need to mark a pending cluster pending to prevent simultaneous
>     reads of the same cluster (especially since the cluster size will be
>     much larger than the lower block size)?
> 
> Also note I've now realized that the logical conclusion to the wrapper inode
> idea is a stacked filesystem.  That's not the direction we are aiming for,
> so instead I'm adding a "struct xcomp_inode_info" to ext4_inode_info, which
> can then be passed back into the xcomp functions.
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux