Apply aae86e8adb
				
					
				
			This commit is contained in:
		@@ -302,7 +302,6 @@ static const char fsg_string_interface[] = "Mass Storage";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define FSG_NO_INTR_EP 1
 | 
					#define FSG_NO_INTR_EP 1
 | 
				
			||||||
#define FSG_BUFFHD_STATIC_BUFFER 1
 | 
					 | 
				
			||||||
#define FSG_NO_DEVICE_STRINGS    1
 | 
					#define FSG_NO_DEVICE_STRINGS    1
 | 
				
			||||||
#define FSG_NO_OTG               1
 | 
					#define FSG_NO_OTG               1
 | 
				
			||||||
#define FSG_NO_INTR_EP           1
 | 
					#define FSG_NO_INTR_EP           1
 | 
				
			||||||
@@ -2795,13 +2794,19 @@ static struct fsg_common *fsg_common_init(struct fsg_common *common,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Data buffers cyclic list */
 | 
						/* Data buffers cyclic list */
 | 
				
			||||||
	/* Buffers in buffhds are static -- no need for additional
 | 
					 | 
				
			||||||
	 * allocation. */
 | 
					 | 
				
			||||||
	bh = common->buffhds;
 | 
						bh = common->buffhds;
 | 
				
			||||||
	i = FSG_NUM_BUFFERS - 1;
 | 
						i = FSG_NUM_BUFFERS;
 | 
				
			||||||
 | 
						goto buffhds_first_it;
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		bh->next = bh + 1;
 | 
							bh->next = bh + 1;
 | 
				
			||||||
	} while (++bh, --i);
 | 
							++bh;
 | 
				
			||||||
 | 
					buffhds_first_it:
 | 
				
			||||||
 | 
							bh->buf = kmalloc(FSG_BUFLEN, GFP_KERNEL);
 | 
				
			||||||
 | 
							if (unlikely(!bh->buf)) {
 | 
				
			||||||
 | 
								rc = -ENOMEM;
 | 
				
			||||||
 | 
								goto error_release;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} while (--i);
 | 
				
			||||||
	bh->next = common->buffhds;
 | 
						bh->next = common->buffhds;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2909,6 +2914,7 @@ static void fsg_common_release(struct kref *ref)
 | 
				
			|||||||
		container_of(ref, struct fsg_common, ref);
 | 
							container_of(ref, struct fsg_common, ref);
 | 
				
			||||||
	unsigned i = common->nluns;
 | 
						unsigned i = common->nluns;
 | 
				
			||||||
	struct fsg_lun *lun = common->luns;
 | 
						struct fsg_lun *lun = common->luns;
 | 
				
			||||||
 | 
						struct fsg_buffhd *bh;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* If the thread isn't already dead, tell it to exit now */
 | 
						/* If the thread isn't already dead, tell it to exit now */
 | 
				
			||||||
	if (common->state != FSG_STATE_TERMINATED) {
 | 
						if (common->state != FSG_STATE_TERMINATED) {
 | 
				
			||||||
@@ -2930,6 +2936,13 @@ static void fsg_common_release(struct kref *ref)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kfree(common->luns);
 | 
						kfree(common->luns);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						i = FSG_NUM_BUFFERS;
 | 
				
			||||||
 | 
						bh = common->buffhds;
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
 | 
							kfree(bh->buf);
 | 
				
			||||||
 | 
						} while (++bh, --i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (common->free_storage_on_release)
 | 
						if (common->free_storage_on_release)
 | 
				
			||||||
		kfree(common);
 | 
							kfree(common);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user