Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9b7880e7bb30e641037550888b5c22d94c77f254
Commit:     9b7880e7bb30e641037550888b5c22d94c77f254
Parent:     6d141c3ff6d74cc30cdbf26155842756ac16cf7f
Author:     Jan Kara <[EMAIL PROTECTED]>
AuthorDate: Fri Feb 8 04:21:09 2008 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Fri Feb 8 09:22:38 2008 -0800

    isofs: implement dmode option
    
    Implement dmode option for iso9660 filesystem to allow setting of access
    rights for directories on the filesystem.
    
    Signed-off-by: Jan Kara <[EMAIL PROTECTED]>
    Cc: "Ilya N. Golubev" <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 Documentation/filesystems/isofs.txt |    1 +
 fs/isofs/inode.c                    |   23 +++++++++++++++--------
 fs/isofs/isofs.h                    |    3 ++-
 3 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/Documentation/filesystems/isofs.txt 
b/Documentation/filesystems/isofs.txt
index 758e504..6973b98 100644
--- a/Documentation/filesystems/isofs.txt
+++ b/Documentation/filesystems/isofs.txt
@@ -24,6 +24,7 @@ Mount options unique to the isofs filesystem.
   map=normal    Map non-Rock Ridge filenames to lower case
   map=acorn     As map=normal but also apply Acorn extensions if present
   mode=xxx      Sets the permissions on files to xxx
+  dmode=xxx     Sets the permissions on directories to xxx
   nojoliet      Ignore Joliet extensions if they are present.
   norock        Ignore Rock Ridge extensions if they are present.
   hide         Completely strip hidden files from the file system.
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index 875d37f..c3240b4 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -144,7 +144,8 @@ struct iso9660_options{
        char nocompress;
        unsigned char check;
        unsigned int blocksize;
-       mode_t mode;
+       mode_t fmode;
+       mode_t dmode;
        gid_t gid;
        uid_t uid;
        char *iocharset;
@@ -305,7 +306,7 @@ enum {
        Opt_block, Opt_check_r, Opt_check_s, Opt_cruft, Opt_gid, Opt_ignore,
        Opt_iocharset, Opt_map_a, Opt_map_n, Opt_map_o, Opt_mode, Opt_nojoliet,
        Opt_norock, Opt_sb, Opt_session, Opt_uid, Opt_unhide, Opt_utf8, Opt_err,
-       Opt_nocompress, Opt_hide, Opt_showassoc,
+       Opt_nocompress, Opt_hide, Opt_showassoc, Opt_dmode,
 };
 
 static match_table_t tokens = {
@@ -332,6 +333,7 @@ static match_table_t tokens = {
        {Opt_uid, "uid=%u"},
        {Opt_gid, "gid=%u"},
        {Opt_mode, "mode=%u"},
+       {Opt_dmode, "dmode=%u"},
        {Opt_block, "block=%u"},
        {Opt_ignore, "conv=binary"},
        {Opt_ignore, "conv=b"},
@@ -359,7 +361,7 @@ static int parse_options(char *options, struct 
iso9660_options *popt)
        popt->check = 'u';              /* unset */
        popt->nocompress = 0;
        popt->blocksize = 1024;
-       popt->mode = S_IRUGO | S_IXUGO; /*
+       popt->fmode = popt->dmode = S_IRUGO | S_IXUGO; /*
                                         * r-x for all.  The disc could
                                         * be shared with DOS machines so
                                         * virtually anything could be
@@ -451,7 +453,12 @@ static int parse_options(char *options, struct 
iso9660_options *popt)
                case Opt_mode:
                        if (match_int(&args[0], &option))
                                return 0;
-                       popt->mode = option;
+                       popt->fmode = option;
+                       break;
+               case Opt_dmode:
+                       if (match_int(&args[0], &option))
+                               return 0;
+                       popt->dmode = option;
                        break;
                case Opt_block:
                        if (match_int(&args[0], &option))
@@ -801,7 +808,8 @@ root_found:
         * on the disk as suid, so we merely allow them to set the default
         * permissions.
         */
-       sbi->s_mode = opt.mode & 0777;
+       sbi->s_fmode = opt.fmode & 0777;
+       sbi->s_dmode = opt.dmode & 0777;
 
        /*
         * Read the root inode, which _may_ result in changing
@@ -1248,7 +1256,7 @@ static int isofs_read_inode(struct inode *inode)
        ei->i_file_format = isofs_file_normal;
 
        if (de->flags[-high_sierra] & 2) {
-               inode->i_mode = S_IRUGO | S_IXUGO | S_IFDIR;
+               inode->i_mode = sbi->s_dmode | S_IFDIR;
                inode->i_nlink = 1;     /*
                                         * Set to 1.  We know there are 2, but
                                         * the find utility tries to optimize
@@ -1258,9 +1266,8 @@ static int isofs_read_inode(struct inode *inode)
                                         */
        } else {
                /* Everybody gets to read the file. */
-               inode->i_mode = sbi->s_mode;
+               inode->i_mode = sbi->s_fmode | S_IFREG;
                inode->i_nlink = 1;
-               inode->i_mode |= S_IFREG;
        }
        inode->i_uid = sbi->s_uid;
        inode->i_gid = sbi->s_gid;
diff --git a/fs/isofs/isofs.h b/fs/isofs/isofs.h
index f3213f9..d1bdf8a 100644
--- a/fs/isofs/isofs.h
+++ b/fs/isofs/isofs.h
@@ -51,7 +51,8 @@ struct isofs_sb_info {
        unsigned char s_hide;
        unsigned char s_showassoc;
 
-       mode_t s_mode;
+       mode_t s_fmode;
+       mode_t s_dmode;
        gid_t s_gid;
        uid_t s_uid;
        struct nls_table *s_nls_iocharset; /* Native language support table */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to