fs/inode: using orig_row to ensure correct free logic
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
This commit is contained in:
parent
6542806248
commit
2a8c023357
|
@ -90,18 +90,17 @@ static int files_extend(FAR struct filelist *list, size_t row)
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
if (row <= list->fl_rows)
|
orig_rows = list->fl_rows;
|
||||||
|
if (row <= orig_rows)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (files_countlist(list) > OPEN_MAX)
|
if (CONFIG_NFILE_DESCRIPTORS_PER_BLOCK * orig_rows > OPEN_MAX)
|
||||||
{
|
{
|
||||||
return -EMFILE;
|
return -EMFILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
orig_rows = list->fl_rows;
|
|
||||||
|
|
||||||
files = kmm_malloc(sizeof(FAR struct file *) * row);
|
files = kmm_malloc(sizeof(FAR struct file *) * row);
|
||||||
DEBUGASSERT(files);
|
DEBUGASSERT(files);
|
||||||
if (files == NULL)
|
if (files == NULL)
|
||||||
|
@ -109,14 +108,14 @@ static int files_extend(FAR struct filelist *list, size_t row)
|
||||||
return -ENFILE;
|
return -ENFILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = list->fl_rows;
|
i = orig_rows;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
files[i] = kmm_zalloc(sizeof(struct file) *
|
files[i] = kmm_zalloc(sizeof(struct file) *
|
||||||
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK);
|
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK);
|
||||||
if (files[i] == NULL)
|
if (files[i] == NULL)
|
||||||
{
|
{
|
||||||
while (--i >= list->fl_rows)
|
while (--i >= orig_rows)
|
||||||
{
|
{
|
||||||
kmm_free(files[i]);
|
kmm_free(files[i]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue