Add dmask option to fatfs (4/4)

Add dmask option to fatfs (4/4)

Post by OGAWA Hirofum » Sun, 26 May 2002 23:20:17



This patch separate the umask for directory and file. And added the
new dmask option to be able to specify umask of a directory.

Please apply.
--

diff -urN fat_parse_opt-2.5.18/fs/fat/inode.c fat_dmask-2.5.18/fs/fat/inode.c
--- fat_parse_opt-2.5.18/fs/fat/inode.c Sat May 25 17:19:33 2002

        opts->fs_uid = current->uid;
        opts->fs_gid = current->gid;
-       opts->fs_umask = current->fs->umask;
+       opts->fs_umask = opts->fs_dmask = current->fs->umask;
        opts->codepage = 0;
        opts->iocharset = NULL;

                                goto error;
                        opts->fs_umask = val & S_IRWXUGO;
                }
+               else if (!strcmp(this_char, "dmask")) {
+                       if (want_oct(value, "dmask", &val))
+                               goto error;
+                       opts->fs_dmask = val & S_IRWXUGO;
+               }
                else if (!strcmp(this_char, "codepage")) {
                        if (want_numeric(value, "codepage", &val))

        inode->i_gid = sbi->options.fs_gid;
        inode->i_version++;
        inode->i_generation = 0;
-       inode->i_mode = (S_IRWXUGO & ~sbi->options.fs_umask) | S_IFDIR;
+       inode->i_mode = (S_IRWXUGO & ~sbi->options.fs_dmask) | S_IFDIR;
        inode->i_op = sbi->dir_ops;
        inode->i_fop = &fat_dir_operations;

        if ((de->attr & ATTR_DIR) && !IS_FREE(de->name)) {
                inode->i_generation &= ~1;
-               inode->i_mode = MSDOS_MKMODE(de->attr,S_IRWXUGO &
-                   ~sbi->options.fs_umask) | S_IFDIR;
+               inode->i_mode = MSDOS_MKMODE(de->attr,
+                       S_IRWXUGO & ~sbi->options.fs_dmask) | S_IFDIR;
                inode->i_op = sbi->dir_ops;
                inode->i_fop = &fat_dir_operations;

 int fat_notify_change(struct dentry * dentry, struct iattr * attr)
 {
-       struct super_block *sb = dentry->d_sb;
+       struct msdos_sb_info *sbi = MSDOS_SB(dentry->d_sb);
        struct inode *inode = dentry->d_inode;
-       int error = 0;
+       int mask, error = 0;

        lock_kernel();

        error = inode_change_ok(inode, attr);
        if (error) {
-               if( MSDOS_SB(sb)->options.quiet )
-                   error = 0;
+               if (sbi->options.quiet)
+                       error = 0;
                goto out;
        }

        if (((attr->ia_valid & ATTR_UID) &&
-            (attr->ia_uid != MSDOS_SB(sb)->options.fs_uid)) ||
+            (attr->ia_uid != sbi->options.fs_uid)) ||
            ((attr->ia_valid & ATTR_GID) &&
-            (attr->ia_gid != MSDOS_SB(sb)->options.fs_gid)) ||
+            (attr->ia_gid != sbi->options.fs_gid)) ||
            ((attr->ia_valid & ATTR_MODE) &&
             (attr->ia_mode & ~MSDOS_VALID_MODE)))
                error = -EPERM;

        if (error) {
-               if( MSDOS_SB(sb)->options.quiet )  
+               if (sbi->options.quiet)  
                        error = 0;
                goto out;

                goto out;

        if (S_ISDIR(inode->i_mode))
-               inode->i_mode |= S_IXUGO;
-
-       inode->i_mode = ((inode->i_mode & S_IFMT) | ((((inode->i_mode & S_IRWXU
-           & ~MSDOS_SB(sb)->options.fs_umask) | S_IRUSR) >> 6)*S_IXUGO)) &
-           ~MSDOS_SB(sb)->options.fs_umask;
+               mask = sbi->options.fs_dmask;
+       else
+               mask = sbi->options.fs_umask;
+       inode->i_mode &= S_IFMT | (S_IRWXUGO & ~mask);
 out:
        unlock_kernel();
        return error;
diff -urN fat_parse_opt-2.5.18/include/linux/msdos_fs_sb.h fat_dmask-2.5.18/include/linux/msdos_fs_sb.h
--- fat_parse_opt-2.5.18/include/linux/msdos_fs_sb.h    Sat May 25 16:52:43 2002

        uid_t fs_uid;
        gid_t fs_gid;
        unsigned short fs_umask;
+       unsigned short fs_dmask;
        unsigned short codepage;  /* Codepage for shortname conversions */
        char *iocharset;          /* Charset used for filename input/display */
        unsigned short shortname; /* flags for shortname display/create rule */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in

More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/