Whamcloud - gitweb
Add missing files, cleanup .cvsignore's
[fs/lustre-release.git] / lustre / mds / mds_reint.c
1 /*
2  *  linux/mds/handler.c
3  *  
4  *  Lustre Metadata Server (mds) request handler
5  * 
6  *  Copyright (C) 2001  Cluster File Systems, Inc.
7  *
8  *  This code is issued under the GNU General Public License.
9  *  See the file COPYING in this distribution
10  *
11  *  by Peter Braam <braam@clusterfs.com>
12  * 
13  *  This server is single threaded at present (but can easily be multi threaded). 
14  * 
15  */
16
17
18 #define EXPORT_SYMTAB
19
20 #include <linux/version.h>
21 #include <linux/module.h>
22 #include <linux/fs.h>
23 #include <linux/stat.h>
24 #include <linux/locks.h>
25 #include <linux/ext2_fs.h>
26 #include <linux/quotaops.h>
27 #include <asm/unistd.h>
28 #include <asm/uaccess.h>
29 #include <linux/obd_support.h>
30 #include <linux/obd.h>
31 #include <linux/lustre_lib.h>
32 #include <linux/lustre_idl.h>
33 #include <linux/lustre_mds.h>
34 #include <linux/obd_class.h>
35
36 extern struct mds_request *mds_prep_req(int size, int opcode, int namelen, char *name, int tgtlen, char *tgt);
37
38
39 int mds_reint_setattr(struct mds_request *req)
40 {
41         struct vfsmount *mnt;
42         struct dentry *de;
43         struct mds_rep *rep;
44         struct mds_rec_setattr *rec;
45         struct iattr attr;
46         int rc;
47
48         if (req->rq_req->tgtlen != sizeof(struct mds_rec_setattr) ) { 
49                 EXIT;
50                 printk("mds: out of memory\n");
51                 req->rq_status = -EINVAL;
52                 return -EINVAL;
53         }
54         rec = mds_req_tgt(req->rq_req);
55
56         mds_setattr_unpack(rec, &attr); 
57         de = mds_fid2dentry(req->rq_obd, &rec->sa_fid, &mnt);
58
59         printk("mds_setattr: ino %ld\n", de->d_inode->i_ino);
60         
61         rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep, 
62                           &req->rq_replen, &req->rq_repbuf);
63         if (rc) { 
64                 EXIT;
65                 printk("mds: out of memory\n");
66                 req->rq_status = -ENOMEM;
67                 return -ENOMEM;
68         }
69
70         req->rq_rephdr->seqno = req->rq_reqhdr->seqno;
71         rep = req->rq_rep;
72         req->rq_rephdr->status = notify_change(de, &attr);
73
74         dput(de);
75         EXIT;
76         return 0;
77 }
78
79