Re: [PATCH v4 24/28] Getattr doesn't require data sync semantics

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

 



> On Jul 27, 2016, at 07:55, Benjamin Coddington <bcodding@xxxxxxxxxx> wrote:
> 
> After adding more debugging, I see that all of that is working correctly,
> but the first LAYOUTCOMMIT is taking the size back down to 4096 from the
> last nfs_writeback_done(), and the second LAYOUTCOMMIT never brings it back
> up again.
> 

Excellent! Thanks for debugging that.

> Now I see that we should be marking the block extents as written atomically with
> setting LAYOUTCOMMIT and nfsi->layout->plh_lwb, otherwise a LAYOUTCOMMIT can
> collect extents just added from the next bl_write_cleanup().  Then, the next
> LAYOUTCOMMIT fails, and all we're left with is the size from the first
> LAYOUTCOMMIT.  Not sure if that particular problem is the whole fix, but
> that's something to work on.
> 
> I see ways to fix that:
> 
>    - make a new pnfs_set_layoutcommit_locked() that can be used to call
>      ext_tree_mark_written() inside the i_lock
> 
>    - make another pnfs_layoutdriver_type operation to be used within
>      pnfs_set_layoutcommit (mark_layoutcommit? set_layoutcommit?), and call
>      ext_tree_mark_written() within that..
> 
>    - have .prepare_layoutcommit return a new positive plh_lwb that would
>      extend the current LAYOUTCOMMIT
> 
>    - make ext_tree_prepare_commit only encode up to plh_lwb

I see no reason why ext_tree_prepare_commit() shouldn’t be allowed to extend the args->lastbytewritten. This is a metadata operation that is owned by the pNFS layout driver.
The only thing I’d note is you should then rewrite the failure case in pnfs_layoutcommit_inode() so that it doesn’t rely on the saved “end_pos”, but uses args->lastbytewritten instead (with a comment to the effect why)…

Cheers
  Trond��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux