Change block_add_extd to return success or error
authorXiao Jia <stfairy@gmail.com>
Tue, 29 Sep 2015 21:58:35 +0000 (14:58 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Oct 2015 14:35:55 +0000 (10:35 -0400)
Signed-off-by: Xiao Jia <stfairy@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/ns.h
kern/src/ns/allocb.c

index 8794860..e6d3182 100644 (file)
@@ -625,7 +625,7 @@ void addprog(struct proc *);
 void addrootfile(char *unused_char_p_t, uint8_t * unused_uint8_p_t, uint32_t);
 struct block *adjustblock(struct block *, int);
 struct block *allocb(int);
-void block_add_extd(struct block *b, unsigned int nr_bufs, int mem_flags);
+int block_add_extd(struct block *b, unsigned int nr_bufs, int mem_flags);
 int anyhigher(void);
 int anyready(void);
 void _assert(char *unused_char_p_t);
index 7a2c0c7..02c0963 100644 (file)
@@ -79,8 +79,9 @@ struct block *allocb(int size)
  * extra_data array.  When growing, it'll copy over the old entries.  All new
  * entries will be zeroed.  mem_flags determines if we'll block on kmallocs.
  *
+ * Return 0 on success or -1 on error.
  * Caller is responsible for concurrent access to the block's metadata. */
-void block_add_extd(struct block *b, unsigned int nr_bufs, int mem_flags)
+int block_add_extd(struct block *b, unsigned int nr_bufs, int mem_flags)
 {
        unsigned int old_nr_bufs = b->nr_extra_bufs;
        size_t old_amt = sizeof(struct extra_bdata) * old_nr_bufs;
@@ -88,19 +89,20 @@ void block_add_extd(struct block *b, unsigned int nr_bufs, int mem_flags)
        void *new_bdata;
 
        if (old_nr_bufs >= nr_bufs)
-               return;
+               return 0;
        if (b->extra_data) {
                new_bdata = krealloc(b->extra_data, new_amt, mem_flags);
                if (!new_bdata)
-                       return;
+                       return -1;
                memset(new_bdata + old_amt, 0, new_amt - old_amt);
        } else {
                new_bdata = kzmalloc(new_amt, mem_flags);
                if (!new_bdata)
-                       return;
+                       return - 1;
        }
        b->extra_data = new_bdata;
        b->nr_extra_bufs = nr_bufs;
+       return 0;
 }
 
 /*