Re: [PATCH 2/2] CIFS: Simplify invalidate part (try #2)

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

 



On Fri, Apr 22, 2011 at 10:07 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> On Fri, 22 Apr 2011 09:54:10 -0500
> Steve French <smfrench@xxxxxxxxx> wrote:
>
>> On Fri, Apr 22, 2011 at 9:10 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
>> > On Fri, 22 Apr 2011 09:02:18 -0500
>> > Steve French <smfrench@xxxxxxxxx> wrote:
>> >
>> >> On Fri, Apr 22, 2011 at 6:50 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
>> >> > On Fri, 22 Apr 2011 12:09:20 +0400
>> >> > Pavel Shilovsky <piastry@xxxxxxxxxxx> wrote:
>> >> >
>> >> >> After conversation with Steve, we decided to drop
>> >> >> filemap_write_and_wait from getattr, because we already do it in
>> >> >> cifs_file_aio_write. I also think that we should drop it from
>> >> >> cifs_llseek in this case too. I will repost this patch later (launder
>> >> >> page operation patch was merged earlier).
>> >> >>
>> >> >
>> >> > I wasn't privy to this discussion, but that makes no sense to me. Just
>> >> > because we initiated writeout in cifs_file_aio_write, does not mean
>> >> > that it's complete. If it's not complete then the size returned by the
>> >> > server may be bogus.
>> >>
>> >> What would a local file system do in the case when a write is
>> >> racing with a getattr?  In the case of cifs, when we issue
>> >> a write, and don't have oplock, we immediately send the
>> >> write on the network - but AFAIK posix provides no guarantees
>> >> about ordering if they are issued at the same time.
>> >>
>> >
>> > It's not a problem for a local filesystem as there's only one set of
>> > metadata to deal with. Even if the writes aren't synced out to disk,
>> > you still know how big the file is.
>> >
>> > With a client/server setup like cifs or nfs, you have to deal with two,
>> > and when there are buffered writes then there will be discrepancies.
>> > The simplest way to deal with discrepancies there is to make sure
>> > that there aren't any by flushing out any buffered writes before
>> > fetching the attributes.
>>
>> it may sound simpler but doesn't prevent a write racing in just
>> before we send the QueryFileInfo on the wire, and it does
>> hurt performance to redundantly invoke filemap_fdatawrite.
>>
>
> IIUC, POSIX says that the st_size must reflect the results of all
> writes done up to the point that the stat() call was issued. If some
> race in after the fact, then that's generally ok, but we don't want a
> situation where someone issues a ton of writes and then the stat() call
> doesn't reflect the result of them.

aio_write doesn't return until filemap_fdatawrite completes and it
calls cifs_writepages which is synchronous - so the st_size
on the server will be uptodate if the write has completed.

-- 
Thanks,

Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux