Whamcloud - gitweb
- configurable stack size fo x86_64
[fs/lustre-release.git] / lustre / kernel_patches / patches / loop_device_get_info.patch
1 Index: linux-2.4.20-8/drivers/block/loop.c
2 ===================================================================
3 --- linux-2.4.20-8.orig/drivers/block/loop.c    2002-11-29 07:53:12.000000000 +0800
4 +++ linux-2.4.20-8/drivers/block/loop.c 2004-01-10 00:02:33.000000000 +0800
5 @@ -843,6 +843,31 @@
6         }
7         return copy_to_user(arg, &info, sizeof(info)) ? -EFAULT : 0;
8  }
9 +static int loop_get_info(struct loop_device *lo, struct loop_info *arg)
10 +{
11 +       struct loop_info        info;
12 +       struct file *file = lo->lo_backing_file;
13 +
14 +       if (lo->lo_state != Lo_bound)
15 +               return -ENXIO;
16 +       if (!arg)
17 +               return -EINVAL;
18 +       memset(&info, 0, sizeof(info));
19 +       info.lo_number = lo->lo_number;
20 +       info.lo_device = kdev_t_to_nr(file->f_dentry->d_inode->i_dev);
21 +       info.lo_inode = file->f_dentry->d_inode->i_ino;
22 +       info.lo_rdevice = kdev_t_to_nr(lo->lo_device);
23 +       info.lo_offset = lo->lo_offset;
24 +       info.lo_flags = lo->lo_flags;
25 +       strncpy(info.lo_name, lo->lo_name, LO_NAME_SIZE);
26 +       info.lo_encrypt_type = lo->lo_encrypt_type;
27 +       if (lo->lo_encrypt_key_size && capable(CAP_SYS_ADMIN)) {
28 +               info.lo_encrypt_key_size = lo->lo_encrypt_key_size;
29 +               memcpy(info.lo_encrypt_key, lo->lo_encrypt_key,
30 +                      lo->lo_encrypt_key_size);
31 +       }
32 +       return memcpy(arg, &info, sizeof(info)) ? -EFAULT : 0;
33 +}
34  
35  static int lo_ioctl(struct inode * inode, struct file * file,
36         unsigned int cmd, unsigned long arg)
37 @@ -875,6 +900,9 @@
38         case LOOP_GET_STATUS:
39                 err = loop_get_status(lo, (struct loop_info *) arg);
40                 break;
41 +       case LOOP_GET_INFO:
42 +               err = loop_get_info(lo, (struct loop_info *) arg);
43 +               break;
44         case BLKGETSIZE:
45                 if (lo->lo_state != Lo_bound) {
46                         err = -ENXIO;
47 Index: linux-2.4.20-8/include/linux/loop.h
48 ===================================================================
49 --- linux-2.4.20-8.orig/include/linux/loop.h    2001-09-18 04:16:30.000000000 +0800
50 +++ linux-2.4.20-8/include/linux/loop.h 2004-01-09 23:50:17.000000000 +0800
51 @@ -151,5 +151,6 @@
52  #define LOOP_CLR_FD    0x4C01
53  #define LOOP_SET_STATUS        0x4C02
54  #define LOOP_GET_STATUS        0x4C03
55 +#define LOOP_GET_INFO  0x4C04
56  
57  #endif