From b7549061f900c9f79bd35559de7cd66645b80109 Mon Sep 17 00:00:00 2001 From: wangdi <wangdi> Date: Fri, 9 Jan 2004 16:19:28 +0000 Subject: [PATCH] add loop_device_get_info.patch in snapfs series --- .../patches/loop_device_get_info.patch | 57 +++++++++++++++++++ lustre/kernel_patches/series/snapfs-2.4.20 | 1 + 2 files changed, 58 insertions(+) create mode 100644 lustre/kernel_patches/patches/loop_device_get_info.patch diff --git a/lustre/kernel_patches/patches/loop_device_get_info.patch b/lustre/kernel_patches/patches/loop_device_get_info.patch new file mode 100644 index 0000000000..d45d64b402 --- /dev/null +++ b/lustre/kernel_patches/patches/loop_device_get_info.patch @@ -0,0 +1,57 @@ +Index: linux-2.4.20-8/drivers/block/loop.c +=================================================================== +--- linux-2.4.20-8.orig/drivers/block/loop.c 2002-11-29 07:53:12.000000000 +0800 ++++ linux-2.4.20-8/drivers/block/loop.c 2004-01-10 00:02:33.000000000 +0800 +@@ -843,6 +843,31 @@ + } + return copy_to_user(arg, &info, sizeof(info)) ? -EFAULT : 0; + } ++static int loop_get_info(struct loop_device *lo, struct loop_info *arg) ++{ ++ struct loop_info info; ++ struct file *file = lo->lo_backing_file; ++ ++ if (lo->lo_state != Lo_bound) ++ return -ENXIO; ++ if (!arg) ++ return -EINVAL; ++ memset(&info, 0, sizeof(info)); ++ info.lo_number = lo->lo_number; ++ info.lo_device = kdev_t_to_nr(file->f_dentry->d_inode->i_dev); ++ info.lo_inode = file->f_dentry->d_inode->i_ino; ++ info.lo_rdevice = kdev_t_to_nr(lo->lo_device); ++ info.lo_offset = lo->lo_offset; ++ info.lo_flags = lo->lo_flags; ++ strncpy(info.lo_name, lo->lo_name, LO_NAME_SIZE); ++ info.lo_encrypt_type = lo->lo_encrypt_type; ++ if (lo->lo_encrypt_key_size && capable(CAP_SYS_ADMIN)) { ++ info.lo_encrypt_key_size = lo->lo_encrypt_key_size; ++ memcpy(info.lo_encrypt_key, lo->lo_encrypt_key, ++ lo->lo_encrypt_key_size); ++ } ++ return memcpy(arg, &info, sizeof(info)) ? -EFAULT : 0; ++} + + static int lo_ioctl(struct inode * inode, struct file * file, + unsigned int cmd, unsigned long arg) +@@ -875,6 +900,9 @@ + case LOOP_GET_STATUS: + err = loop_get_status(lo, (struct loop_info *) arg); + break; ++ case LOOP_GET_INFO: ++ err = loop_get_info(lo, (struct loop_info *) arg); ++ break; + case BLKGETSIZE: + if (lo->lo_state != Lo_bound) { + err = -ENXIO; +Index: linux-2.4.20-8/include/linux/loop.h +=================================================================== +--- linux-2.4.20-8.orig/include/linux/loop.h 2001-09-18 04:16:30.000000000 +0800 ++++ linux-2.4.20-8/include/linux/loop.h 2004-01-09 23:50:17.000000000 +0800 +@@ -151,5 +151,6 @@ + #define LOOP_CLR_FD 0x4C01 + #define LOOP_SET_STATUS 0x4C02 + #define LOOP_GET_STATUS 0x4C03 ++#define LOOP_GET_INFO 0x4C04 + + #endif diff --git a/lustre/kernel_patches/series/snapfs-2.4.20 b/lustre/kernel_patches/series/snapfs-2.4.20 index f448349d00..76d6c11ec1 100644 --- a/lustre/kernel_patches/series/snapfs-2.4.20 +++ b/lustre/kernel_patches/series/snapfs-2.4.20 @@ -49,4 +49,5 @@ ext3-trusted_ea-2.4.20.patch kernel_text_address-2.4.20-vanilla.patch ext3-xattr-ptr-arith-fix.patch gfp_memalloc-2.4.22.patch +loop_device_get_info.patch snapfs_core-2.4.20.patch -- GitLab