On Jan 23, 2014, at 10:17 PM, Andreas Rohner wrote:

> 
>> Do you free allocated memory in the case of error? 
> 
> Yes I immediately free it before I check the return value. Could you
> please read the code a bit more carefully, before you ask such questions?

+       freeblocks = (nilfs_get_blocks_per_segment(nilfs) * n)
+                               - (nilfs_vector_get_size(vdescv)
+                               + nilfs_vector_get_size(bdescv));
+
+       /* if there are less free blocks than the
+        * minimal threshold try to update suinfo
+        * instead of cleaning */
+       if (freeblocks < minblocks * n) {
+               ret = gettimeofday(&tv, NULL);
+               if (ret < 0)
+                       goto out_lock;
+
+               supv = malloc(sizeof(struct nilfs_suinfo_update) * n);
                             ^^^^^^ memory allocation
+               if (supv == NULL) {
+                       ret = -1;
+                       goto out_lock;
+               }
+
+               for (i = 0; i < n; ++i) {
+                       supv[i].sup_segnum = segnums[i];
+                       supv[i].sup_flags = 0;
+                       nilfs_suinfo_update_set_lastmod(&supv[i]);
+                       supv[i].sup_sui.sui_lastmod = tv.tv_sec;
+               }
+
+               ret = nilfs_set_suinfo(nilfs, supv, n);
+               free(supv);
                ^^^^ memory freeing
+               if (ret >= 0) {
+                       /* success, tell caller
+                        * to try another segment/s */
+                       ret = -EGCTRYAGAIN;
+                       goto out_lock;
+               }
+       }
+

Ok. But I can suggest to free memory in the place of error processing
(goto out_lock) and at the end of function for success. Otherwise, it
looks like hiding free() call. And it is very easy to forget about memory
freeing. It is good practice, I suppose, to group memory freeing operations.

Thanks,
Vyacheslav Dubeyko.

--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to