Hi Valdis, On Wed, Jan 4, 2017 at 12:58 AM, <Valdis.Kletnieks@xxxxxx> wrote: > On Thu, 29 Dec 2016 12:35:52 +0530, Pranay Srivastava said: >> Hello, >> >> I'm trying to understand the write_begin, write_end and writepages / >> writepage call >> sequence by having a small file system coded myself. >> >> I'm not using block_write_begin / block_write_end also not using >> mpage_writepages >> as well. >> >> The issue however is that apart from write_begin and write_end, writepages never >> gets called. > > writepages name implies that it's the API for writing multiple blocks in one call. > Does your filesystem understand how to issue multi-block requests? Did you It's not about submitting batch request here. The issue I'm facing is that even after calling set_page_dirty [ with aops->set_page_dirty = __set_page_dirty_nobuffers] and doing __mark_inode_dirty(inode, I_DIRTY_PAGES | I_DIRTY) I was hoping that with an iput_final call, write_inode_now would be called which would trigger my writepage. But that doesn't happen. >From my understanding of iput_final, the writeout won't happen unless the file system is being unmounted[Correct?] [ A check of MS_ACTIVE]. But that would work only for the root inode,as when the file is closed [ say only 1 process has opened that file] so iput_final on that file's inode won't call write_inode_now since file system is mounted [Correct?] So now in order to trigger writepage, I have to make a call to write_inode_now with sync parameter as 0. So what I see now is 1. A write of say 1 MB is to be done. 2. generic_perform_write is called and it calls write_begin and write_end for each page. 3. My write_end has actually become synchronous write instead of a buffered one so each page actually is written out at write_end [ due to a call to write_inode_now in write_end] I was kind of hoping for somehow to batch these writes[ 1 page at a time] but on iput_final. Oh 1 more thing, in generic_write_iter, there's a call to fsync and this call never comes to my file system! I'm pretty sure I'm missing some dirty flags somewhere but it's not fallen in place currently. Thanks for your reply though. I really appreciate it. > *test* with userspace calls that *should* generate multi-block requests? A large write buffer > PAGE_SIZE ought to do it right? _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies