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 0000000000000000000000000000000000000000..d45d64b402bf0ad1a65e956d1a5ce6333ee748c2
--- /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 f448349d00eef9559e4a74a1ede32dc3dd6ba607..76d6c11ec10cd5ca7dd2ba9dd44a0899f5cf7b2a 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