Re: [PATCH 06/21] usb/gadget: f_mass_storage: add a level of indirection for luns storage

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

 



On Tue, 16 Jul 2013, Andrzej Pietrasiewicz wrote:

> This is needed to prepare for configfs integration.
> 
> So far the luns have been allocated during gadget's initialization, based
> on the nluns module parameter's value; the exact number is known when the
> gadget is initialized and that number of luns is allocated in one go; they
> all will be used.
> 
> When configfs is in place, the luns will be created one-by-one by the user.
> Once the user is satisfied with the number of luns, they activate the
> gadget. The number of luns must be <= FSG_MAX_LUN (currently 8), but other
> than that it is not known up front and the user need not use contiguous
> numbering (apart from the default lun #0). On the other hand, the function
> code uses lun numbers to identify them and the number needs to be used
> as an index into an array.
> 
> Given the above, an array needs to be allocated, but it might happen that
> 7 out of its 8 elements will not be used. On my machine
> sizeof(struct fsg_lun) == 462, so > 3k of memory is allocated but not used
> in the worst case.
> 
> By adding another level of indirection (allocating an array of pointers
> to struct fsg_lun and then allocating individual luns instead of an array
> of struct fsg_luns) at most 7 pointers are wasted, which is much less.
> 
> This patch also changes some for/while loops to cope with the fact
> that in the luns array some entries are potentially empty.

> @@ -621,7 +621,7 @@ static int sleep_thread(struct fsg_common *common)
>  
>  static int do_read(struct fsg_common *common)
>  {
> -	struct fsg_lun		*curlun = common->curlun;
> +	struct fsg_lun		**curlun = common->curlun;

It would be much easier here and in other functions to instead do:

+	struct fsg_lun		*curlun = *common->curlun;

Then you wouldn't need to replace "curlun" with "*curlun" all over the
place.

Alternatively (I haven't checked in detail to see if this would work), 
keep common->curlun itself as a "struct fsg_lun *" instead of making it 
"struct fsg_lun **".

Alan Stern

--
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