Hello:
Can we modify it like this
First:
modify "return (n_free_chunks > 0) ? 1 : 0;"
Second:
In the function "yaffs_file_write"
yaffs_gross_lock(dev);
n_free_chunks = yaffs_get_n_free_chunks(dev);
yaffs_gross_unlock(dev);
if (n_free_chunks > 20 )
n_written = yaffs_wr_file(obj, buf, ipos, n, 0);
else
n_written = yaffs_wr_file(obj, buf, ipos, n, 1);
So we can get through write_end() .The data will not be just
in the cache when multiple processes simultaneously write.
What do you think ?
Thanks you
Regards
chenjie
On 2015/8/4 6:50, Charles Manning wrote:
> I don't think that will work.
>
> Consider the case when multiple processes simultaneously write to the
> file system. If they all get past write_begin(), but have not yet got
> through write_end() then yaffs has committed to storing the data even
> if there is no space available.
>
> I do however see your point. An overwrite might be refused even though
> it really does not use any space.
>
> I will see if there are any page buffer flags we can use to determine
> if the page has already been written.
>
> That would allow us to do something like:
>
> if (page has previously been written)
> return OK; /* it is an overwrite so it does not consume space */
> else
> return n_free_chunks > commit_count; /* Is there space to take more data */
>
>
> On Mon, Aug 3, 2015 at 9:57 PM, chenjie <chenjie6@huawei.com> wrote:
>>
>>
>> Hello
>> I think this is no need, just "return (n_free_chunks > 0) ? 1 : 0;" is OK.
>>
>> if not , we can not overwrite a file with an existent file
>> when the chunk was less than 20.
>>
>> What do you think ?
>>
>>
>> Thanks you
>>
>> Regards
>>
>> chenjie
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On 2015/7/31 6:13, Charles Manning wrote:
>>> The purpose of yaffs_hold_space() is to support the write_begin VFS method.
>>>
>>> write_begin asks the file system to commit enough space to do the actual write in write_end.
>>>
>>> Strictly speaking this should really be handled with counter of committed space that is incremented on every write_begin and decremented on every write_end.
>>>
>>> However, it is workable to just not expect there to be more than n writes in progress at a time. n=20 seems rather conservative.
>>>
>>> -- Charles
>>>
>>>
>>> On Thu, Jul 30, 2015 at 3:04 PM, chenjie <chenjie6@huawei.com <mailto:chenjie6@huawei.com>> wrote:
>>>
>>>
>>> Hi:
>>> why the yaffs_hold_space reserved 20 chunk?
>>> return (n_free_chunks > 20) ? 1 : 0;
>>>
>>>
>>>
>>>
>>
>>
>
>