OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [fs/] [cifs/] [ioctl.c] - Blame information for rev 78

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 *   fs/cifs/ioctl.c
3
 *
4
 *   vfs operations that deal with io control
5
 *
6
 *   Copyright (C) International Business Machines  Corp., 2005,2007
7
 *   Author(s): Steve French (sfrench@us.ibm.com)
8
 *
9
 *   This library is free software; you can redistribute it and/or modify
10
 *   it under the terms of the GNU Lesser General Public License as published
11
 *   by the Free Software Foundation; either version 2.1 of the License, or
12
 *   (at your option) any later version.
13
 *
14
 *   This library is distributed in the hope that it will be useful,
15
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
17
 *   the GNU Lesser General Public License for more details.
18
 *
19
 *   You should have received a copy of the GNU Lesser General Public License
20
 *   along with this library; if not, write to the Free Software
21
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
 */
23
 
24
#include <linux/fs.h>
25
#include "cifspdu.h"
26
#include "cifsglob.h"
27
#include "cifsproto.h"
28
#include "cifs_debug.h"
29
#include "cifsfs.h"
30
 
31
#define CIFS_IOC_CHECKUMOUNT _IO(0xCF, 2)
32
 
33
int cifs_ioctl (struct inode *inode, struct file *filep,
34
                unsigned int command, unsigned long arg)
35
{
36
        int rc = -ENOTTY; /* strange error - but the precedent */
37
        int xid;
38
        struct cifs_sb_info *cifs_sb;
39
#ifdef CONFIG_CIFS_POSIX
40
        __u64   ExtAttrBits = 0;
41
        __u64   ExtAttrMask = 0;
42
        __u64   caps;
43
        struct cifsTconInfo *tcon;
44
        struct cifsFileInfo *pSMBFile =
45
                (struct cifsFileInfo *)filep->private_data;
46
#endif /* CONFIG_CIFS_POSIX */
47
 
48
        xid = GetXid();
49
 
50
        cFYI(1, ("ioctl file %p  cmd %u  arg %lu", filep, command, arg));
51
 
52
        cifs_sb = CIFS_SB(inode->i_sb);
53
 
54
#ifdef CONFIG_CIFS_POSIX
55
        tcon = cifs_sb->tcon;
56
        if (tcon)
57
                caps = le64_to_cpu(tcon->fsUnixInfo.Capability);
58
        else {
59
                rc = -EIO;
60
                FreeXid(xid);
61
                return -EIO;
62
        }
63
#endif /* CONFIG_CIFS_POSIX */
64
 
65
        switch (command) {
66
                case CIFS_IOC_CHECKUMOUNT:
67
                        cFYI(1, ("User unmount attempted"));
68
                        if (cifs_sb->mnt_uid == current->uid)
69
                                rc = 0;
70
                        else {
71
                                rc = -EACCES;
72
                                cFYI(1, ("uids do not match"));
73
                        }
74
                        break;
75
#ifdef CONFIG_CIFS_POSIX
76
                case FS_IOC_GETFLAGS:
77
                        if (CIFS_UNIX_EXTATTR_CAP & caps) {
78
                                if (pSMBFile == NULL)
79
                                        break;
80
                                rc = CIFSGetExtAttr(xid, tcon, pSMBFile->netfid,
81
                                        &ExtAttrBits, &ExtAttrMask);
82
                                if (rc == 0)
83
                                        rc = put_user(ExtAttrBits &
84
                                                FS_FL_USER_VISIBLE,
85
                                                (int __user *)arg);
86
                        }
87
                        break;
88
 
89
                case FS_IOC_SETFLAGS:
90
                        if (CIFS_UNIX_EXTATTR_CAP & caps) {
91
                                if (get_user(ExtAttrBits, (int __user *)arg)) {
92
                                        rc = -EFAULT;
93
                                        break;
94
                                }
95
                                if (pSMBFile == NULL)
96
                                        break;
97
                                /* rc= CIFSGetExtAttr(xid,tcon,pSMBFile->netfid,
98
                                        extAttrBits, &ExtAttrMask);*/
99
                        }
100
                        cFYI(1, ("set flags not implemented yet"));
101
                        break;
102
#endif /* CONFIG_CIFS_POSIX */
103
                default:
104
                        cFYI(1, ("unsupported ioctl"));
105
                        break;
106
        }
107
 
108
        FreeXid(xid);
109
        return rc;
110
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.