On 03/31/2011 12:34 AM, Tristan Ye wrote:
> Given that VFS has alreay supported an entry to handle the unwritten_extents
> and punching-hole(is to be supported) by filp->f_op->fallocate(), our path of
> OCFS2_IOC_RESVSP becomes a bit redundant somehow, especially given the fact
> that ocfs2_fallocate() is working well.
>
> Signed-off-by: Tristan Ye<[email protected]>
> ---
>   fs/ocfs2/file.c        |   63 
> ++++++++++++++++++++---------------------------
>   fs/ocfs2/file.h        |    3 --
>   fs/ocfs2/ioctl.c       |   13 ----------
>   fs/ocfs2/ocfs2_ioctl.h |   29 +++-------------------
>   4 files changed, 31 insertions(+), 77 deletions(-)
>
> diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
> index cce8c2b..d016322 100644
> --- a/fs/ocfs2/file.c
> +++ b/fs/ocfs2/file.c
> @@ -37,6 +37,7 @@
>   #include<linux/falloc.h>
>   #include<linux/quotaops.h>
>   #include<linux/blkdev.h>
> +#include<linux/falloc.h>
>
>   #include<cluster/masklog.h>
>
> @@ -1804,7 +1805,7 @@ out:
>    */
>   static int __ocfs2_change_file_space(struct file *file, struct inode *inode,
>                                    loff_t f_pos, unsigned int cmd,
> -                                  struct ocfs2_space_resv *sr,
> +                                  struct space_resv *sr,
>                                    int change_size)
>   {
>       int ret;
> @@ -1866,7 +1867,7 @@ static int __ocfs2_change_file_space(struct file *file, 
> struct inode *inode,
>       }
>       size = sr->l_start + sr->l_len;
>
> -     if (cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64) {
> +     if (cmd == FS_IOC_RESVSP || cmd == FS_IOC_RESVSP64) {
>               if (sr->l_len<= 0) {
>                       ret = -EINVAL;
>                       goto out_inode_unlock;
> @@ -1883,8 +1884,8 @@ static int __ocfs2_change_file_space(struct file *file, 
> struct inode *inode,
>
>       down_write(&OCFS2_I(inode)->ip_alloc_sem);
>       switch (cmd) {
> -     case OCFS2_IOC_RESVSP:
> -     case OCFS2_IOC_RESVSP64:
> +     case FS_IOC_RESVSP:
> +     case FS_IOC_RESVSP64:
>               /*
>                * This takes unsigned offsets, but the signed ones we
>                * pass have been checked against overflow above.
> @@ -1892,8 +1893,8 @@ static int __ocfs2_change_file_space(struct file *file, 
> struct inode *inode,
>               ret = ocfs2_allocate_unwritten_extents(inode, sr->l_start,
>                                                      sr->l_len);
>               break;
> -     case OCFS2_IOC_UNRESVSP:
> -     case OCFS2_IOC_UNRESVSP64:
> +     case FS_IOC_UNRESVSP:
> +     case FS_IOC_UNRESVSP64:
>               ret = ocfs2_remove_inode_range(inode, di_bh, sr->l_start,
>                                              sr->l_len);
>               break;
> @@ -1937,47 +1938,37 @@ out:
>       return ret;
>   }
>
> -int ocfs2_change_file_space(struct file *file, unsigned int cmd,
> -                         struct ocfs2_space_resv *sr)
> -{
> -     struct inode *inode = file->f_path.dentry->d_inode;
> -     struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
> -
> -     if ((cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64)&&
> -         !ocfs2_writes_unwritten_extents(osb))
> -             return -ENOTTY;
> -     else if ((cmd == OCFS2_IOC_UNRESVSP || cmd == OCFS2_IOC_UNRESVSP64)&&
> -              !ocfs2_sparse_alloc(osb))
> -             return -ENOTTY;
> -
> -     if (!S_ISREG(inode->i_mode))
> -             return -EINVAL;
> -
> -     if (!(file->f_mode&  FMODE_WRITE))
> -             return -EBADF;
> -
> -     return __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0);
> -}
> -
>   static long ocfs2_fallocate(struct file *file, int mode, loff_t offset,
>                           loff_t len)
>   {
>       struct inode *inode = file->f_path.dentry->d_inode;
>       struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
> -     struct ocfs2_space_resv sr;
> +     struct space_resv sr;
>       int change_size = 1;
> -     int cmd = OCFS2_IOC_RESVSP64;
> +     int cmd = FS_IOC_RESVSP64;
>
>       if (mode&  ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
>               return -EOPNOTSUPP;
> -     if (!ocfs2_writes_unwritten_extents(osb))
> -             return -EOPNOTSUPP;
>
> -     if (mode&  FALLOC_FL_KEEP_SIZE)
> -             change_size = 0;
> +     /*
> +      * unwritten extents
> +      */
> +     if ((mode&  FALLOC_FL_KEEP_SIZE)&&  !(mode&  FALLOC_FL_PUNCH_HOLE)) {
> +             if (ocfs2_writes_unwritten_extents(osb))
> +                     change_size = 0;
> +             else
> +                     return -EOPNOTSUPP;
> +     }

I think you have made the code harder to read that it was previously.


>
> -     if (mode&  FALLOC_FL_PUNCH_HOLE)
> -             cmd = OCFS2_IOC_UNRESVSP64;
> +     /*
> +      * punching hole
> +      */
> +     if ((mode&  FALLOC_FL_KEEP_SIZE)&&  (mode&  FALLOC_FL_PUNCH_HOLE)) {
> +             if (ocfs2_sparse_alloc(osb))
> +                     cmd = FS_IOC_UNRESVSP64;
> +             else
> +                     return -EOPNOTSUPP;
> +     }
>
>       sr.l_whence = 0;
>       sr.l_start = (s64)offset;
> diff --git a/fs/ocfs2/file.h b/fs/ocfs2/file.h
> index f5afbbe..2c9b7a8 100644
> --- a/fs/ocfs2/file.h
> +++ b/fs/ocfs2/file.h
> @@ -68,9 +68,6 @@ int ocfs2_should_update_atime(struct inode *inode,
>   int ocfs2_update_inode_atime(struct inode *inode,
>                            struct buffer_head *bh);
>
> -int ocfs2_change_file_space(struct file *file, unsigned int cmd,
> -                         struct ocfs2_space_resv *sr);
> -
>   int ocfs2_check_range_for_refcount(struct inode *inode, loff_t pos,
>                                  size_t count);
>   #endif /* OCFS2_FILE_H */
> diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c
> index 8f13c59..d703210 100644
> --- a/fs/ocfs2/ioctl.c
> +++ b/fs/ocfs2/ioctl.c
> @@ -476,7 +476,6 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd, 
> unsigned long arg)
>       unsigned int flags;
>       int new_clusters;
>       int status;
> -     struct ocfs2_space_resv sr;
>       struct ocfs2_new_group_input input;
>       struct reflink_arguments args;
>       const char *old_path, *new_path;
> @@ -502,14 +501,6 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd, 
> unsigned long arg)
>                       OCFS2_FL_MODIFIABLE);
>               mnt_drop_write(filp->f_path.mnt);
>               return status;
> -     case OCFS2_IOC_RESVSP:
> -     case OCFS2_IOC_RESVSP64:
> -     case OCFS2_IOC_UNRESVSP:
> -     case OCFS2_IOC_UNRESVSP64:
> -             if (copy_from_user(&sr, (int __user *) arg, sizeof(sr)))
> -                     return -EFAULT;
> -
> -             return ocfs2_change_file_space(filp, cmd,&sr);
>       case OCFS2_IOC_GROUP_EXTEND:
>               if (!capable(CAP_SYS_RESOURCE))
>                       return -EPERM;
> @@ -562,10 +553,6 @@ long ocfs2_compat_ioctl(struct file *file, unsigned cmd, 
> unsigned long arg)
>       case OCFS2_IOC32_SETFLAGS:
>               cmd = OCFS2_IOC_SETFLAGS;
>               break;
> -     case OCFS2_IOC_RESVSP:
> -     case OCFS2_IOC_RESVSP64:
> -     case OCFS2_IOC_UNRESVSP:
> -     case OCFS2_IOC_UNRESVSP64:
>       case OCFS2_IOC_GROUP_EXTEND:
>       case OCFS2_IOC_GROUP_ADD:
>       case OCFS2_IOC_GROUP_ADD64:
> diff --git a/fs/ocfs2/ocfs2_ioctl.h b/fs/ocfs2/ocfs2_ioctl.h
> index b46f39b..4f9bf28 100644
> --- a/fs/ocfs2/ocfs2_ioctl.h
> +++ b/fs/ocfs2/ocfs2_ioctl.h
> @@ -28,31 +28,10 @@
>   #define OCFS2_IOC32_GETFLAGS        FS_IOC32_GETFLAGS
>   #define OCFS2_IOC32_SETFLAGS        FS_IOC32_SETFLAGS
>
> -/*
> - * Space reservation / allocation / free ioctls and argument structure
> - * are designed to be compatible with XFS.
> - *
> - * ALLOCSP* and FREESP* are not and will never be supported, but are
> - * included here for completeness.
> - */
> -struct ocfs2_space_resv {
> -     __s16           l_type;
> -     __s16           l_whence;
> -     __s64           l_start;
> -     __s64           l_len;          /* len == 0 means until end of file */
> -     __s32           l_sysid;
> -     __u32           l_pid;
> -     __s32           l_pad[4];       /* reserve area                     */
> -};
> -
> -#define OCFS2_IOC_ALLOCSP            _IOW ('X', 10, struct ocfs2_space_resv)
> -#define OCFS2_IOC_FREESP             _IOW ('X', 11, struct ocfs2_space_resv)
> -#define OCFS2_IOC_RESVSP             _IOW ('X', 40, struct ocfs2_space_resv)
> -#define OCFS2_IOC_UNRESVSP   _IOW ('X', 41, struct ocfs2_space_resv)
> -#define OCFS2_IOC_ALLOCSP64  _IOW ('X', 36, struct ocfs2_space_resv)
> -#define OCFS2_IOC_FREESP64   _IOW ('X', 37, struct ocfs2_space_resv)
> -#define OCFS2_IOC_RESVSP64   _IOW ('X', 42, struct ocfs2_space_resv)
> -#define OCFS2_IOC_UNRESVSP64 _IOW ('X', 43, struct ocfs2_space_resv)
> +#define OCFS2_IOC_ALLOCSP            _IOW ('X', 10, struct space_resv)
> +#define OCFS2_IOC_FREESP             _IOW ('X', 11, struct space_resv)
> +#define OCFS2_IOC_ALLOCSP64  _IOW ('X', 36, struct space_resv)
> +#define OCFS2_IOC_FREESP64   _IOW ('X', 37, struct space_resv)
>
>   /* Used to pass group descriptor data when online resize is done */
>   struct ocfs2_new_group_input {


_______________________________________________
Ocfs2-devel mailing list
[email protected]
http://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to