Re: Lifetime of descriptors in f_fs

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

 



On Sat, Sep 15, 2012 at 01:56:32AM +0200, Michal Nazarewicz wrote:
> static int __ffs_data_got_descs(struct ffs_data *ffs,
> 				char *const _data, size_t len)
> {
>
> 
> 	ffs->raw_fs_descs_length = fs_len;
> 	ffs->raw_descs_length    = fs_len + ret;
> 	ffs->raw_descs           = _data;
> 
> Saved for later.
> 
> 	ffs->fs_descs_count      = fs_count;
> 	ffs->hs_descs_count      = hs_count;
> 
> 	return 0;
> 
> einval:
> 	ret = -EINVAL;
> error:
> 	kfree(_data);
> 
> Freed on error path.
> 
> 	return ret;
> }
Okay so it is not symetrical.

> static int __ffs_data_got_strings(struct ffs_data *ffs,
> 				  char *const _data, size_t len)
> {
>
> 
> 	/*
> 	 * If we don't need any strings just return and free all
> 	 * memory.
> 	 */
> 	if (!needed_count) {
> 		kfree(_data);
> 
> Freed on quick exit.
> 
> 		return 0;
> 	}
> 
>
> 
> 	/* Done! */
> 	ffs->stringtabs = stringtabs;
> 	ffs->raw_strings = _data;
> 
> Saved for later.
> 
> 	return 0;
> 
> error_free:
> 	kfree(stringtabs);
> error:
> 	kfree(_data);
> 
> Freed on error path.
> 
> 	return -EINVAL;
> }

same here.

> And later:
> 
> static void ffs_data_clear(struct ffs_data *ffs)
> {
> 	ENTER();
> 
> 	if (test_and_clear_bit(FFS_FL_CALL_CLOSED_CALLBACK, &ffs->flags))
> 		functionfs_closed_callback(ffs);
> 
> 	BUG_ON(ffs->gadget);
> 
> 	if (ffs->epfiles)
> 		ffs_epfiles_destroy(ffs->epfiles, ffs->eps_count);
> 
> 	kfree(ffs->raw_descs);
> 
> Free descs saved for later.
> 
> 	kfree(ffs->raw_strings);
> 
> Free strings saved for later.
> 
> 	kfree(ffs->stringtabs);
> }

Okay. Thanks for the update.

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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux