diff mbox series

[20/20] block, blksnap: adds a blksnap to the kernel tree

Message ID 1655135593-1900-21-git-send-email-sergei.shtepa@veeam.com (mailing list archive)
State New, archived
Headers show
Series blksnap - creating non-persistent snapshots for backup | expand

Commit Message

Sergei Shtepa June 13, 2022, 3:53 p.m. UTC
Signed-off-by: Sergei Shtepa <sergei.shtepa@veeam.com>
---
 drivers/block/Kconfig  | 2 ++
 drivers/block/Makefile | 1 +
 2 files changed, 3 insertions(+)

Comments

kernel test robot June 18, 2022, 2:11 a.m. UTC | #1
Hi Sergei,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on axboe-block/for-next]
[also build test WARNING on v5.19-rc2 next-20220617]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Sergei-Shtepa/blksnap-creating-non-persistent-snapshots-for-backup/20220614-025950
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
config: parisc-allmodconfig (https://download.01.org/0day-ci/archive/20220618/202206181039.UczT9AgC-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 11.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/1cdaf9c498b3c016f311f65998256e2129623f70
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Sergei-Shtepa/blksnap-creating-non-persistent-snapshots-for-backup/20220614-025950
        git checkout 1cdaf9c498b3c016f311f65998256e2129623f70
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=parisc SHELL=/bin/bash drivers/ fs/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/block/blksnap/diff_buffer.c:10:6: warning: no previous prototype for 'diff_buffer_free' [-Wmissing-prototypes]
      10 | void diff_buffer_free(struct diff_buffer *diff_buffer)
         |      ^~~~~~~~~~~~~~~~
>> drivers/block/blksnap/diff_buffer.c:34:21: warning: no previous prototype for 'diff_buffer_new' [-Wmissing-prototypes]
      34 | struct diff_buffer *diff_buffer_new(size_t page_count, size_t buffer_size,
         |                     ^~~~~~~~~~~~~~~
--
>> drivers/block/blksnap/diff_storage.c:134:22: warning: no previous prototype for 'diff_storage_bdev_by_id' [-Wmissing-prototypes]
     134 | struct block_device *diff_storage_bdev_by_id(struct diff_storage *diff_storage,
         |                      ^~~~~~~~~~~~~~~~~~~~~~~
--
>> drivers/block/blksnap/tracker.c:44:6: warning: no previous prototype for 'tracker_free' [-Wmissing-prototypes]
      44 | void tracker_free(struct tracker *tracker)
         |      ^~~~~~~~~~~~


vim +/diff_buffer_free +10 drivers/block/blksnap/diff_buffer.c

9377564e255bc9 Sergei Shtepa 2022-06-13   9  
9377564e255bc9 Sergei Shtepa 2022-06-13 @10  void diff_buffer_free(struct diff_buffer *diff_buffer)
9377564e255bc9 Sergei Shtepa 2022-06-13  11  {
9377564e255bc9 Sergei Shtepa 2022-06-13  12  	size_t inx = 0;
9377564e255bc9 Sergei Shtepa 2022-06-13  13  	struct page *page;
9377564e255bc9 Sergei Shtepa 2022-06-13  14  
9377564e255bc9 Sergei Shtepa 2022-06-13  15  	if (unlikely(!diff_buffer))
9377564e255bc9 Sergei Shtepa 2022-06-13  16  		return;
9377564e255bc9 Sergei Shtepa 2022-06-13  17  
9377564e255bc9 Sergei Shtepa 2022-06-13  18  	for (inx = 0; inx < diff_buffer->page_count; inx++) {
9377564e255bc9 Sergei Shtepa 2022-06-13  19  		page = diff_buffer->pages[inx];
9377564e255bc9 Sergei Shtepa 2022-06-13  20  		if (page) {
9377564e255bc9 Sergei Shtepa 2022-06-13  21  			__free_page(page);
9377564e255bc9 Sergei Shtepa 2022-06-13  22  #ifdef CONFIG_BLK_SNAP_DEBUG_MEMORY_LEAK
9377564e255bc9 Sergei Shtepa 2022-06-13  23  			memory_object_dec(memory_object_page);
9377564e255bc9 Sergei Shtepa 2022-06-13  24  #endif
9377564e255bc9 Sergei Shtepa 2022-06-13  25  		}
9377564e255bc9 Sergei Shtepa 2022-06-13  26  	}
9377564e255bc9 Sergei Shtepa 2022-06-13  27  
9377564e255bc9 Sergei Shtepa 2022-06-13  28  	kfree(diff_buffer);
9377564e255bc9 Sergei Shtepa 2022-06-13  29  #ifdef CONFIG_BLK_SNAP_DEBUG_MEMORY_LEAK
9377564e255bc9 Sergei Shtepa 2022-06-13  30  	memory_object_dec(memory_object_diff_buffer);
9377564e255bc9 Sergei Shtepa 2022-06-13  31  #endif
9377564e255bc9 Sergei Shtepa 2022-06-13  32  }
9377564e255bc9 Sergei Shtepa 2022-06-13  33  
9377564e255bc9 Sergei Shtepa 2022-06-13 @34  struct diff_buffer *diff_buffer_new(size_t page_count, size_t buffer_size,
9377564e255bc9 Sergei Shtepa 2022-06-13  35  				    gfp_t gfp_mask)
9377564e255bc9 Sergei Shtepa 2022-06-13  36  {
9377564e255bc9 Sergei Shtepa 2022-06-13  37  	struct diff_buffer *diff_buffer;
9377564e255bc9 Sergei Shtepa 2022-06-13  38  	size_t inx = 0;
9377564e255bc9 Sergei Shtepa 2022-06-13  39  	struct page *page;
9377564e255bc9 Sergei Shtepa 2022-06-13  40  
9377564e255bc9 Sergei Shtepa 2022-06-13  41  	if (unlikely(page_count <= 0))
9377564e255bc9 Sergei Shtepa 2022-06-13  42  		return NULL;
9377564e255bc9 Sergei Shtepa 2022-06-13  43  
9377564e255bc9 Sergei Shtepa 2022-06-13  44  	/*
9377564e255bc9 Sergei Shtepa 2022-06-13  45  	 * In case of overflow, it is better to get a null pointer
9377564e255bc9 Sergei Shtepa 2022-06-13  46  	 * than a pointer to some memory area. Therefore + 1.
9377564e255bc9 Sergei Shtepa 2022-06-13  47  	 */
9377564e255bc9 Sergei Shtepa 2022-06-13  48  	diff_buffer = kzalloc(sizeof(struct diff_buffer) +
9377564e255bc9 Sergei Shtepa 2022-06-13  49  				      (page_count + 1) * sizeof(struct page *),
9377564e255bc9 Sergei Shtepa 2022-06-13  50  			      gfp_mask);
9377564e255bc9 Sergei Shtepa 2022-06-13  51  	if (!diff_buffer)
9377564e255bc9 Sergei Shtepa 2022-06-13  52  		return NULL;
9377564e255bc9 Sergei Shtepa 2022-06-13  53  #ifdef CONFIG_BLK_SNAP_DEBUG_MEMORY_LEAK
9377564e255bc9 Sergei Shtepa 2022-06-13  54  	memory_object_inc(memory_object_diff_buffer);
9377564e255bc9 Sergei Shtepa 2022-06-13  55  #endif
9377564e255bc9 Sergei Shtepa 2022-06-13  56  	INIT_LIST_HEAD(&diff_buffer->link);
9377564e255bc9 Sergei Shtepa 2022-06-13  57  	diff_buffer->size = buffer_size;
9377564e255bc9 Sergei Shtepa 2022-06-13  58  	diff_buffer->page_count = page_count;
9377564e255bc9 Sergei Shtepa 2022-06-13  59  
9377564e255bc9 Sergei Shtepa 2022-06-13  60  	for (inx = 0; inx < page_count; inx++) {
9377564e255bc9 Sergei Shtepa 2022-06-13  61  		page = alloc_page(gfp_mask);
9377564e255bc9 Sergei Shtepa 2022-06-13  62  		if (!page)
9377564e255bc9 Sergei Shtepa 2022-06-13  63  			goto fail;
9377564e255bc9 Sergei Shtepa 2022-06-13  64  #ifdef CONFIG_BLK_SNAP_DEBUG_MEMORY_LEAK
9377564e255bc9 Sergei Shtepa 2022-06-13  65  		memory_object_inc(memory_object_page);
9377564e255bc9 Sergei Shtepa 2022-06-13  66  #endif
9377564e255bc9 Sergei Shtepa 2022-06-13  67  		diff_buffer->pages[inx] = page;
9377564e255bc9 Sergei Shtepa 2022-06-13  68  	}
9377564e255bc9 Sergei Shtepa 2022-06-13  69  	return diff_buffer;
9377564e255bc9 Sergei Shtepa 2022-06-13  70  fail:
9377564e255bc9 Sergei Shtepa 2022-06-13  71  	diff_buffer_free(diff_buffer);
9377564e255bc9 Sergei Shtepa 2022-06-13  72  	return NULL;
9377564e255bc9 Sergei Shtepa 2022-06-13  73  }
9377564e255bc9 Sergei Shtepa 2022-06-13  74
diff mbox series

Patch

diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index fdb81f2794cd..e8e12bed6cc4 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -410,4 +410,6 @@  config BLK_DEV_RBD
 
 source "drivers/block/rnbd/Kconfig"
 
+source "drivers/block/blksnap/Kconfig"
+
 endif # BLK_DEV
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index 934a9c7c3a7c..0d95279bbe92 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -38,5 +38,6 @@  obj-$(CONFIG_ZRAM) += zram/
 obj-$(CONFIG_BLK_DEV_RNBD)	+= rnbd/
 
 obj-$(CONFIG_BLK_DEV_NULL_BLK)	+= null_blk/
+obj-$(CONFIG_BLK_SNAP)	+= blksnap/
 
 swim_mod-y	:= swim.o swim_asm.o